En un escenario donde una tabla sirve como cola, es crucial configurarla y consultarla de una manera que permite que varios clientes procesen elementos de la cola simultáneamente.
Cuando se utiliza el bloqueo de filas pesimista con UPDLOCK y ROWLOCK, solo un trabajador puede adquirir el bloqueo y procesar un fila. Para resolver este problema y habilitar el procesamiento simultáneo, considere el siguiente enfoque:
Implementación de cola mediante la cláusula OUTPUT
La cláusula OUTPUT proporciona un mecanismo para recuperar y modificar atómicamente una fila . Aquí se explica cómo implementar una cola usando la cláusula OUTPUT:
with CTE as ( SELECT TOP(1) COMMAND, PROCESSED FROM TABLE WITH (READPAST) WHERE PROCESSED = 0) UPDATE CTE SET PROCESSED = 1 OUTPUT INSERTED.*;
Esta consulta realiza los siguientes pasos de forma atómica:
Optimización de índice agrupado
Para optimizar aún más el rendimiento, es fundamental crear un índice agrupado en la columna PROCESADO. Esto garantiza que los datos se almacenen en el orden de procesamiento.
CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);
Evitar consultas no estándar
Para un rendimiento óptimo, es esencial evitar consultar la tabla de cola utilizando métodos distintos a la operación de eliminación de cola descrita anteriormente. Intentar echar un vistazo o utilizar la tabla para fines adicionales puede provocar bloqueos y degradación del rendimiento.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3