|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
Доброго времени суток! Появилась большая проблема. Появилось огромное количество блокировок с типом LCK_M_X. Причем среднее время выполнения скачет от 30 сек. до нескольких минут, что очень сказывается на работе пользователей. И таких ситуаций уже становится достаточно много. Если раньше это было один-два раза в 3-4 дня, то на сегодня это уже ежедневная проблема. Оптимизировал несколько тяжелых по чтению запросов, добавил индексы по рекомендациям и скриптам Брентозара (разумеется не основываясь логикой, чем больше индексов тем лучше). Что примечательно, в таблице которая фиксирует такие блокировки, везде присутствуют 2-3 одинаковых запроса в столбце blocked, а именно одни и те же UPDATE. Проанализировал эти UPDATE и они не представляют особой опасности. Логического чтения 12-15, стоимость в районе 0,0000123 (условно, но примерно так и есть), поиск по индексу. Пробовал так же написать SELECT с условиями UPDATE, что бы он из буфера читал, но там в принципе нечему читать не то что с диска, даже с буфера На что еще можно обратить внимание и что в данном случае по Вашему опыту, можно сделать. В инете все очень поверхностно и общими фразами. Заранее благодарю! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 11:47 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
georgy_2012, может кто-то запретил укрупнение блокировок на таблицу ALTER TABLE SET LOCK_ESCALATION = DISABLE. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 12:42 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
Владислав Колосов, Про это даже как-то не подумал, если я не ошибаюсь, то укрупнение дает возможность объединения всех блокировок в одну и блокирует же всю таблицу? Точнее на уровне таблицы ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 12:52 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
georgy_2012, да, более 5000 блокировок укрупняются до таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 13:05 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
Владислав Колосов, А как это можно проверить? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 13:17 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
georgy_2012, Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 13:37 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
Владислав Колосов, И как часто вы наблюдали укрупнение X при конкурентом доступе к таблице? Как данное укрупнение позволит уменьшить общее время удержания X в системе? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 13:43 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
Владислав Колосов, Спасибо за скрпит, LOCK_ESCALATION = 0. То есть не отключено ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 13:44 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
invm, да, логично. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 14:14 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
invm, Есть может какие еще варианты, куда нужно посмотреть? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 14:14 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
georgy_2012, а что это за таблица, которая постоянно и параллельно обновляется? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 14:24 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
Владислав Колосов, Да, это динамическая таблица, которая постоянно изменяется/добавляются новые данные. SELECT из нее так же происходит, чуть ли не каждые 3 секунды. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 14:27 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
georgy_2012, Если действительно увеличилось время удержания X, то надо искать причины увеличения длительности транзакций, в рамках которых эти X были наложены. Они могут быть разные. Например, наличие в транзакции долгоиграющего запроса, который раньше не был долгоиграющим. Или долгие ожидания какого-либо ресурса. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 14:32 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
invm, В части ожидания ресурса, вроде должны появляться запросы SOS_SHIELD (поправьте меня если я ошибаюсь), но таких я не встречал и по процессорным ресурсам, железка вполне себе тянет. Опять же я могу ошибаться в вышесказанном, но пока не встречал с таким проблем. А вот по части долгоиграющего запроса, безусловно лезут запросы, которые раньше были мелкими и почти невесомыми по всем пунктам и как шарики начинают "надуваться", но за этим тоже слежу. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 14:52 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
Может есть варианты, что можно сделать или куда посмотреть? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2021, 08:03 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
Причину блокировки установить удалось? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2021, 10:25 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
georgy_2012, Аанализируйте содержимое sys.dm_exec_requests для сессий, удерживающих X Если состояние сессии running/runnable, значит выполняется/стоит в очереди на выполнение долгоиграющий запрос. Посмотреть что именно выполняется и на какой стадии можно с помощью sys.dm_exec_query_statistics_xml Если состояние сессии suspended, значит имеет место ожидание какого-то ресурса. last_wait_type, wait_resource и blocking_session_id покажут какого именно и кто блокирует. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2021, 10:29 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
invm, Большое спасибо! Буду анализировать ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2021, 10:39 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
georgy_2012, Есть еще вариант - по каким-либо причинам перестали завершаться некоторые транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2021, 10:51 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
invm, А как это можно отследить/определить? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2021, 10:57 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
georgy_2012 А как это можно отследить/определить? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2021, 11:17 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
invm, Спасибо большое! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2021, 11:18 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
georgy_2012, В итоге нашлось? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2021, 23:19 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
georgy_2012 Владислав Колосов, Да, это динамическая таблица, которая постоянно изменяется/добавляются новые данные. SELECT из нее так же происходит, чуть ли не каждые 3 секунды. Подумайте, как можно разделить процессы, чтобы эта таблица не была узким горлом. Например, выделить для каждого процесса отдельную таблицу или выполнять обновление фоновыми задачами при помощи очереди servicevroker. Не знаю условий использования сложно предложить что-то подходящее. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2021, 14:22 |
|
Долгие блокировки LCK_M_X
|
|||
---|---|---|---|
#18+
-comm-, Пока еще в процессе, так как увы есть куча других параллельных задач, но кое какая определенность появилась, а именно выползло еще несколько тяжелых по чтению запросов, тяжелых по записи таблиц, полагаю, что стоит теперь копаться в индексах (помимо основной оптимизации запросов). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2021, 12:09 |
|
|
start [/forum/topic.php?fid=46&fpage=25&tid=1684737]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 300ms |
total: | 430ms |
0 / 0 |