Состояние состязания очереди процесса SQL Server

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

44
задан gbn 15 August 2010 в 19:07
поделиться

2 ответа

Изменить:

Я поискал в Google, чтобы проверить свой ответ: «Обработка очередей данных в SQL Server с помощью READPAST и UPDLOCK» . Прошли годы с тех пор, как я читал об этом решении и играл с ним.

Оригинал:

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

Итак, процесс 1 блокирует 20 строк, процесс 2 займет следующие 20, процесс 3 - строки с 41 по 60 и т. Д.

Обновление также можно записать так:

UPDATE TOP (20)
    foo
SET
    ProcessorID = @PROCID
FROM
    OrderTable foo WITH (ROWLOCK, READPAST, UPDLOCK)
WHERE
    ProcessorID = 0

Обновить, октябрь 2011 г.

Это можно сделать более элегантно с помощью предложения OUTPUT, если вам нужно выполнить SELECT и UPDATE за один раз.

56
ответ дан 26 November 2019 в 22:14
поделиться

Вы можете использовать Service Broker. Также вы можете использовать процедуру sp_getapplock для сериализации доступа к вашим строкам - это устранит условия гонки:

«Поддержка параллелизма путем создания ваших собственных блокировок (мьютексов в SQL)» http://sqlblogcasts.com/blogs/tonyrogerson/archive/2006/06/30/855.aspx

6
ответ дан 26 November 2019 в 22:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: