Разница в производительности в запросе SSAS в MSS Studio против Java MDX - PullRequest
1 голос
/ 29 апреля 2019

Для контекста, я не эксперт SSAS или даже заядлый пользователь, я в первую очередь разработчик Java.У нас есть команда специалистов в области данных, которая использует SSAS для написания, разработки и тестирования различных моделей.

Чтобы интегрировать выходные данные этих моделей с другими системами сторонних разработчиков, я создаю службу на основе Java, которая можетзапросите определенные поля из куба, используя Olap4j / XMLA для запуска запроса MDX.Но производительность (или ее отсутствие) сбивает меня с толку.

Если я открою MSS Studio, «просмотрю» куб, перетащу ряд мер на панель мер, переключу «Показать пустые ячейки» (иначе для некоторыхпричина, по которой я не получаю результатов) и нажимаю «выполнить», я получаю ожидаемые результаты практически мгновенно.Если я нажимаю на красный квадрат, чтобы отключить «режим разработки», я перехожу к коду MDX, который выглядит примерно так:

SELECT { } ON COLUMNS, { (
    [Main].[Measure01].[Measure01].ALLMEMBERS * 
    [Main].[Measure02].[Measure02].ALLMEMBERS * 
    [Main].[Measure03].[Measure03].ALLMEMBERS * 
    [Main].[Measure04].[Measure04].ALLMEMBERS 
) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM ( 
  SELECT ( { 
    [Main].[Measure01].&[1] 
} ) ON COLUMNS FROM [Model]) 
CELL PROPERTIES VALUE

Если я возьму этот запрос MDX и вставлю его в свое Java-приложение,и запустить его, потребуется более 30 секунд, чтобы вернуть результаты, используя следующий код:

    Class.forName("org.olap4j.driver.xmla.XmlaOlap4jDriver");
    Connection connection = DriverManager.getConnection(cubeUrl);
    OlapConnection olapConnection = connection.unwrap(OlapConnection.class);
    olapConnection.setCatalog(catalog);

    OlapStatement statement = olapConnection.createStatement();

    LOG.info("Running Cube query");

    CellSet cellSet = statement.executeOlapQuery("<<The MDX Query here>>");

И чем больше мер я добавлю, тем медленнее получится.Я попытался добавить в код некоторые контрольные точки журналирования и отладки, но на самом деле кажется, что сам SSAS медленно возвращает мои данные.

Учитывая, что я очень мало знаю о SSAS, что я могу сделатьпытаться?Есть ли в Olap4j некоторые параметры конфигурации, которые я не установил?Проводит ли MSS Studio некоторую оптимизацию за кулисами, которую я не могу воспроизвести?

РЕДАКТИРОВАТЬ 1:

На догадке я установил Wireshark для мониторинга своего сетевого трафика,и пока мой запрос выполняется, я вижу сотни тысяч, если не миллионы пакетов, проходящих между моим ноутбуком и сервером SSAS.Сетевые пакеты трудно интерпретировать, но многие из них, похоже, отправляют HTTP-данные со значениями показателей. Такие вещи, как:

<Member Hierarchy="[Main].[Measure01]">
    <UName>[Main].[Measure01].&amp;[0]</UName>
    <Caption>0.00</Caption>
    <LName>[Main].[Measure01].[Measure01]</LName>
    <LNum>1</LNum>
    <DisplayInfo>131072</DisplayInfo>
    <MEMBER_CAPTION>0.00</MEMBER_CAPTION>
    <MEMBER_UNIQUE_NAME>[Main].[Measure01].&amp;[0]</MEMBER_UNIQUE_NAME>
    <MEMBER_NAME>0</MEMBER_NAME>
    <MEMBER_VALUE xsi:type="xsd:double">0</MEMBER_VALUE>
</Member>
<Member Hierarchy="[Main].[Measure02]">
    <UName>[Main].[Measure02].&amp;[0]</UName>
    <Caption>0</Caption>
    <LName>[Main].[Measure02].[Measure02]</LName>
    <LNum>1</LNum>
    <DisplayInfo>131072</DisplayInfo>
    <MEMBER_CAPTION>0</MEMBER_CAPTION>
    <MEMBER_UNIQUE_NAME>[Main].[Measure02].&amp;[0]</MEMBER_UNIQUE_NAME>
    <MEMBER_NAME>0</MEMBER_NAME>
    <MEMBER_VALUE xsi:type="xsd:double">0</MEMBER_VALUE>
</Member>
<Member Hierarchy="[Main].[Measure03]">
    <UName>[Main].[Measure03].&amp;</UName>
    <Caption/>
    <LName>[Main].[Measure03].[Measure03]</LName>
    <LNum>1</LNum>
    <DisplayInfo>131072</DisplayInfo>
    <MEMBER_UNIQUE_NAME>[Main].[Measure03].&amp;</MEMBER_UNIQUE_NAME>
    <MEMBER_VALUE xsi:nil="true"/>
</Member>

Так что кажется, что медлительность может фактически быть сетевым трафиком!Есть ли способ получить olap4j / IIS / SSAS для сжатия трафика, чтобы я мог получить такую ​​же производительность в olap4j, как и в MSS, где тот же объем данных извлекается менее чем за секунду?

...