Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Блокировка при выполнении DBCC CHECKDB  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 635
Приветствую!
Анамнез:
Сегодня с утра была обнаружена на сервере блокировка в 4000 секунд на одной из таблиц.
select @@version Microsoft SQL Server 2005 - 9.00.5000.00 (X64)   Dec 10 2010 10:38:40   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2) 

Блокировка обнаружена с помощью программы SQL Blocks. Скриншот блокировки прилагаю.

В принципе это вся входящая информация.
Начал копать, выяснил:
1. Команда DBCC IVEIW CHECK является этапом команды DBCC CHECKDB, проверяет целостность индексированных вьюх в базе.
2. Ежедневно в это время запускается Maintaince Plan, который выполняет DBCC CHECKDB(N'DatabaseName') WITH NO_INFOMSGS.
3. В базе присутствует ровно одна вьюха WITH SCHEMABINDING, правда без индексов, использующая две таблицы. Выборка из таблиц происходит с уровнем изоляции READ COMMITED
4. На одной из этих таблиц есть полнотекстовый индекс, режим обновления которого Automatic.
5. Команда DBCC CHECKDB выполняет проверку на моментальном снимке данных, за исключением случаев, когда этот моментальный снимок создать не получается. В таких случаях она проверяет целостность на базе, используя блокировку таблиц (аналогично хинту WITH TABLOCK).

Мой диагноз:
1. На скриншоте видно, что блокировка типа LCK_M_SCH_M - блокировка схемы.
2. Там же видно, что все заблокированные объекты ссылаются на описанный мною полнотекстовый индекс.
3. Из первых двух пунктов следует картина - DBCC CHECKDB не смог создать моментальный снимок, и при выполнении команды DBCC IVEIW CHECK наложил блокировку схемы на индексированную вьюху, а соответственно и на таблицы в ней задействованные. Полнотекстовый поиск после вставки в таблицу попытался автоматически обновиться, нарвался на блокировку схемы и стал ждать. Через 4000 секунд дождался.

Вопросы:
1. Насколько точен мой диагноз?
2. Если диагноз точен, то поможет ли разрешить подобные проблемы в будущем удаление этой индексированной вьюхи (оказалось, что она не используется).
3. Где можно посмотреть, по какой причине команда DBCC CHECKDB не смогла создать моментальный снимок базы и вынуждена была свалиться на проверку живой базы?

К сообщению приложен файл. Размер - 143Kb
29 фев 12, 12:17    [12168826]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка при выполнении DBCC CHECKDB  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 635
up
29 фев 12, 14:23    [12170449]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка при выполнении DBCC CHECKDB  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Моментальный снимок создается, чтобы не накладывать блокировки на данные. Схема в MS SQL, в отличии от данных, не версионна, поэтому как не крути, без блокировок схемы не обойтись.

автор
На одной из этих таблиц есть полнотекстовый индекс, режим обновления которого Automatic.


Отключайте автоматическую популяцию на время выполнения DBCC и включайте после.
29 фев 12, 14:26    [12170499]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка при выполнении DBCC CHECKDB  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 635
pkarklin,

тогда возникает самый классический из вопросов: Но раньше же такого не было, почему сейчас стало так? :)
Почему блокировка схемы вдруг провисела столько времени?
А после выключения/включения автоматического обновления полнотекстового индекса он те данные, что попали в таблицу за время простоя включит автоматически в индекс?
29 фев 12, 15:36    [12171423]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка при выполнении DBCC CHECKDB  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Oblom
тогда возникает самый классический из вопросов: Но раньше же такого не было, почему сейчас стало так? :)
Почему блокировка схемы вдруг провисела столько времени?


Возможно, просто не замечали. Так долго, значит столько требовала операция.

Oblom
А после выключения/включения автоматического обновления полнотекстового индекса он те данные, что попали в таблицу за время простоя включит автоматически в индекс?


Посмотрите, что у Вас за джоб. Часом в дополнение к тому, что включена автоматическая популяция, еще какая-нибудь джобом не делается?
29 фев 12, 16:17    [12171773]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка при выполнении DBCC CHECKDB  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 635
pkarklin,

нет, больше полнотекстовый индекс никак не обновляется.
Удаление единственной индексированной вьюхи не помогло, опять DBCC IVIEW CHECK полчаса работала, блокируя таблицы.
Непонятно, что она так долго делает, если ни одного индексированного представления в базе нет...
2 мар 12, 09:38    [12181142]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить