Ошибка реорганизация индексов базы данных MS SQL «Невозможно реорганизовать индекс» на базах 1С Предприятие.

После обновления платформы 8.3.20.1674, обратил внимание что не выполняется реиндексация баз данных относящихся к 1С, в логах значится ошибка — «Невозможно реорганизовать индекс «_Acc48_1» в таблице «_Acc48″, поскольку отключена блокировка на уровне страницы.»

Как оказалось что начиная с версии платформы 8.3.22 необходимо выполнять дефрагментацию индексов по следующему алгоритму:

  • До дефрагментации индекса необходимо включить страничные блокировки. Пример команды: ALTER INDEX index_name ON table_name SET (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON);
  • Выполнить дефрагментацию.
  • Обратно выключить страничные блокировки. Пример команды: ALTER INDEX index_name ON table_name SET (ALLOW_PAGE_LOCKS = OFF, ALLOW_ROW_LOCKS = ON);

Исходя из этого пришлось написать скрипт выполняющий умную реорганизацию индексов базы данных с принудительным включением блокировки индекса на уровне страницы и её отключение, если блокировка была изначально выключена.

Скрипт работает по следующему принципу:

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

Скачать “1s_reorgonize_index_mssql.sql” 1s_reorgonize_index_mssql.sql – Загружено 20 раз – 2 KB

 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА

Оставьте комментарий

два × 2 =