Как исследовать Lock: Timeout - PullRequest
0 голосов
/ 23 ноября 2018

Я много гуглил, и не могу решить эту проблему.

Без выполнения другого запроса, только с профилировщиком SQL и моей собственной копией SQL Management Studio, подключенной к моему серверу.Я запускаю следующее:

delete_more:

DELETE  TOP (200) A
FROM    someTable
WHERE   parentId = 15

IF @@ROWCOUNT > 0 GOTO delete_more;

Запрос любезности Microsoft

При выполнении этого запроса я наблюдаю за профилировщиком SQL Microsoft.Я вижу тысячи сообщений, которые говорят:

Lock:Timeout    (51983df52b56)
Lock:Timeout    (d89e387017b0)
Lock:Timeout    (21d253e7f2bc)
Lock:Timeout    (c1e67d683600)
Lock:Timeout    (38aa16ffd30c)
Lock:Timeout    (008f2176bf79)

В таблице нет триггеров, и внешние ключи не ссылаются на эту таблицу.Столбец в предложении where индексируется.

Кажется, что он удаляет только 100 записей каждые 2-3 секунды.У меня есть около миллиона записей для удаления таким образом, это займет более 8 часов.

Моя машина не работает медленно, и базе данных выделено 8 ГБ ОЗУ.

Я не уверен, что это подсказка, но когда я запускаю профилировщик для базы данных, когда ни одно приложение или люди не выполняют запросы к ней, я постоянно вижу Lock: Acquired и Lock: Released (без запуска операторов SQL, RPC и SP).Это типично?

Я не администратор базы данных, хотя я гуглил.Я играл с:

exec sp_lock
exec sp_who2

... но на самом деле результат не имеет большого значения для меня.Я немного погуглил, чтобы узнать немного о каждом из них и о сценариях других людей, чтобы дать более значимый вывод, но в настоящее время мои знания по MSSQL не достаточно глубоки, чтобы сделать большую часть из этого разумной (я программист без БДпо персоналу).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...