Prueba de rendimiento simple en Azure SQL Data Warehouse

Estamos trabajando para portar aplicaciones existentes a Azure SQL Data Warehouse. Para comprender mejor las características / capacidades de gestión de rendimiento / carga de trabajo de Azure SQL Data Warehouse, he configurado lo que considero una prueba muy simple.

Cargué una tabla estática, el calendario de nuestro negocio, que contiene aproximadamente 20k filas (es decir, muy pequeña para un almacén de datos paralelo). Luego generé todas las consultas posibles de esa única tabla usando un patrón como:

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

Datos:

DWU establecido en 1000.35 hilos concurrentes lanzados.Todos los hilos que se ejecutan en small_rc. (Es decir, usando 1 espacio por consulta).Usando sqlcmd con conexión inicial y luego confirmando después de cada SELECTSe ejecuta en una máquina virtual que no es de Azure con conexión a través de la ruta Express. Elija la construcción externa SELECT COUNT () para garantizar que el tráfico de red sea mínimo.El uso de la tabla de montón proporcionó mejores resultados que el almacén de columnas predeterminado (como se esperaba). (Necesita realizar una prueba con índice agrupado).La tabla se distribuye por la columna de clave principal.

Antecedentes / Sesgos - He trabajado con muchas otras bases de datos MPP.

Resultados

Las consultas se ejecutan en 10-20 segundos, que es mucho más largo de lo que esperaría para un trabajo tan simple.Cuando envié cada hilo, dormí entre cada nuevo hilo. Las consultas iniciales se ejecutaron mucho más rápido, y los tiempos de ejecución promedio se deterioraron dramáticamente a medida que el número de subprocesos aumentó a 35.

¿Cómo entiendo qué cuello de botella existe?

Por supuesto, volveré a ejecutar las pruebas en otras configuraciones de DWU para ver si afecta una carga de trabajo exclusivamente small_rc.

Apéndice - Ejemplo de plan de consulta

<?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>

Respuestas a la pregunta(1)

Su respuesta a la pregunta