Почему загрузка данных из SQL намного медленнее, чем в Excel? - PullRequest
1 голос
/ 25 марта 2019

У меня есть простая табличная модель, созданная в SSDT, которую я развернул в своем локальном экземпляре SSAS (модель совместимости = Azure Analysis Services / SQL Server 2017 (1400) )

Ниже двух моих тестовых источников, один с локального сервера SQL 2017 и один из локального файла Excel. Оба источника имеют только одну таблицу с 4 строками в каждой.

"dataSources": [
      {
        "type": "structured",
        "name": "SQL/localhost;MyDB",
        "connectionDetails": {
          "protocol": "tds",
          "address": {
            "server": "localhost",
            "database": "MyDB"
          },
          "authentication": null,
          "query": null
        },
        "credential": {
          "AuthenticationKind": "UsernamePassword",
          "kind": "SQL",
          "path": "localhost;MyDB",
          "Username": "MyUserName",
          "EncryptConnection": false
        }
      },
      {
        "type": "structured",
        "name": "FileExcel",
        "connectionDetails": {
          "protocol": "file",
          "address": {
            "path": "C:\\testExcelForSSAS.xlsx"
          },
          "authentication": null,
          "query": null
        },
        "credential": {
          "AuthenticationKind": "Windows",
          "kind": "File",
          "path": "c:\\testexcelforssas.xlsx",
          "Username": "MyUserName"
        },
        "contextExpression": [
          "let",
          "    #\"0001\" = Excel.Workbook(..., null, true)",
          "in",
          "    #\"0001\""
        ]
      }
    ],

Проблема: (полная) обработка источника таблицы Excel занимает менее 1 секунды, (полная) обработка таблицы SQL занимает до 20 секунд.

Я сделал SQL Trace, и этот запрос (в ExecuteSQL EventSubClass) занимает 20 секунд:

let __AS_Query__ =  let
    Source = #"SQL/localhost;MyDB",
    dbo_formulas = Source{[Schema="dbo",Item="formulas"]}[Data],
    #"Added Custom" = Table.AddColumn(dbo_formulas, "NameWithID", each [NameEU] & " (" & Number.ToText([ID])) in
    #"Added Custom" , __AS_Table__ = Table.FromValue(__AS_Query__) in Table.RemoveColumns(__AS_Table__, Table.ColumnsOfType(__AS_Table__, { type table, type record, type list }))

Для справки, это вызов данных Excel

let __AS_Query__ = 
let
    Source = #"FileExcel",
    Table1_Table = Source{[Item="Table1",Kind="Table"]}[Data]
in
    Table1_Table
, __AS_Table__ = Table.FromValue(__AS_Query__)
in
Table.RemoveColumns(__AS_Table__, Table.ColumnsOfType(__AS_Table__, { type table, type record, type list }))

Почему простой запрос для извлечения 4 строк из SQL занимает 20 секунд, а тот же объем данных из Excel занимает менее секунды?

EDIT: Я сделал трассировку на сервере SQL, ниже результата. Реальный SQL-запрос (выделенный) почти не требует времени, но некоторые другие запросы до этого занимают довольно много времени. Это связано с некоторой конфигурацией соединения SSAS с этим сервером SQL?

SQL Server Trace

Спасибо

...