Administrar cargas de trabajo en Azure Synapse Analytics.

Completado

Azure Synapse Analytics le permite crear, controlar y administrar la disponibilidad de recursos cuando las cargas de trabajo se ejecutan en paralelo. Esto le permite administrar la importancia relativa de cada carga de trabajo mientras espera a los recursos disponibles.

Para proporcionar tiempos de carga más rápidos, puede crear un clasificador de cargas de trabajo para el usuario de carga con la "importancia" establecida en above_normal o alta. La importancia de la carga de trabajo garantiza que la carga tiene prioridad sobre otras tareas en espera con una clasificación de importancia inferior. Úselo junto con sus propias definiciones de grupos de cargas de trabajo para el aislamiento de la carga de trabajo con el fin de administrar las asignaciones de recursos mínimas y máximas durante los períodos de máxima actividad y de menor actividad.

La administración de cargas de trabajo de los grupos de SQL dedicados en Azure Synapse consiste en tres conceptos de alto nivel:

  • Clasificación de la carga de trabajo
  • Importancia de la carga de trabajo
  • Aislamiento de la carga de trabajo

Estas funcionalidades proporcionan más control sobre cómo la carga de trabajo usa los recursos del sistema.

Clasificación de la carga de trabajo

La clasificación de la administración de cargas de trabajo permite aplicar directivas de carga de trabajo a las solicitudes al asignar clases de recursos e importancia.

Aunque hay muchas maneras de clasificar las cargas de trabajo de almacenamiento de datos, la clasificación más sencilla y común es la carga y la consulta. Los datos se cargan con instrucciones insert, update y delete. Los datos se consultan mediante instrucciones select. Una solución de almacenamiento de datos a menudo tendrá una directiva de carga de trabajo para la actividad de carga, como la asignación de una clase de recursos superior con más recursos. Se podría aplicar una directiva de carga de trabajo diferente a las consultas, como la importancia menor en comparación con las actividades de carga.

También puede subclasificar las cargas de trabajo de carga y consulta. La subclasificación ofrece un mayor control de las cargas de trabajo. Por ejemplo, las cargas de trabajo de consulta pueden constar de actualizaciones de cubos, consultas del panel o consultas ad hoc. Puede clasificar cada una de estas cargas de trabajo de consulta con diferentes clases de recursos o configuración de importancia. La carga también puede beneficiarse de la subclasificación. Transformaciones de gran tamaño se pueden asignar a clases de recursos más grandes. Se puede usar una importancia mayor para asegurarse de que los datos de ventas clave se carguen antes que los datos meteorológicos o una fuente de distribución de datos sociales.

No todas las instrucciones se clasifican, ya que no requieren recursos ni necesitan importancia para influir en la ejecución. Los comandos DBCC y las instrucciones BEGIN, COMMIT y ROLLBACK TRANSACTION no se clasifican.

Importancia de la carga de trabajo

La importancia de la carga de trabajo influye en el orden en el que una solicitud obtiene acceso a los recursos. En un sistema ocupado, una solicitud con mayor importancia tiene el primer acceso a los recursos. La importancia también puede garantizar el acceso ordenado a los bloqueos. Hay cinco niveles de importancia: low (baja), below_normal (por debajo de la normal), normal, above_normal (por encima de la normal) y high (alta). A las solicitudes donde no se establece ninguna importancia se les asigna el nivel predeterminado normal. Las solicitudes que tienen el mismo nivel de importancia tienen el mismo comportamiento de programación que existe actualmente.

Aislamiento de cargas de trabajo

El aislamiento de la carga de trabajo reserva recursos para un grupo de cargas de trabajo. Los recursos reservados de un grupo de cargas de trabajo se conservan exclusivamente para ese grupo de cargas de trabajo a fin de garantizar la ejecución. Los grupos de cargas de trabajo también permiten definir la cantidad de recursos que se asignan por solicitud, de manera muy similar a las clases de recursos. Los grupos de cargas de trabajo ofrecen la posibilidad de reservar o limitar la cantidad de recursos que puede consumir un conjunto de solicitudes. Por último, los grupos de cargas de trabajo son un mecanismo para aplicar reglas, como el tiempo de expiración de las consultas, a las solicitudes.

Puede realizar los pasos siguientes para implementar la administración de cargas de trabajo.

Creación de un clasificador de cargas de trabajo para agregar importancia a determinadas consultas

Su organización le ha preguntado si hay una manera de marcar las consultas ejecutadas por el director ejecutivo como más importantes que otras, para que no se ejecuten lentamente debido a la carga de datos intensa o a otras cargas de trabajo de la cola. Decide crear un clasificador de cargas de trabajo y agregar la importancia para priorizar las consultas del director ejecutivo.

  1. Seleccione el centro de Desarrollo.

    El centro de desarrollo está resaltado.

  2. En el menú Desarrollar, seleccione el botón + (1) y haga clic en la opción Script de SQL (2) en el menú contextual.

    El elemento de menú contextual del script de SQL está resaltado.

  3. En el menú de la barra de herramientas, conéctese a la base de datos del grupo de SQL para ejecutar la consulta.

    La opción de conexión está resaltada en la barra de herramientas de consulta.

  4. En la ventana de consulta, reemplace el script por lo siguiente para confirmar que no hay ninguna consulta en ejecución por parte de los usuarios que han iniciado sesión como asa.sql.workload01, que representa el director ejecutivo de la organización, o como asa.sql.workload02, que representa el analista de datos que trabaja en el proyecto:

    --First, let's confirm that there are no queries currently being run by users logged in workload01 or workload02
    
    SELECT s.login_name, r.[Status], r.Importance, submit_time, 
    start_time ,s.session_id FROM sys.dm_pdw_exec_sessions s 
    JOIN sys.dm_pdw_exec_requests r ON s.session_id = r.session_id
    WHERE s.login_name IN ('asa.sql.workload01','asa.sql.workload02') and Importance
    is not NULL AND r.[status] in ('Running','Suspended') 
    --and submit_time>dateadd(minute,-2,getdate())
    ORDER BY submit_time ,s.login_name
    
  5. Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.

    El botón Ejecutar está resaltado en la barra de herramientas de consulta.

    Ahora que hemos confirmado que no hay ninguna consulta en ejecución, se debe desbordar el sistema con consultas y ver lo que ocurre en asa.sql.workload01 y asa.sql.workload02. Para ello, ejecutaremos una canalización de Azure Synapse que desencadene consultas.

  6. Seleccione el centro de integración.

    El centro de integración está resaltado.

  7. Seleccione la canalización Lab 08: Ejecutar consultas de analista de datos y director ejecutivo (1), que ejecutará o desencadenará las consultas asa.sql.workload01 y asa.sql.workload02. Seleccione Agregar desencadenador (2) y, a continuación, Desencadenar ahora (3). En el cuadro de diálogo que aparece, seleccione Aceptar.

    Los elementos de menú Agregar desencadenador y Desencadenar ahora.

  8. Veamos qué ha ocurrido con todas las consultas que se acaban de desencadenar a medida que desbordan el sistema. En la ventana de la consulta, reemplace el script por la información siguiente:

    SELECT s.login_name, r.[Status], r.Importance, submit_time, start_time ,s.session_id FROM sys.dm_pdw_exec_sessions s 
    JOIN sys.dm_pdw_exec_requests r ON s.session_id = r.session_id
    WHERE s.login_name IN ('asa.sql.workload01','asa.sql.workload02') and Importance
    is not NULL AND r.[status] in ('Running','Suspended') and submit_time>dateadd(minute,-2,getdate())
    ORDER BY submit_time ,status
    
  9. Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.

    El botón Ejecutar está resaltado de nuevo en la barra de herramientas de consulta.

    Debería ver una salida similar a la siguiente:

    Visualización de los resultados de una consulta SQL.

    Observe que el nivel de importancia de todas las consultas está establecido en normal.

  10. Daremos prioridad a las consultas del usuario asa.sql.workload01 mediante la implementación de la característica asa.sql.workload01. En la ventana de la consulta, reemplace el script por la información siguiente:

    IF EXISTS (SELECT * FROM sys.workload_management_workload_classifiers WHERE name = 'CEO')
    BEGIN
        DROP WORKLOAD CLASSIFIER CEO;
    END
    CREATE WORKLOAD CLASSIFIER CEO
      WITH (WORKLOAD_GROUP = 'largerc'
      ,MEMBERNAME = 'asa.sql.workload01',IMPORTANCE = High);
    

    Estamos ejecutando este script para crear un nuevo clasificador de cargas de trabajo denominado CEO que usa el grupo de cargas de trabajo largerc y establece el nivel de importancia de las consultas en alto.

  11. Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.

    El botón Ejecutar está resaltado en la barra de herramientas de consulta de nuevo.

  12. Vamos a desbordar el sistema con consultas de nuevo y ver lo que sucede esta vez en las consultas asa.sql.workload01 y asa.sql.workload02. Para ello, ejecutaremos una canalización de Azure Synapse que desencadene consultas. Seleccione la pestaña Integrate y ejecute la canalización Lab 08: Ejecutar consultas de analista de datos y director ejecutivo, que ejecutará o desencadenará las consultas asa.sql.workload01 y asa.sql.workload02.

  13. En la ventana de consulta, reemplace el script por lo siguiente para ver lo que ocurre en las consultas asa.sql.workload01 esta vez:

    SELECT s.login_name, r.[Status], r.Importance, submit_time, start_time ,s.session_id FROM sys.dm_pdw_exec_sessions s 
    JOIN sys.dm_pdw_exec_requests r ON s.session_id = r.session_id
    WHERE s.login_name IN ('asa.sql.workload01','asa.sql.workload02') and Importance
    is not NULL AND r.[status] in ('Running','Suspended') and submit_time>dateadd(minute,-2,getdate())
    ORDER BY submit_time ,status desc
    
  14. Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.

    El botón Ejecutar está resaltado de nuevo.

    Debería ver una salida similar a la siguiente:

    Resultados de la consulta SQL

    Observe que las consultas ejecutadas por el usuario asa.sql.workload01 tienen una importancia asa.sql.workload01.

  15. Seleccione el centro de supervisión.

    El centro de supervisión está resaltado.

  16. Seleccione Ejecuciones de canalización (1) y, a continuación, seleccione Cancelar recursivos (2) para cada una de las canalizaciones de Lab 08 en ejecución, marcadas como En curso (3). Esto le ayudará a acelerar las tareas restantes.

    Se muestra la opción Cancelar recursivos.

Reserva de recursos para cargas de trabajo específicas mediante el aislamiento de la carga de trabajo

El aislamiento de la carga de trabajo significa que los recursos se reservan, de forma exclusiva, para un grupo de cargas de trabajo. Los grupos de cargas de trabajo son contenedores para un conjunto de solicitudes y son la base de la configuración de la administración de cargas de trabajo en un sistema, incluido el aislamiento de la carga de trabajo. Una configuración sencilla de administración de cargas de trabajo puede administrar cargas de datos y consultas de usuario.

En ausencia del aislamiento de la carga de trabajo, las solicitudes operan en el grupo compartido de recursos. El acceso a los recursos del grupo compartido no está garantizado y se asigna en función de la importancia.

Debido a los requisitos de carga de trabajo proporcionados por Tailwind Traders, decide crear un nuevo grupo de cargas de trabajo llamado CEODemo para reservar recursos para las consultas ejecutadas por el director ejecutivo.

Comencemos por experimentar con distintos parámetros.

  1. En la ventana de la consulta, reemplace el script por la información siguiente:

    IF NOT EXISTS (SELECT * FROM sys.workload_management_workload_groups where name = 'CEODemo')
    BEGIN
        Create WORKLOAD GROUP CEODemo WITH  
        ( MIN_PERCENTAGE_RESOURCE = 50        -- integer value
        ,REQUEST_MIN_RESOURCE_GRANT_PERCENT = 25 --  
        ,CAP_PERCENTAGE_RESOURCE = 100
        )
    END
    

    El script crea un grupo de cargas de trabajo llamado CEODemo para reservar recursos exclusivamente para el grupo de cargas de trabajo. En este ejemplo, un grupo de cargas de trabajo con el valor MIN_PERCENTAGE_RESOURCE establecido en el 50 % y REQUEST_MIN_RESOURCE_GRANT_PERCENT en el 25 % garantiza una simultaneidad de 2.

  2. Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.

    El botón Ejecutar está resaltado.

  3. En la ventana de consulta, reemplace el script por lo siguiente para crear un clasificador de cargas de trabajo llamado CEODreamDemo que asigne el grupo de carga de trabajo y la importancia a las solicitudes entrantes:

    IF NOT EXISTS (SELECT * FROM sys.workload_management_workload_classifiers where  name = 'CEODreamDemo')
    BEGIN
        Create Workload Classifier CEODreamDemo with
        ( Workload_Group ='CEODemo',MemberName='asa.sql.workload02',IMPORTANCE = BELOW_NORMAL);
    END
    

    Este script establece la importancia en BELOW_NORMAL para el usuario asa.sql.workload02 mediante el nuevo clasificador de cargas de trabajo CEODreamDemo.

  4. Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.

    Botón Ejecutar.

  5. En la ventana de consulta, reemplace el script por lo siguiente para confirmar que no hay ninguna consulta activa en ejecución por asa.sql.workload02 (las consultas suspendidas son correctas):

    SELECT s.login_name, r.[Status], r.Importance, submit_time,
    start_time ,s.session_id FROM sys.dm_pdw_exec_sessions s
    JOIN sys.dm_pdw_exec_requests r ON s.session_id = r.session_id
    WHERE s.login_name IN ('asa.sql.workload02') and Importance
    is not NULL AND r.[status] in ('Running','Suspended')
    ORDER BY submit_time, status
    
  6. Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.

    De nuevo el botón Ejecutar.

  7. Seleccione el centro de integración.

    El centro de integración se resalta de nuevo.

  8. Seleccione la canalización Laboratorio 08: Ejecución de consultas del analista de negocios (1), que ejecutará o desencadenará las consultas asa.sql.workload02. Seleccione Agregar desencadenador (2) y, a continuación, Desencadenar ahora (3). En el cuadro de diálogo que aparece, seleccione Aceptar.

    Se resaltan los elementos de menú Agregar desencadenador y Desencadenar ahora.

  9. En la ventana de consulta, reemplace el script por lo siguiente para ver lo que ha ocurrido en todas las consultas asa.sql.workload02 que se acaban de desencadenar mientras desbordan el sistema:

    SELECT s.login_name, r.[Status], r.Importance, submit_time,
    start_time ,s.session_id FROM sys.dm_pdw_exec_sessions s
    JOIN sys.dm_pdw_exec_requests r ON s.session_id = r.session_id
    WHERE s.login_name IN ('asa.sql.workload02') and Importance
    is not NULL AND r.[status] in ('Running','Suspended')
    ORDER BY submit_time, status
    
  10. Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.

    El botón Ejecutar está seleccionado en la barra de herramientas de consulta.

    Debería ver una salida similar a la siguiente, que muestra la importancia de cada sesión establecida en below_normal:

    Los resultados del script muestran que cada sesión se ejecutó con una importancia inferior a la normal.

    Observe que los scripts en ejecución los ejecuta el usuario asa.sql.workload02asa.sql.workload02 con un nivel de importancia BELOW_NORMAL (2). Hemos configurado correctamente las consultas del analista de negocios para que se ejecuten con una importancia menor a las consultas del director ejecutivo. También podemos ver que el clasificador de cargas de trabajo CEODreamDemo funciona según lo previsto.

  11. Seleccione el centro de supervisión.

    El centro de supervisión.

  12. Seleccione Ejecuciones de canalización (1) y, a continuación, seleccione Cancelar recursivos (2) para cada una de las canalizaciones de Lab 08 en ejecución, marcadas como En curso (3). Esto le ayudará a acelerar las tareas restantes.

    Se muestra la opción Cancelar recursivos en la captura de pantalla 2.

  13. Vuelva a la ventana de consulta en el centro de desarrollo. En la ventana de consulta, reemplace el script por lo siguiente para establecer el 3,25 % de los recursos mínimos por solicitud:

    IF  EXISTS (SELECT * FROM sys.workload_management_workload_classifiers where group_name = 'CEODemo')
    BEGIN
        Drop Workload Classifier CEODreamDemo
        DROP WORKLOAD GROUP CEODemo
        --- Creates a workload group 'CEODemo'.
            Create  WORKLOAD GROUP CEODemo WITH  
        (MIN_PERCENTAGE_RESOURCE = 26 -- integer value
            ,REQUEST_MIN_RESOURCE_GRANT_PERCENT = 3.25 -- factor of 26 (guaranteed more than 4 concurrencies)
        ,CAP_PERCENTAGE_RESOURCE = 100
        )
        --- Creates a workload Classifier 'CEODreamDemo'.
        Create Workload Classifier CEODreamDemo with
        (Workload_Group ='CEODemo',MemberName='asa.sql.workload02',IMPORTANCE = BELOW_NORMAL);
    END
    

    Nota:

    La configuración de la contención de cargas de trabajo define implícitamente un nivel de simultaneidad máximo. Con un valor CAP_PERCENTAGE_RESOURCE establecido en 60 % y REQUEST_MIN_RESOURCE_GRANT_PERCENT establecido en 1 %, se permite un nivel de simultaneidad máximo de 60 para el grupo de cargas de trabajo. Tenga en cuenta el método que se incluye a continuación para determinar la simultaneidad máxima: [Max Concurrency] = [CAP_PERCENTAGE_RESOURCE] / [REQUEST_MIN_RESOURCE_GRANT_PERCENT]

  14. Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.

    El botón Ejecutar está seleccionado de nuevo en la barra de herramientas de consulta.

  15. Vamos a desbordar el sistema y ver lo que sucede con asa.sql.workload02. Para ello, ejecutaremos una canalización de Azure Synapse que desencadene consultas. Seleccione la pestaña Integrate. Ejecute la canalización Laboratorio 08: Ejecución de consultas de analista de negocios, que ejecutará o desencadenará las consultas asa.sql.workload02.

  16. En la ventana de consulta, reemplace el script por lo siguiente para ver lo que ha ocurrido en todas las consultas asa.sql.workload02 que se acaban de desencadenar mientras desbordan el sistema:

    SELECT s.login_name, r.[Status], r.Importance, submit_time,
    start_time ,s.session_id FROM sys.dm_pdw_exec_sessions s
    JOIN sys.dm_pdw_exec_requests r ON s.session_id = r.session_id
    WHERE s.login_name IN ('asa.sql.workload02') and Importance
    is  not NULL AND r.[status] in ('Running','Suspended')
    ORDER BY submit_time, status
    
  17. Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.

    El botón Ejecutar está resaltado en la barra de herramientas de consulta.

    Transcurridos unos instantes (hasta un minuto), deberíamos ver varias ejecuciones simultáneas por parte del usuario asa.sql.workload02 que se ejecuta con importancia asa.sql.workload02. Hemos validado que el grupo de cargas de trabajo y el clasificador de cargas de trabajo modificados funcionan según lo previsto.

    Los resultados del script muestran que cada sesión se ejecutó con una importancia inferior a la normal.

  18. Seleccione el centro de supervisión.

    El centro de supervisión está resaltado.

  19. Seleccione Ejecuciones de canalización (1) y, a continuación, seleccione Cancelar recursivos (2) para cada una de las canalizaciones de Lab 08 en ejecución, marcadas como En curso (3). Esto le ayudará a acelerar las tareas restantes.

    Se muestra la opción Cancelar recursivos en la captura de pantalla 3.