Разница между уровнем строки и блокировкой уровня страницы и последствиями

При попытке запустить мой план обслуживания я получаю следующую ошибку:

  

Выполнение запроса "" не выполнено со следующей ошибкой: "   индекс "" (раздел 1) на таблице "" не может быть реорганизован   потому что блокировка уровня страницы отключена. "

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

Мой вопрос: В чем разница между двумя схемами блокировки и каковы их реальные (в производстве) последствия?

10 голосов | спросил Onion-Knight 4 +04002011-10-04T22:53:27+04:00312011bEurope/MoscowTue, 04 Oct 2011 22:53:27 +0400 2011, 22:53:27

2 ответа


14
  

Выполнение запроса "" завершилось ошибкой со следующей ошибкой: "Индекс" "   (раздел 1) в таблице "" невозможно реорганизовать, поскольку уровень страницы   блокировка отключена. "

В плане технического обслуживания должна быть предпринята попытка ALTER INDEX REORGANIZE, которая является онлайн-операцией. Чтобы удалить фрагментацию (страницы не в порядке), страницы должны быть заблокированы и перемещены, что невозможно, если блокировки страниц отключены. Единственный способ дефрагментации без блокировок страниц - заблокировать весь раздел, что невозможно для REORGANIZE только в Интернете.

  

В чем разница между двумя схемами блокировки и   их реальных (в производстве) последствий?

Вам нужно понять, что запись и страница должны оценить влияние отказа от определенного типа блокировки. Если вы не знакомы с внутренними компонентами хранилища SQL Server, начните с Анатомия записи и Анатомия страницы . Очень просто:

  • rows = records
  • строки хранятся на страницах 8kb

Если вы должны были изменить разрешенные типы блокировки:

  • Отключить блокировки страниц = только блокировки строк и таблиц
  • Отключить блокировки строк = только блокировки страниц и таблиц
  • Отключить оба = только блокировки таблиц

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

Часто просматриваемая таблица поиска, которая редко изменяется . Отключив блокировки на странице и на уровне строк, все читатели будут использовать общую блокировку таблицы. Это быстрее /дешевле, чем обычное совместное использование на столе, за которым следует совместное использование на странице и, наконец, общая блокировка для определенной строки или строк.

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

Первый пример - микро-оптимизация и вряд ли принесет ощутимую выгоду для типичной системы. Второй будет решать этот конкретный сценарий взаимоблокировки, но может привести к неожиданным побочным эффектам, например. убивая параллелизм в другом разделе кода. Трудно оценить воздействие полностью, подходите с осторожностью!

Значение по умолчанию - для того, чтобы оба были включены, и этот не должен быть изменен без уважительной причины.

ответил Mark Storey-Smith 5 +04002011-10-05T05:01:25+04:00312011bEurope/MoscowWed, 05 Oct 2011 05:01:25 +0400 2011, 05:01:25
9

Наверное, ничего. Я уверен, MS знает лучше, чем вы или я

Я работал над OLTP-системами большого объема и никогда не испытывал необходимости изменять настройки. Тупик должен быть повторен, потому что они все равно будут

Цитата из блог сервера хранения SQL Server , «Блокировка эскалации в SQL2005» , которую стоит полностью прочитать.

  

По умолчанию у нас есть блокировки ROW и PAGE ... SQL Server выбирает гранулярность блокировки ROW для большинства случаев, но при необходимости может выбрать блокировку PAGE. Таким образом, для указанного вами случая, вероятно, будет блокировка ROW. Невозможно отключить блокировку PAGE на уровне базы данных или экземпляра. Вы сталкиваетесь с блокировкой из-за блокировок PAGE?

Я полагаю, что если вы вынуждаете только блокировки, тогда вы будете потреблять ресурсы, которые можно было бы использовать более эффективно в других местах. Если ваш груз достаточно высок, чтобы это имело значение, то зачем потреблять память? Статья в блоге входит в это

Я подозреваю, что за этим стоит какое-то суеверие, точно так же:

ответил gbn 4 +04002011-10-04T23:53:48+04:00312011bEurope/MoscowTue, 04 Oct 2011 23:53:48 +0400 2011, 23:53:48

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132