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

Откуда:
Сообщений: 118
Добрый день,

Microsoft SQL Server 2016 (SP1) Standard Edition.

недавно возникла проблема: при reorganize дефрагментации индекса таблицы [a] блокируются вставки в таблицу [b].
(таблицы связаны: [b] имеет внешний ключ к [a]; размер таблицы [a] 280GB/380M rows)

reorganize, не rebuild.
до этого я полагал, что reorganize ничего не блокирует.

как временное решение, параллельно с дефрагментацией запустил скрипт,
который ежесекундно проверяет, не блокирует ли дефрагментация другой процесс,
(и убивает блокирующий процесс если [wait_time] > 25 sec).
	SELECT  *
	FROM sys.dm_exec_requests
	WHERE blocking_session_id = @defrag_proc_session_id 

обнаружилось, что да, блокирует:
wait_type = LCK_M_SCH_M
wait_resource = METADATA: database_id = 16 STATS(object_id = 933578364, stats_id = 4), lockPartitionId = 0

object_id = 933578364, stats_id = 4 нашлись в таблице sys.stats. это собственно дефрагментируемый индекс.

не сталкивался ли кто-нибудь с подобной проблемой?
как вернуть нормальное поведение, чтобы reorganize ничего не блокировал?
(rebuild применить невозможно, потому что online=on не работает в Standard Edition).
спасибо.
17 май 18, 13:43    [21416908]     Ответить | Цитировать Сообщить модератору
 Re: REORGANIZE индекса блокирует inserts?  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Глупый вопрос. Зачем Вам вообще делать reorganize индекса? Что вы хотите этим достичь?
17 май 18, 13:46    [21416923]     Ответить | Цитировать Сообщить модератору
 Re: REORGANIZE индекса блокирует inserts?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36965
Разрешить асинхронный апдейт статистики на базе?
17 май 18, 13:47    [21416930]     Ответить | Цитировать Сообщить модератору
 Re: REORGANIZE индекса блокирует inserts?  [new]
valv
Member

Откуда:
Сообщений: 118
Гавриленко Сергей Алексеевич
Разрешить асинхронный апдейт статистики на базе?

на данный момент установки БД такие:
auto create incremental statistics = false
auto create statistics = true
auto update statistics = true
auto update statistics asynchronously = true
поможет ли, если и "auto create incremental statistics" = true?

не могли бы вы объяснить, или кинуть ссылку на документацию, в чём связь блокировок и апдейта статистики?
спасибо
17 май 18, 13:56    [21416978]     Ответить | Цитировать Сообщить модератору
 Re: REORGANIZE индекса блокирует inserts?  [new]
invm
Member

Откуда: Москва
Сообщений: 9343
valv
как вернуть нормальное поведение, чтобы reorganize ничего не блокировал?
Как по-вашему можно модифицировать страницы данных/индекса не накладывая блокировок?
17 май 18, 14:03    [21417010]     Ответить | Цитировать Сообщить модератору
 Re: REORGANIZE индекса блокирует inserts?  [new]
.Евгений
Member

Откуда:
Сообщений: 514
valv,
Я правильно понял, что вы хотите, чтобы работа с объектом не блокировала определение объекта в схеме?
17 май 18, 14:05    [21417025]     Ответить | Цитировать Сообщить модератору
 Re: REORGANIZE индекса блокирует inserts?  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
AlanDenton
Глупый вопрос

Ладно :) нет желания отвечать, то скажу сам. Смысла в реорганайзе не вижу на большой таблице. Хотите чтобы быстрее отрабатывало - секционирование + реорганайз (либо ребилд) по секциям. Да блокировки будут, но работать будет быстрее. Плюс: от реорганайза инфы в лог пишеться больше, чем при ребилде
17 май 18, 14:05    [21417026]     Ответить | Цитировать Сообщить модератору
 Re: REORGANIZE индекса блокирует inserts?  [new]
valv
Member

Откуда:
Сообщений: 118
invm
valv
как вернуть нормальное поведение, чтобы reorganize ничего не блокировал?
Как по-вашему можно модифицировать страницы данных/индекса не накладывая блокировок?

проблема не в краткосрочных блокировках на несколько милисекунд, которые естественно возникают при перемещениее страниц.
проблема в длительных блокировках, которые превышают timeout выделенный для операции вставки.
в нашем случае, это 30 секунд.
17 май 18, 14:08    [21417045]     Ответить | Цитировать Сообщить модератору
 Re: REORGANIZE индекса блокирует inserts?  [new]
valv
Member

Откуда:
Сообщений: 118
.Евгений
valv,
Я правильно понял, что вы хотите, чтобы работа с объектом не блокировала определение объекта в схеме?

если вы имеету ввиду schema stability lock, то нет, это не мешает.
проблема в длительных блокировках, которые возникают из-за reorganize индекса.
17 май 18, 14:13    [21417070]     Ответить | Цитировать Сообщить модератору
 Re: REORGANIZE индекса блокирует inserts?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
valv
invm
пропущено...
Как по-вашему можно модифицировать страницы данных/индекса не накладывая блокировок?

проблема не в краткосрочных блокировках на несколько милисекунд, которые естественно возникают при перемещениее страниц.
проблема в длительных блокировках, которые превышают timeout выделенный для операции вставки.
в нашем случае, это 30 секунд.
набор слов
17 май 18, 14:13    [21417073]     Ответить | Цитировать Сообщить модератору
 Re: REORGANIZE индекса блокирует inserts?  [new]
0wl
Member

Откуда:
Сообщений: 54
valv
	SELECT  *
	FROM sys.dm_exec_requests
	WHERE blocking_session_id = @defrag_proc_session_id 



Сдается мне, @defrag_proc_session_id сам кого-то ждет. И если это так, тут не спасет ни реорганайз, ни онлайн-ребилд (если бы даже можно было), ни асинхронный пересчет статистик. Просто надо стараться не запускать долгих запросов одновременно с обслуживанием.
17 май 18, 15:34    [21417513]     Ответить | Цитировать Сообщить модератору
 Re: REORGANIZE индекса блокирует inserts?  [new]
valv
Member

Откуда:
Сообщений: 118
0wl
valv
	SELECT  *
	FROM sys.dm_exec_requests
	WHERE blocking_session_id = @defrag_proc_session_id 




Сдается мне, @defrag_proc_session_id сам кого-то ждет. И если это так, тут не спасет ни реорганайз, ни онлайн-ребилд (если бы даже можно было), ни асинхронный пересчет статистик.
спасибо за идею, я добавил логирование всех блокированных и блокирующих процессов.

0wl
Просто надо стараться не запускать долгих запросов одновременно с обслуживанием.
к сожалению, 24/7, без возможности остановки.
17 май 18, 18:19    [21418214]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить