Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Allow_Page_Locks = ON производительность  [new]
badbe
Member

Откуда:
Сообщений: 2
Добрый день.

Подскажите как повлияет на производительность включение параметра Allow_Page_Locks = ON для таблицы. Какие факторы влияют на производительность чтения\записи в данную таблицу.
Так же насколько я понял, при выключенном данном параметре, не возможна реорганизация индекса для таблицы?
18 июл 13, 11:48    [14582550]     Ответить | Цитировать Сообщить модератору
 Re: Allow_Page_Locks = ON производительность  [new]
Crimean
Member

Откуда:
Сообщений: 13147
а он у вас, внезапно, выключен, что ли?
18 июл 13, 13:42    [14583525]     Ответить | Цитировать Сообщить модератору
 Re: Allow_Page_Locks = ON производительность  [new]
badbe
Member

Откуда:
Сообщений: 2
Да, базы пришли с уже отключенной данной функцией. Интересует как повлияет на производительность базы\таблицы включение данного функционала.
18 июл 13, 14:33    [14583981]     Ответить | Цитировать Сообщить модератору
 Re: Allow_Page_Locks = ON производительность  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
badbe
Интересует как повлияет на производительность базы\таблицы включение данного функционала.
Зависит от требуемых блокировок. Вместо блокирования страницы серверу придётся блокировать таблицу/индекс целиком. Это требует меньше ресурсов и уменьшает вероятность дедлоков, но зато замедляет другие процессы, которые хотят получить доступ к этой таблице/индексу.

Наверное, имеет смысл при сверхкоротких транзакциях, которые при этом меняют заметный набор данных.
18 июл 13, 14:48    [14584131]     Ответить | Цитировать Сообщить модератору
 Re: Allow_Page_Locks = ON производительность  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
badbe
Какие факторы влияют на производительность чтения\записи в данную таблицу.
Могут возникнуть дедлоки. Если из-за этого и ставили.
Но если во всех таблах было прописано - то кому-то было вломы разбираться (т.е. базы-говно).

А так, в зависимости от задач, сейчас вы можете нарваться на нехватку оперативы и всё сдохнет/свалится.
Не знаю поменялось ли поведение, но все локи хранятся чисто в оперативе. И где-то после 5тыс строк чуть ли не гарантируется эскалация с построчной локировки до страничной (если она не запрещена).

Если я не путаю, есть флаги сессии/запроса делающие тоже самое. И если вдруг после возрата этой опции начнутся проблемы с какими-то запросами - можете прописать в них этот флаг.
Так вы можете сузить круг где есть проблемы и заодно возможно уменьшить нагрузку на память.
badbe
Так же насколько я понял, при выключенном данном параметре, не возможна реорганизация индекса для таблицы?
Не слышал такого. Приведите ссылку из BOL.
badbe
Да, базы пришли с уже отключенной данной функцией. Интересует как повлияет на производительность базы\таблицы включение данного функционала.
А что, есть эта настройка на всю базу?
18 июл 13, 15:04    [14584287]     Ответить | Цитировать Сообщить модератору
 Re: Allow_Page_Locks = ON производительность  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Mnior
И где-то после 5тыс строк чуть ли не гарантируется эскалация с построчной локировки до страничной (если она не запрещена).

Эскалация никогда не делается до уровня страниц. Только до уровня таблиц или партиций (для случая секционированных таблиц).
BOL -> Lock Escalation (Database Engine)
The Database Engine does not escalate row or key-range locks to page locks, but escalates them directly to table locks. Similarly, page locks are always escalated to table locks. In SQL Server 2008, locking of partitioned tables can escalate to the HoBT level for the associated partition instead of to the table lock.


Mnior
badbe
Так же насколько я понял, при выключенном данном параметре, не возможна реорганизация индекса для таблицы?
Не слышал такого. Приведите ссылку из BOL.

BOL -> ALTER INDEX
REORGANIZE cannot be specified for a disabled index or an index with ALLOW_PAGE_LOCKS set to OFF.
18 июл 13, 15:15    [14584393]     Ответить | Цитировать Сообщить модератору
 Re: Allow_Page_Locks = ON производительность  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
alexeyvg
Вместо блокирования страницы серверу придётся блокировать таблицу/индекс целиком.
Мне почему-то удавалось не эскалалатить на всю таблу. Может я что-то подзабыл и путаю.
Есть логика, но не обязательно, что не может страницу, значит всю таблу. Логичнее если порог на таблицу был бы выше. Хотя это немного условно.

С другой стороны - обычно у меня не было такого: если шо - так таблу, а если не шо - так строки.
Обычно есть задачи где заранее известно что надо всю таблу лочить и явно прописывается хинт (TabLock).

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

А дедлок можно и на табле получить. :)

PS: Только это, alexeyvg, не надо на меня тратить время и скрипты показывать (как это invm делает), поверю на слово (просто пример коротко описать), а то я итак напряг. Но если есть желание - буду только рад.
18 июл 13, 15:22    [14584457]     Ответить | Цитировать Сообщить модератору
 Re: Allow_Page_Locks = ON производительность  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Сначала мучились с дедлоками. Потом мучились, фиксали расстановкой rowlock. Потом мучились, выключали паглоки на некоторой части таблиц. Потому плюнули и перевели базу на снапшот. Больше не мучаемся. ;)
18 июл 13, 15:22    [14584458]     Ответить | Цитировать Сообщить модератору
 Re: Allow_Page_Locks = ON производительность  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Mnior
Мне почему-то удавалось не эскалалатить на всю таблу. Может я что-то подзабыл и путаю.
Эскалирует как миленький. На части таблиц пришлось отключать через alter table.
18 июл 13, 15:24    [14584466]     Ответить | Цитировать Сообщить модератору
 Re: Allow_Page_Locks = ON производительность  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Гавриленко Сергей Алексеевич
Эскалирует как миленький.
Disables lock escalation (1121, 1224)
Гавриленко Сергей Алексеевич
На части таблиц пришлось отключать через alter table.
Согласен, скорее так лучше.
Гавриленко Сергей Алексеевич
Сначала мучились с дедлоками. Потом мучились, фиксали расстановкой rowlock. Потом мучились, выключали паглоки на некоторой части таблиц. Потому плюнули и перевели базу на снапшот. Больше не мучаемся. ;)
Ну, я вот дотошный и просто избавляюсь от локов. Долбаный перфекционист.
Но кому-то приходилось временно "лечить" настройками, пока не перестроили структуру.

Пока никто меня не убедил, что снапшот это не лентяйство.
18 июл 13, 16:22    [14584991]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить