MaintenanceSolution от Ola Hallengren с доработанной IndexOptimize под 8.3.22 и новее с коррекцией ALLOW_PAGE_LOCKS
База данных - Инструменты администратора БД
Использует недокументированные средства доступа к базе данных 1С. Прямое обращение к СУБД нарушает лицензионное соглашение,
может изменить поведение платформы, привести к разрушению базы данных, скомпрометировать данные,
а также привести к отказу в официальной поддержке Фирмы 1С.
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
При попытке вызвать
ALTER INDEX [index] ON [Table] REORGANIZE
ошибка "Невозможно реорганизовать индекс поскольку отключена блокировка на уровне страницы" или "The index __ on table __ cannot be reorganized because page level locking is disabled" возникает в основном из-за перехода на платформу 8.3.22 и новее.
Причина в том, что для борьбы с эскалацией блокировок платформа теперь устанавливает гранулярность блокировок на уровне строк. Это сделано для повышения стабильности нагруженных приложений. Раньше эскалация блокировки могла произойти при обращении разных сеансов приложения к разным данным СУБД, индексы которых располагались на одной странице, и это приводило к ошибкам. Описание изменений в документации к платформе 8.3.22: dl04.1c.ru/content/Platform/8_3_22_2501/1cv8upd_8_3_22_2501.htm#717b9b91-67e4-11ec-aa69-0050569f678a
Теперь проблема устранена, однако требуется адаптация процедур реогранизации индексов при обслуживании БД, так как пока ALLOW_PAGE_LOCKS = OFF, попытка реогранизации будет приводить к ошибке. Как обойти ошибку вручную описано на ИТС (ссылка ниже).
Перестала работать и реорганизация индексов автоматизированным скриптом IndexOptimize из MaintenanceSolution от Ola Hallengren. Мне удалось переписать этот скрипт так, чтобы вместо пропуска реорганизации при выключенном флаге ALLOW_PAGE_LOCKS, он выполнял REORGANIZE временно включая блокировку страниц для индекса. То есть скрипт теперь ведёт себя именно так, как советуют на ИТС https://its.1c.ru/db/metod8dev/content/5837/hdoc:
- До дефрагментации индекса необходимо включить страничные блокировки. Пример команды: 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);
Эта версия IndexOptimize обрабатывает индексы, у которых ALLOW_PAGE_LOCKS = OFF, временно им ставит ALLOW_PAGE_LOCKS = ON, а после обработки возвращает.
Вступайте в нашу телеграмм-группу Инфостарт