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

  • Михаил
  • 8 мин. на прочтение
  • 898
  • 25 Aug 2023
  • 25 Aug 2023

Начиная с платформы 1С 8.3.20.хххх, обратил внимание что не выполняется реиндексация баз данных относящихся к 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);

Пример

USE [baseName]
EXEC sp_MSforeachtable ‘ALTER INDEX ALL ON ? SET (ALLOW_PAGE_LOCKS = ON)’
EXEC sp_MSforeachtable ‘ALTER INDEX ALL ON ? SET (ALLOW_ROW_LOCKS= ON)’
GO

после реорганизации

USE [baseName]
EXEC sp_MSforeachtable ‘ALTER INDEX ALL ON ? SET (ALLOW_PAGE_LOCKS = OFF)’
EXEC sp_MSforeachtable ‘ALTER INDEX ALL ON ? SET (ALLOW_ROW_LOCKS= ON)’
GO

Должно работать

Комментарии 1

Владимир

а если на севре 30 баз, сколько планов создавать?

18 Oct 2023 в 19:37 UTC Ответить