Наше программное обеспечение ERP использует базу данных SQL Server 2000. Когда мы запускаем определенную задачу в программном обеспечении, которая раньше занимала несколько секунд, происходит задержка в 300 секунд, и SQL Server возвращает ошибку «Тайм-аут блокировки. Тайм-аут соединения с SQL Server».
Я попытался определить проблему с помощью SQL Server Profiler, и я увидел там некоторые ОТКАТЫ, но у меня не было никаких выводов.
Есть ли лучший способ определить, какой запрос блокирует какой ресурс и какие тайм-ауты запроса?
Вы можете запросить таблицы master.dbo.sysprocesses и master.dbo.syslocks, чтобы узнать, что на самом деле выполняется в системе и какие блокировки они принимают. Это вместе с sp_who2 может помочь вам выяснить, что блокирует записи или какие блоки происходят.
Выполняете ли вы какое-либо регулярное обслуживание базы данных в базе данных SQL? В противном случае отсутствие технического обслуживания может привести к разного рода проблемам с производительностью.
В анализаторе запросов запустите:
sp_who2
Посмотрите на столбец BlkBy, который показывает, каким spid блокируется
затем запустите:
DBCC INPUTBUFFER(spid)
где spid - это фактическое число, например 51, чтобы узнать, какой был последний оператор блокирующего spid.
Чтобы основываться на том, что написали Ник и Денни, поместите эти запросы в задание агента SQL, выполняющееся с любым интервалом, который лучше всего подходит для вашей ситуации. Сохраните вывод в файл .txt для дальнейшего использования. Похоже, это не должно длиться так долго, чтобы вы могли найти источник проблемы.