0

В настоящее время мы запускаем базу данных на SQL Server 2000. База данных постоянно импортирует данные из плоских файлов для последующего запроса. Этот процесс выполняется с помощью ряда хранимых процедур SQL Server и вызывает BCP из этих процедур через xp_cmdshell. Сценарии используют BCP для чтения в плоских файлах в постоянные таблицы во вторичной базе данных на том же сервере. Затем скрипты вытаскивают данные из таблиц базы данных импорта и помещают их в реальную базу данных, которая нормализуется и используется для запросов.SQL Server 2000 Truncate Deadlock

Обычно этот процесс импорта занимает 5-10 минут в зависимости от размера файлов. Однако на прошлой неделе он занимал 50-60 минут. Мы пробовали пройти процедуру. Мы заметили, что как только мы создаем временную таблицу, мы не можем запросить tempdb из другого окна запроса. Но что еще более важно, когда можно пройти через штраф, пока мы не обрезаем первую таблицу импорта. Мы разрешаем выполнить усечение, а затем, когда мы проверяем блокировки в базе данных с помощью sp_lock, мы видим, что блокировки, выполняемые truncate, не освобождаются. Затем мы разрешаем позвонить xp_cmdshell на номер BCP, чтобы выполнить его, и он будет сидеть там. Мы смотрим на CPU и I/O и не видим существенной активности, когда процедура задерживается при вызове BCP. Также, когда мы пытаемся это сделать, другие известные запросы не выполняются. Обратите внимание, что сам файл невелик; не более 20 строк.

Если мы запустим bcp команды с xp_cmdshell из отдельного запроса он будет работать нормально, но запирать, если мы выполнили усечь строку, но не все же BCP строки в хранимой процедуре.

Итак, у нас есть вопросы, почему сервер попадает в это состояние взаимоблокировки и, что менее важно, почему блокировки, сделанные путем усечения, не будут выпущены?

ответ

0

Замки на SQL Server хранятся только в случае активной транзакции. Вы должны совершить транзакцию перед вызовом внешней BCP. В противном случае вы столкнетесь с этим тупиком.

Кстати, этот тупик не может быть обнаружен SQL Server, поэтому, если это произойдет, вы застрянете в нем навсегда.

 Смежные вопросы

  • Нет связанных вопросов^_^