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

Откуда: Москва
Сообщений: 567
Добрый день. Секционировал таблицу "G_OPR" по полю "FILIAL_ID", с целью добавления уровня для укрупнения блокировок. СУБД - MS-SQL 2008 R2, в таблице, по рекомендации Microsoft поменял - lock_escalation в "AUTO". Увидел то, что апдейт одной секции, блокирует апдейты других секций. Начал копать, увидел то, что: старые запросы блокируют ресурсы других секций, а предложения типа TOP ( +100500 ) / TOP(100) PERCENT - помогают это избежать. Просто не могу понять по какой причине это происходит. Что бы было более понятно - прилагаю план запроса.

Запрос:
update --top(100) percent
	G_OPR_part
set BlkDate = BlkDate
where FILIAL_ID in ('0012')

update top(100) percent
	G_OPR_part
set BlkDate = BlkDate
where FILIAL_ID in ('0012')

[img=]

К сообщению приложен файл. Размер - 34Kb
12 окт 12, 11:50    [13307284]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с влиянием предложения TOP( N ) в секционированной таблице  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Блин ну и выбор "решения" проблемы.
Вы вообще понимаете смысл вашей основной проблемы?
Или увидели блокировки и не понимая их логический смысл стали решать первым попавшимся способом?

Вам не нужно секционирование.

Missing Index - как бэ намекае
12 окт 12, 12:07    [13307468]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с влиянием предложения TOP( N ) в секционированной таблице  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
Mnior,

Поясните, если не затруднит, что Вы увидели? По какой причине считаете что не нужно секционирование?

Вопрос о секционировании встал из за того, что это интеграционная база данных, в которую сливаются данные с нескольких филиалов большими порциями, JOB настроены на филиальских серверах, заливка происходит примерно в одно время.
На рассматриваемой таблице происходит укрупнение блокировок при апдейте, соответственно, средствами секционирования было желание уменьшить гранулярность эскалации с табличной до секции.
12 окт 12, 12:12    [13307525]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с влиянием предложения TOP( N ) в секционированной таблице  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Алексей Куренков
Вопрос о секционировании встал из за того, что это интеграционная база данных, в которую сливаются данные с нескольких филиалов большими порциями
Это другое дело, если ли бы, НО
Дело не в том что у вас делается заливка из разных источников, а то что у вас делается заливка порций данных.
Поэтому секционирование делается по этим порциям, а не по коду источника.
Это не связанные вещи - это косвенная информация, не нужная для "решения".

Алексей Куренков
На рассматриваемой таблице происходит укрупнение блокировок при апдейте, соответственно, средствами секционирования было желание уменьшить гранулярность эскалации с табличной до секции.
Алексей Куренков
Секционировал таблицу "G_OPR" по полю "FILIAL_ID", с целью добавления уровня для укрупнения блокировок
Я не понял, какова цель секционирования - заливки данных или гранулирование?

Совет: не связывайте понятие секционирование и блокировка. Вааще. Это просто никому не нужный, ничем не привлекающая бесполезная особенность. Которая только пудрит моск.

Почему происходит укрупнение? Вы можете на это чётко ответить?
Откуда взялся запрос? Какую он решает бизнес задачу?
12 окт 12, 12:54    [13307920]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с влиянием предложения TOP( N ) в секционированной таблице  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
Mnior
Совет: не связывайте понятие секционирование и блокировка. Вааще. Это просто никому не нужный, ничем не привлекающая бесполезная особенность. Которая только пудрит моск.


Здесь я не соглашусь, я руководсвуюсь BOL - http://msdn.microsoft.com/ru-ru/library/ms190273.aspx

SET ( LOCK_ESCALATION = { AUTO | TABLE | DISABLE } )
Указывает разрешенные методы укрупнения блокировки для таблицы.

AUTO
Этот параметр позволяет Компонент SQL Server Database Engine выбрать гранулярность укрупнения блокировки, подходящую для данной схемы таблицы.

  • В секционированных таблицах допускается укрупнение блокировки до секций. После укрупнения блокировки до уровня секции дальнейшее укрупнение до гранулярности TABLE выполняться не будет.

    Mnior
    Почему происходит укрупнение? Вы можете на это чётко ответить?

    По причине апдейта больших порций. SQL Server оставляет за собой право в случае нехватки памяти укрупнять блокировки.

    Mnior
    Откуда взялся запрос? Какую он решает бизнес задачу?


    Я исполняю обязанности ДБА, соответственно моя задача при сигнализировании проблемы решать ее доступными способами, в случае невозможности - привлекать разработчиков к изменению кода, пока я решаю этот вопрос своими силами. Какую он решает бизнес задачу - позвольте мне это не афишировать. Для меня - техническую.

    А вопрос собственно в том, я хочу понять по какой причине TOP(100) PERCENT коренным образом влияет на блокировки и вообще на план запроса в секционированной этой (на тесте в другой среде все работает прекрасно без блокировок) таблицы?
  • 12 окт 12, 13:21    [13308142]     Ответить | Цитировать Сообщить модератору
     Re: Помогите разобраться с влиянием предложения TOP( N ) в секционированной таблице  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6724
    Алексей Куренков
  • В секционированных таблицах допускается укрупнение блокировки до секций. После укрупнения блокировки до уровня секции дальнейшее укрупнение до гранулярности TABLE выполняться не будет.
  • И что ?
    Это исправит неправильное решение задачи или неправильную постановку?
    Mnior
    По причине апдейта больших порций. SQL Server оставляет за собой право в случае нехватки памяти укрупнять блокировки.
    1. Не по причине нехватки памяти. А по эвристике (аля если количество строк ...).
    2. Вы уверены в наличие укрупнения блокировок? Вы думаете что сервер всегда начинает локировать со строк?

    Из картинки видно, что скорее оптимизатор запроса изначально выбрал скан таблы и скорее и изначальную блокировку всей таблы.
    То что эскалация блокировки не подымается выше секции, а у вас блокируется вся табла - это доказывает.

    Банальное отсутствие подходящего индекса может приводить к блокировке сразу всей таблы.

    1. Какова природа блокировок? Какова идея разделения на строки/страницы/секции/таблицы? Зачем упорядочивать данные (индексы)?
    2. Почему происходит большой апдейт данных?
    Mnior
    Я исполняю обязанности ДБА, соответственно моя задача при сигнализировании проблемы решать ее доступными способами, в случае невозможности - привлекать разработчиков к изменению кода, пока я решаю этот вопрос своими силами. Какую он решает бизнес задачу - позвольте мне это не афишировать. Для меня - техническую.
    Вы неправильно расставили приоритеты.
    1. Привлекать разработчиков к проблеме
    2. По ходу делать временные решения.

    Обязанности ещё неизвестно как расставлены. У некоторых DBA стоит задача копать суть проблемы, ибо редко какие проблемы можно чётко разделить это DBA проблемы или ошибка разработки. На самом деле чаще тут DBA совершенно не причём.

    Mnior
    А вопрос собственно в том, я хочу понять по какой причине TOP(100) PERCENT коренным образом влияет на блокировки и вообще на план запроса в секционированной этой (на тесте в другой среде все работает прекрасно без блокировок) таблицы?
    Зачем? Вы хотите в своей профессии решать проблемы или быть собирателем костылей?
    Это очевидно что это "особенность" этого средства (MSSQL вашей версии), выходящая за рамки RDBS подхода. Что эта особенность что очередной баг - не важно и бесполезно.
    12 окт 12, 14:01    [13308418]     Ответить | Цитировать Сообщить модератору
     Re: Помогите разобраться с влиянием предложения TOP( N ) в секционированной таблице  [new]
    Алексей Куренков
    Member [заблокирован]

    Откуда: Москва
    Сообщений: 567
    Mnior,

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

    Индексов нет, по причине, я их сам убил что бы понять глубже суть проблемы (на тесте). С индексами тоже самое было, только план запроса был в несколько раз больше. Зачем я хочу понять суть проблемы? - вопрос риторический, на мой взгляд. Можно также спросить - зачем знать тото и тото когда это и без наших знаний уже работает. Вероятно за тем - что я являюсь специалистом в этой области для моего работодателя и для себя если какие то моменты технические не понимаю - хочу в них разобраться.
    12 окт 12, 14:11    [13308489]     Ответить | Цитировать Сообщить модератору
     Re: Помогите разобраться с влиянием предложения TOP( N ) в секционированной таблице  [new]
    Алексей Куренков
    Member [заблокирован]

    Откуда: Москва
    Сообщений: 567
    Mnior
    Алексей Куренков
  • В секционированных таблицах допускается укрупнение блокировки до секций. После укрупнения блокировки до уровня секции дальнейшее укрупнение до гранулярности TABLE выполняться не будет.
  • И что ?
    Это исправит неправильное решение задачи или неправильную постановку?
    Mnior
    По причине апдейта больших порций. SQL Server оставляет за собой право в случае нехватки памяти укрупнять блокировки.
    1. Не по причине нехватки памяти. А по эвристике (аля если количество строк ...).
    2. Вы уверены в наличие укрупнения блокировок? Вы думаете что сервер всегда начинает локировать со строк?

    Из картинки видно, что скорее оптимизатор запроса изначально выбрал скан таблы и скорее и изначальную блокировку всей таблы.
    То что эскалация блокировки не подымается выше секции, а у вас блокируется вся табла - это доказывает.

    Банальное отсутствие подходящего индекса может приводить к блокировке сразу всей таблы.

    1. Какова природа блокировок? Какова идея разделения на строки/страницы/секции/таблицы? Зачем упорядочивать данные (индексы)?
    2. Почему происходит большой апдейт данных?
    Mnior
    Я исполняю обязанности ДБА, соответственно моя задача при сигнализировании проблемы решать ее доступными способами, в случае невозможности - привлекать разработчиков к изменению кода, пока я решаю этот вопрос своими силами. Какую он решает бизнес задачу - позвольте мне это не афишировать. Для меня - техническую.
    Вы неправильно расставили приоритеты.
    1. Привлекать разработчиков к проблеме
    2. По ходу делать временные решения.

    Обязанности ещё неизвестно как расставлены. У некоторых DBA стоит задача копать суть проблемы, ибо редко какие проблемы можно чётко разделить это DBA проблемы или ошибка разработки. На самом деле чаще тут DBA совершенно не причём.

    Mnior
    А вопрос собственно в том, я хочу понять по какой причине TOP(100) PERCENT коренным образом влияет на блокировки и вообще на план запроса в секционированной этой (на тесте в другой среде все работает прекрасно без блокировок) таблицы?
    Зачем? Вы хотите в своей профессии решать проблемы или быть собирателем костылей?
    Это очевидно что это "особенность" этого средства (MSSQL вашей версии), выходящая за рамки RDBS подхода. Что эта особенность что очередной баг - не важно и бесполезно.



    Собственно, прошу ответить на технический вопрос. А не копаться для чего это? Может вам это не нужно? И т.п.
    Так можно докопаться до глубоких материй типа: зачем вам это? зачем вам вообще бизнес? для чего именно в этой стране? и т.п. напридумывать можно что угодно.

    Есть вопрос конкретный, не знаете, не понимаю для чего спрашивать не относящееся к делу?
    12 окт 12, 15:13    [13308996]     Ответить | Цитировать Сообщить модератору
     Re: Помогите разобраться с влиянием предложения TOP( N ) в секционированной таблице  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6724
    Mnior
    Из картинки видно, что скорее оптимизатор запроса изначально выбрал скан таблы и скорее и изначальную блокировку всей таблы.
    То что эскалация блокировки не подымается выше секции, а у вас блокируется вся табла - это доказывает.
    Алексей Куренков, я думаю что и на ваш вопрос ответил и показал куда нужно было копать.

    А Команда Top обманывает оптимизатор и делает изначально Row локировку.
    Top(100) PERCENT это извращение и ради этого выяснять нужно ли использовать локировку высоко уровня или нет - нет смысла.

    Алексей Куренков
    Так можно докопаться до глубоких материй типа: зачем вам это? зачем вам вообще бизнес? для чего именно в этой стране? и т.п. напридумывать можно что угодно.
    Это вы передираете. Не надо, всё по существу.

    И не важно наёмный вы работник или нет. Более того, таких вот зажатых вредно нанимать - и заморочился и проблему не решил и бабло в трубу.
    Проблему решают сверху вниз и каждый (независимо от профессии) на каждом этапе должен ставить вопрос о корректности постановки задачи.
    А то вас так и цирк наймёт для акробатики - "Ищем сисадмина ..."
    12 окт 12, 17:51    [13310265]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить