Einfacher Leistungstest in Azure SQL Data Warehouse

Wir arbeiten daran, vorhandene Anwendungen auf Azure SQL Data Warehouse zu portieren. Um die Leistungs- / Workload-Management-Merkmale / -Funktionen von Azure SQL Data Warehouse besser zu verstehen, habe ich einen meiner Meinung nach sehr einfachen Test eingerichtet.

Ich habe eine statische Tabelle, den Kalender unseres Unternehmens, geladen, die etwa 20.000 Zeilen enthält (d. H. Sehr klein für ein paralleles Data Warehouse). Ich habe dann alle möglichen Abfragen dieser einzelnen Tabelle mit einem Muster wie dem folgenden generiert:

SELECT current_timestamp,COUNT(1) FROM 
  ( SELECT C1, ..., Cn , COUNT(1) AS _A_ROW_COUNT 
FROM schema.view_to_table GROUP BY C1, ..., Cn) DER

Givens:

DWU auf 1000 gesetzt. 35 gleichzeitige Threads gestartet.Alle Threads, die in small_rc ausgeführt werden. (Das heißt, mit 1 Slot pro Abfrage.)Verwenden von sqlcmd bei der ersten Verbindung und anschließendes Festschreiben nach jedem SELECTAusgeführt auf einer Nicht-Azure-VM mit Verbindung über Express-Route. Wählen Sie das äußere SELECT COUNT () -Konstrukt, um sicherzustellen, dass der Netzwerkverkehr minimal ist.ie Verwendung der Heap-Tabelle lieferte (wie erwartet) bessere Ergebnisse als der Standard-Columnstore. (Muss mit Clustered-Index getestet werden.)Table wird über die Primärschlüsselspalte verteilt.

Background / Biases - Ich habe mit vielen anderen MPP-Datenbanken gearbeitet.

Ergebniss

Queries werden in 10-20 Sekunden ausgeführt, was viel länger ist, als ich für solch eine einfache Arbeit erwarten würde.Wenn ich jeden Thread eingereicht habe, habe ich zwischen jedem neuen Thread geschlafen. Die anfänglichen Abfragen liefen viel schneller und die durchschnittlichen Laufzeiten verschlechterten sich dramatisch, als die Anzahl der Threads auf 35 stieg.

Wie verstehe ich, welcher Engpass besteht?

Natürlich werde ich die Tests bei anderen DWU-Einstellungen erneut ausführen, um festzustellen, ob dies eine ausschließlich kleine_rc-Auslastung bewirkt.

Anhang - Beispiel für einen Abfrageplan

<?xml version="1.0" encoding="utf-8"?>
<dsql_query number_nodes="10" number_distributions="60" number_distributions_per_node="6">
  <sql>SELECT current_timestamp,COUNT(1) FROM ( SELECT GREGORIAN_DATE, WM_MONTH, MON_MULT, FRI_MULT , COUNT(1) AS _A_ROW_COUNT FROM AR_WM_VM.CALENDAR_DAY GROUP BY GREGORIAN_DATE, WM_MONTH, MON_MULT, FRI_MULT) DER</sql>
  <dsql_operations total_cost="0.260568" total_number_operations="8">
    <dsql_operation operation_type="RND_ID">
      <identifier>TEMP_ID_21523</identifier>
    </dsql_operation>
    <dsql_operation operation_type="ON">
      <location permanent="false" distribution="AllDistributions" />
      <sql_operations>
        <sql_operation type="statement">CREATE TABLE [tempdb].[dbo].[TEMP_ID_21523] ([col] DATE ) WITH(DATA_COMPRESSION=PAGE);</sql_operation>
      </sql_operations>
    </dsql_operation>
    <dsql_operation operation_type="SHUFFLE_MOVE">
      <operation_cost cost="0.258648" accumulative_cost="0.258648" average_rowsize="3" output_rows="2155.4" GroupNumber="76" />
      <source_statement>SELECT [T1_1].[col] AS [col]
FROM   (SELECT dateadd(dd, CAST ((364) AS INT), [T2_1].[calendar_date]) AS [col]
        FROM   [db_ARdev1].[AR_CORE_DIM_TABLES].[calendar_dim] AS T2_1) AS T1_1</source_statement>
      <destination_table>[TEMP_ID_21523]</destination_table>
      <shuffle_columns>col;</shuffle_columns>
    </dsql_operation>
    <dsql_operation operation_type="ON">
      <location permanent="false" distribution="Control" />
      <sql_operations>
        <sql_operation type="statement">CREATE TABLE [tempdb].[QTables].[QTable_3ff26b5253004eec9d9ca50492bab1e2] ([col] BIGINT ) WITH(DATA_COMPRESSION=PAGE);</sql_operation>
      </sql_operations>
    </dsql_operation>
    <dsql_operation operation_type="PARTITION_MOVE">
      <operation_cost cost="0.00192" accumulative_cost="0.260568" average_rowsize="8" output_rows="1" GroupNumber="93" />
      <location distribution="AllDistributions" />
      <source_statement>SELECT [T1_1].[col] AS [col]
FROM   (SELECT   COUNT_BIG(CAST ((1) AS INT)) AS [col]
        FROM     (SELECT   0 AS [col]
                  FROM     [tempdb].[dbo].[TEMP_ID_21523] AS T3_1
                           INNER JOIN
                           (SELECT CASE
                                    WHEN ([T4_1].[wm_week_day_nbr] = CAST ((3) AS SMALLINT)) THEN CAST ((1) AS INT)
                                    ELSE CAST ((0) AS INT)
                                   END AS [col],
                                   CASE
                                    WHEN ([T4_1].[wm_week_day_nbr] = CAST ((7) AS SMALLINT)) THEN CAST ((1) AS INT)
                                    ELSE CAST ((0) AS INT)
                                   END AS [col1],
                                   [T4_1].[calendar_date] AS [calendar_date],
                                   [T4_1].[fiscal_month_nbr] AS [fiscal_month_nbr]
                            FROM   [db_ARdev1].[AR_CORE_DIM_TABLES].[calendar_dim] AS T4_1) AS T3_2
                           ON ([T3_2].[calendar_date] = [T3_1].[col])
                  GROUP BY [T3_2].[calendar_date], [T3_2].[fiscal_month_nbr], [T3_2].[col], [T3_2].[col1]) AS T2_1
        GROUP BY [T2_1].[col]) AS T1_1</source_statement>
      <destination>Control</destination>
      <destination_table>[QTable_3ff26b5253004eec9d9ca50492bab1e2]</destination_table>
    </dsql_operation>
    <dsql_operation operation_type="ON">
      <location permanent="false" distribution="AllDistributions" />
      <sql_operations>
        <sql_operation type="statement">DROP TABLE [tempdb].[dbo].[TEMP_ID_21523]</sql_operation>
      </sql_operations>
    </dsql_operation>
    <dsql_operation operation_type="RETURN">
      <location distribution="Control" />
      <select>SELECT [T1_1].[col1] AS [col],
       [T1_1].[col] AS [col1]
FROM   (SELECT CONVERT (INT, [T2_1].[col], 0) AS [col],
               isnull(CONVERT (DATETIME, N'2016-10-03 13:04:34.203', 0), CONVERT (DATETIME, N'2016-10-03 13:04:34.203', 0)) AS [col1]
        FROM   (SELECT ISNULL([T3_1].[col], CONVERT (BIGINT, 0, 0)) AS [col]
                FROM   (SELECT SUM([T4_1].[col]) AS [col]
                        FROM   [tempdb].[QTables].[QTable_3ff26b5253004eec9d9ca50492bab1e2] AS T4_1) AS T3_1) AS T2_1) AS T1_1</select>
    </dsql_operation>
    <dsql_operation operation_type="ON">
      <location permanent="false" distribution="Control" />
      <sql_operations>
        <sql_operation type="statement">DROP TABLE [tempdb].[QTables].[QTable_3ff26b5253004eec9d9ca50492bab1e2]</sql_operation>
      </sql_operations>
    </dsql_operation>
  </dsql_operations>
</dsql_query>

Antworten auf die Frage(2)

Ihre Antwort auf die Frage