Вставить один ряд, заняв час - PullRequest
3 голосов
/ 25 марта 2011

В настоящее время я изучаю проблему с одной из наших баз данных SQL 2008, которая, как представляется, блокируется. Он будет работать в течение нескольких часов, а затем все наши приложения, использующие эту базу данных, перестанут работать. Это происходит уже около 2 недель, до этого не было никаких проблем. Ничего особенного не изменилось за это время, конечно, ничего, что должно было вызвать эту проблему.

У меня запущен SQL Profiler, чтобы попытаться выяснить, что происходит. Он показывает, что сотни запросов выполняются каждую секунду в течение дня без каких-либо проблем, а затем внезапно возникает 10-минутный промежуток, когда выполняется только несколько запросов. Осматривая это время, я обнаружил, что запрос вставки выполнялся чуть более часа. Один и тот же запрос (но разные данные) блокировался в базе данных несколько раз, когда все зависало.

Обычно, чтобы запустить его, нам нужно перезапустить службу сервера sql, что, очевидно, избавляет от любых блокировок и убивает любые запросы, и все происходит снова. Однако затем он снова останавливается, иногда в течение часа, а иногда несколько часов спустя.

Это простая вставка, которая в основном просто говорит: «вставьте в таблицу (x, y, z) выберите x, y, x из исходной таблицы». Когда я запускаю часть выбора оператора, которая занимала час, она не занимает времени (буквально она говорит 00:00:00), поэтому я не совсем понимаю, что происходит.

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

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

Заранее спасибо.

1 Ответ

4 голосов
/ 25 марта 2011

Сервер скажет вам, почему он ждет, если вы зададите ему правильные вопросы.Посмотрите на sys.dm_exec_requests и sys.dm_os_waiting_tasks для сессионного идентификатора сессии и посмотрите, что он ждет.Это может дать вам некоторое представление о том, что происходит.

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