«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как можно использовать SQL Server в качестве одновременной очереди для нескольких клиентов?

Как можно использовать SQL Server в качестве одновременной очереди для нескольких клиентов?

Опубликовано 23 декабря 2024 г.
Просматривать:480

How Can SQL Server Be Used as a Concurrent Queue for Multiple Clients?

Использование SQL Server в качестве параллельной очереди с несколькими клиентами

В сценарии, где таблица служит очередью, крайне важно настроить ее и выполнить запрос определенным образом что позволяет нескольким клиентам одновременно обрабатывать элементы очереди.

При использовании пессимистической блокировки строк с помощью 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.*;

Этот запрос атомарно выполняет следующие шаги:

  1. Использует подсказку With (READPAST) для пропуска любых заблокированных строк.
  2. Выбирает верхнюю часть строка с PROCESSED=0.
  3. Обновляет выбранную строку, чтобы пометить ее как обработанную (PROCESSED=1).
  4. Выводит обновленную строку, которую рабочий процесс может использовать для обработки.

Оптимизация кластерного индекса

Для дальнейшей оптимизации производительности крайне важно создать кластеризованный индекс для столбца PROCESSED. Это гарантирует, что данные сохраняются в порядке обработки.

CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);

Избегайте нестандартных запросов

Для оптимальной пропускной способности важно избегать запроса таблицы очередей с использованием методов, отличных от операции удаления из очереди, описанной выше. Попытка просмотреть или использовать таблицу для дополнительных целей может привести к взаимоблокировкам и снижению производительности.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3