В сценарии, где таблица служит очередью, крайне важно настроить ее и выполнить запрос определенным образом что позволяет нескольким клиентам одновременно обрабатывать элементы очереди.
При использовании пессимистической блокировки строк с помощью UPDLOCK и ROWLOCK только один работник может получить блокировку и обработать строку. Чтобы решить эту проблему и включить параллельную обработку, рассмотрите следующий подход:
Реализация очереди с использованием предложения OUTPUT
Предложение OUTPUT предоставляет механизм атомарного извлечения и изменения строки. . Вот как реализовать очередь с помощью предложения OUTPUT:
with CTE as ( SELECT TOP(1) COMMAND, PROCESSED FROM TABLE WITH (READPAST) WHERE PROCESSED = 0) UPDATE CTE SET PROCESSED = 1 OUTPUT INSERTED.*;
Этот запрос атомарно выполняет следующие шаги:
Оптимизация кластерного индекса
Для дальнейшей оптимизации производительности крайне важно создать кластеризованный индекс для столбца PROCESSED. Это гарантирует, что данные сохраняются в порядке обработки.
CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);
Избегайте нестандартных запросов
Для оптимальной пропускной способности важно избегать запроса таблицы очередей с использованием методов, отличных от операции удаления из очереди, описанной выше. Попытка просмотреть или использовать таблицу для дополнительных целей может привести к взаимоблокировкам и снижению производительности.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3