Не удалось выполнить запрос "" со следующей ошибкой: "Индекс" "(раздел 1) для таблицы" "не может быть реорганизован, поскольку блокировка на уровне страниц отключена."
План техобслуживания должен пытаться выполнить изменение указателя ALTER INDEX, которое является онлайн-операцией. Чтобы удалить фрагментацию (страницы не в порядке), страницы должны быть заблокированы и перемещены, что невозможно, если блокировки страниц были отключены. Единственный способ дефрагментировать без блокировок страницы - это заблокировать весь раздел, что невозможно для РЕОРГАНИЗАЦИИ, так как он только онлайн.
В чем разница между двумя схемами блокировки и каковы их реальные (в производстве) последствия?
Вам необходимо понять, что такое запись и страница, чтобы оценить влияние запрета на определенный тип блокировки. Если вы не знакомы с внутренними компонентами хранилища SQL Server, начните с Анатомии записи и Анатомии страницы . Проще говоря:
- строки = записи
- строки хранятся в страницах 8 КБ
Если вы хотите изменить разрешенные типы блокировки:
- Отключить блокировки страниц = только блокировки строк и таблиц
- Отключить блокировки строк = только блокировки страниц и таблиц
- Отключить оба = только блокировки таблицы
Мне известно о двух сценариях, в которых может быть полезно запретить тип блокировки. Это не значит, что других нет, надеюсь, кто-то еще вступит с примерами.
Часто используемая справочная таблица, которая меняется нечасто: отключив блокировки на уровне страниц и строк, все читатели получат общую блокировку таблицы. Это быстрее / дешевле, чем обычное общее намерение в таблице, за которым следует общее намерение на странице и, наконец, общая блокировка для определенной строки или строк.
Предотвращение определенного сценария взаимоблокировки - если вы столкнулись с взаимоблокировками, вызванными одновременными процессами, получающими блокировки, которые часто находятся на одной и той же странице, запрещение блокировок строк приводит к взятию блокировок страниц. Только один процесс может получить доступ к странице одновременно, другой должен ждать.
Первый пример - микрооптимизация, которая вряд ли принесет ощутимые преимущества в типичной системе. Вторая решит этот конкретный сценарий взаимоблокировки, но может привести к неожиданным побочным эффектам, например, к уничтожению параллелизма в другом разделе кода. Трудно оценить воздействие полностью, подходите с осторожностью!
По умолчанию оба включены, и это не должно быть изменено без уважительной причины.