Administrar cargas de trabajo en Azure Synapse Analytics.
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.
Seleccione el centro de Desarrollo.
En el menú Desarrollar, seleccione el botón + (1) y haga clic en la opción Script de SQL (2) en el menú contextual.
En el menú de la barra de herramientas, conéctese a la base de datos del grupo de SQL para ejecutar la consulta.
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 comoasa.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
Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.
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
yasa.sql.workload02
. Para ello, ejecutaremos una canalización de Azure Synapse que desencadene consultas.Seleccione el centro de integración.
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
yasa.sql.workload02
. Seleccione Agregar desencadenador (2) y, a continuación, Desencadenar ahora (3). En el cuadro de diálogo que aparece, seleccione Aceptar.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
Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.
Debería ver una salida similar a la siguiente:
Observe que el nivel de importancia de todas las consultas está establecido en normal.
Daremos prioridad a las consultas del usuario
asa.sql.workload01
mediante la implementación de la característicaasa.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 trabajolargerc
y establece el nivel de importancia de las consultas en alto.Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.
Vamos a desbordar el sistema con consultas de nuevo y ver lo que sucede esta vez en las consultas
asa.sql.workload01
yasa.sql.workload02
. Para ello, ejecutaremos una canalización de Azure Synapse que desencadene consultas. Seleccione la pestañaIntegrate
y ejecute la canalización Lab 08: Ejecutar consultas de analista de datos y director ejecutivo, que ejecutará o desencadenará las consultasasa.sql.workload01
yasa.sql.workload02
.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
Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.
Debería ver una salida similar a la siguiente:
Observe que las consultas ejecutadas por el usuario
asa.sql.workload01
tienen una importanciaasa.sql.workload01
.Seleccione el centro de supervisión.
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.
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.
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 valorMIN_PERCENTAGE_RESOURCE
establecido en el 50 % yREQUEST_MIN_RESOURCE_GRANT_PERCENT
en el 25 % garantiza una simultaneidad de 2.Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.
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 trabajoCEODreamDemo
.Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.
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
Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.
Seleccione el centro de integración.
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.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
Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.
Debería ver una salida similar a la siguiente, que muestra la importancia de cada sesión establecida en
below_normal
:Observe que los scripts en ejecución los ejecuta el usuario
asa.sql.workload02
asa.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 trabajoCEODreamDemo
funciona según lo previsto.Seleccione el centro de supervisión.
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.
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]
Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.
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ñaIntegrate
. Ejecute la canalización Laboratorio 08: Ejecución de consultas de analista de negocios, que ejecutará o desencadenará las consultasasa.sql.workload02
.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
Seleccione Ejecutar en el menú de la barra de herramientas para ejecutar el comando de SQL.
Transcurridos unos instantes (hasta un minuto), deberíamos ver varias ejecuciones simultáneas por parte del usuario
asa.sql.workload02
que se ejecuta con importanciaasa.sql.workload02
. Hemos validado que el grupo de cargas de trabajo y el clasificador de cargas de trabajo modificados funcionan según lo previsto.Seleccione el centro de supervisión.
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.