|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Есть процедура, которая в дедлоке выбирается жертвой: в ней есть селект из таблицы которая апдейтится другой процедурой. Хотел поставить на селект with(nolock), но решил пойти другим путем. Какой уровень изоляции поставить лучше для процедуры, чтобы он отработал только в ней после выхода снова вернулся предыдущий READ COMMITTED: SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SET TRANSACTION ISOLATION LEVEL SNAPSHOT; ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 11:50 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Если в процедуре задать уровень изоляции, то он действует только для контекста выполнения этой процедуры, после ее завершения будет уровень изоляции, который был до запуска процедуры. Что касается дедлока - для начала я бы включил для БД READ_COMMITTED_SNAPSHOT. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 12:21 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Ролг Хупин, если выбор в качестве жертвы для этой процедуры недопустим, то можно установить для сеанса SET DEADLOCK_PRIORITY HIGH. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 12:33 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Владислав Колосов Ролг Хупин, если выбор в качестве жертвы для этой процедуры недопустим, то можно установить для сеанса SET DEADLOCK_PRIORITY HIGH. он-то допустим, но я думал использовать уровень изоляции, чтобы вызов процедуры не становился жертвой из-за селекта, т.е. чтобы селект выбирал, скажем предыдущие коммитнутые записи ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 13:05 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Ролг Хупин, ну так deadlock - это часть нормальной работы, если он нежелателен или нельзя отложить выполнение "на потом", то надо или повышать приоритет дэдлока или писать повторное выполнение кода при помощи TRY CATCH. Где-то примеры попадались, может даже и в справке. Или у Бен-Гана, уже не помню. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 16:14 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
https://www.brentozar.com/archive/2021/05/free-video-deadlocks-lets-do-one-understand-it-and-fix-it/ ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 17:03 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Владислав Колосов Ролг Хупин, ну так deadlock - это часть нормальной работы, если он нежелателен или нельзя отложить выполнение "на потом", то надо или повышать приоритет дэдлока или писать повторное выполнение кода при помощи TRY CATCH. Где-то примеры попадались, может даже и в справке. Или у Бен-Гана, уже не помню. т.е. когда случаются дедлоки и сервер сам выбирает жертву, снимает транзакцию -- это нормально? Разве не нужно пытаться убрать дедлок, чтобы это два запроса(процедуры) могли нормально выполняться? Мне кажется нужно, по крайней мере в случае, если Reader-Writer дедлок ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2021, 11:50 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Ролг Хупин Владислав Колосов Ролг Хупин, ну так deadlock - это часть нормальной работы, если он нежелателен или нельзя отложить выполнение "на потом", то надо или повышать приоритет дэдлока или писать повторное выполнение кода при помощи TRY CATCH. Где-то примеры попадались, может даже и в справке. Или у Бен-Гана, уже не помню. т.е. когда случаются дедлоки и сервер сам выбирает жертву, снимает транзакцию -- это нормально? Разве не нужно пытаться убрать дедлок, чтобы это два запроса(процедуры) могли нормально выполняться? Мне кажется нужно, по крайней мере в случае, если Reader-Writer дедлок То, что "можно убрать" - deadlock-ом не назовут. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2021, 16:47 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
aleks222 Ролг Хупин пропущено... т.е. когда случаются дедлоки и сервер сам выбирает жертву, снимает транзакцию -- это нормально? Разве не нужно пытаться убрать дедлок, чтобы это два запроса(процедуры) могли нормально выполняться? Мне кажется нужно, по крайней мере в случае, если Reader-Writer дедлок То, что "можно убрать" - deadlock-ом не назовут. Не понял, можно чуть подробнее? Например, есть дедлок , так пишет Xevent и показывает кто начал, кто жертва. Написано, что update-select дедлок. Если я сделаю селект with(nolock) - дедлок уходит. Вот есть дедлок, котрый можно вот так убрать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2021, 17:17 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Ролг Хупин aleks222 пропущено... То, что "можно убрать" - deadlock-ом не назовут. Не понял, можно чуть подробнее? Например, есть дедлок , так пишет Xevent и показывает кто начал, кто жертва. Написано, что update-select дедлок. Если я сделаю селект with(nolock) - дедлок уходит. Вот есть дедлок, котрый можно вот так убрать. Что толку тебе объяснять прописные истины? MS SQL сервер гарантирует "корректность результатов" транзакции. Для этого он накладывает блокировки. Если тебе пофиг на корректность результатов - не накладывай блокировки. Еcли не пофиг - ничо, окромя дедлока, не получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2021, 13:28 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
aleks222 Ролг Хупин пропущено... Не понял, можно чуть подробнее? Например, есть дедлок , так пишет Xevent и показывает кто начал, кто жертва. Написано, что update-select дедлок. Если я сделаю селект with(nolock) - дедлок уходит. Вот есть дедлок, котрый можно вот так убрать. Что толку тебе объяснять прописные истины? MS SQL сервер гарантирует "корректность результатов" транзакции. Для этого он накладывает блокировки. Если тебе пофиг на корректность результатов - не накладывай блокировки. Еcли не пофиг - ничо, окромя дедлока, не получается. "Что толку тебе объяснять прописные истины?" о, конечно, толку нет гуру объяснять мне .Не утруждайте себя. Несмотря на то, что написали в общем-то фигню или не дописали снова. Гуру должен расслабляться. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2021, 14:58 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Ролг Хупин aleks222 пропущено... Что толку тебе объяснять прописные истины? MS SQL сервер гарантирует "корректность результатов" транзакции. Для этого он накладывает блокировки. Если тебе пофиг на корректность результатов - не накладывай блокировки. Еcли не пофиг - ничо, окромя дедлока, не получается. "Что толку тебе объяснять прописные истины?" о, конечно, толку нет гуру объяснять мне .Не утруждайте себя. Несмотря на то, что написали в общем-то фигню или не дописали снова. Гуру должен расслабляться. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2021, 15:38 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич Ролг Хупин пропущено... "Что толку тебе объяснять прописные истины?" о, конечно, толку нет гуру объяснять мне .Не утруждайте себя. Несмотря на то, что написали в общем-то фигню или не дописали снова. Гуру должен расслабляться. да, вот я и пытаюсь (как написнао выше) изменить уровен изоляции в процедуре, чтобы ее селект не провоцировал дедлок и не становился жертвой. Если чтение будет тех записей, которые уже готовы к чтеию - меня это устроит, не нао ничего ждать и т.д. С этим и связан вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2021, 15:44 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Всемирно известные сферические дедлоки в вакууме убираются исключительно квадратно-гнездовыми способами. Показывайте запросы и граф, хорош из пустого в порожнее переливать. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2021, 15:55 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Ролг Хупин Если чтение будет тех записей, которые уже готовы к чтеию - меня это устроит, не нао ничего ждать и т.д. С этим и связан вопрос. С такими подходом - лучше сразу в управдомы переквалифицироваться. - "Готов?" - "Всегда готов!" (с) пионеры PS. Откель сервер должон знать, что там в голове горе-программиста "готово"? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2021, 16:30 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
aleks222 Ролг Хупин Если чтение будет тех записей, которые уже готовы к чтеию - меня это устроит, не нао ничего ждать и т.д. С этим и связан вопрос. С такими подходом - лучше сразу в управдомы переквалифицироваться. - "Готов?" - "Всегда готов!" (с) пионеры PS. Откель сервер должон знать, что там в голове горе-программиста "готово"? Что за бредни? Из ваших странных ответов создается устойчивое впечтление, что вы готовы, т.е. в нетрезвом состоянии. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2021, 19:34 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Ролг Хупин, надо понять причину возникновения взаимоблокировки. Иногда это можно решить индексом, но держать индекс ради устранения взаимоисключений - нонсенс, это место для хранения и накладные расходы на каждое изменение, особенно пагубно при массовых изменениях. Если это последствия транскрипции запроса - надо переписать запрос. Если это следствие коллизий функций программы, то взаимоблокировка - корректное техническое состояние. В этом случае можно или создать "бутылочное горло" для строго последовательного выполнения функций (это можно рекомендовать в некоторых случаях) либо создать redo код, как я писал выше. PS изменением уровня изоляции взаимоблокировки не лечат. Назначение уровня изоляции состоит в поддержании требуемой степени достоверности данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2021, 20:38 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
aleks222 MS SQL сервер гарантирует "корректность результатов" транзакции. Для этого он накладывает блокировки. лишние. при чтении лишние блокировки накладывает. отсюда и дедлоки на пустом месте aleks222 Если тебе пофиг на корректность результатов - не накладывай блокировки. Еcли не пофиг - ничо, окромя дедлока, не получается. глупости. rcsi без блокировок дает консистентный набор ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2021, 22:04 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Владислав Колосов PS изменением уровня изоляции взаимоблокировки не лечат. Назначение уровня изоляции состоит в поддержании требуемой степени достоверности данных. лечат. собственно потому и добавили rcsi и snapshot. сточки зрения достоверности они ничего чего бы не было у блокировочных уровней не принесли. имено лечить дедлоки, увеличить параллельность добавили. у azure sql уже по дефолту ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2021, 22:12 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
H5N1 aleks222 MS SQL сервер гарантирует "корректность результатов" транзакции. Для этого он накладывает блокировки. лишние. при чтении лишние блокировки накладывает. отсюда и дедлоки на пустом месте aleks222 Если тебе пофиг на корректность результатов - не накладывай блокировки. Еcли не пофиг - ничо, окромя дедлока, не получается. глупости. rcsi без блокировок дает консистентный набор З.Ы. В целом, прошу холивар про rcsi-блокировки не разводить. Дедлоки зачастую успешно лечатся и без пушки по воробьям. Гораздо хуже они лечатся без графов. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2021, 23:42 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
H5N1 aleks222 MS SQL сервер гарантирует "корректность результатов" транзакции. Для этого он накладывает блокировки. лишние. при чтении лишние блокировки накладывает. отсюда и дедлоки на пустом месте aleks222 Если тебе пофиг на корректность результатов - не накладывай блокировки. Еcли не пофиг - ничо, окромя дедлока, не получается. глупости. rcsi без блокировок дает консистентный набор "Лишние", говоришь? А мужики то в мелкософте и не знают. "Глупости", говоришь? Дык никто ж не мешает тредстартеру включить rcsi и умыться слезами. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 07:05 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Я совсем не разбираюсь в MS SQL, и мне показалось что ТС беспокоится про дедлок в читаюшем селекте. Разве чтение может блокироваться? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 07:28 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
НеофитSQL, Shared блокировки накладываются. Но, конечно, без графа это все разговоры ни о чем. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 07:43 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Ennor Tiegael НеофитSQL, Shared блокировки накладываются. Но, конечно, без графа это все разговоры ни о чем. Тредстартер с этим дедлоком носится уже пару месяцев. Несколько тем было. По материалам которых учебный курс по дедлокам можно написать. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 08:07 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
aleks222 "Лишние", говоришь? А мужики то в мелкософте и не знают. лишние. мужики знают, я оповестил. без меня фиг бы догадались версионность в мсскл завести aleks222 "Глупости", говоришь? Дык никто ж не мешает тредстартеру включить rcsi и умыться слезами. никто не мешает тредстартеру использовать rcsi лишь в некоторых транзакциях, а не врубать дфолтом на всю базу как в azure sql. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 08:28 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
H5N1 использовать rcsi лишь в некоторых транзакциях Это как? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 08:59 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
msLex H5N1 использовать rcsi лишь в некоторых транзакциях Это как? да, как это? собственно, с этого вопроса и началась тема. но там два других варанта. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 14:18 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
aleks222 H5N1 пропущено... лишние. при чтении лишние блокировки накладывает. отсюда и дедлоки на пустом месте пропущено... глупости. rcsi без блокировок дает консистентный набор "Лишние", говоришь? А мужики то в мелкософте и не знают. "Глупости", говоришь? Дык никто ж не мешает тредстартеру включить rcsi и умыться слезами. что за фигня? На Production базе делать эксперименты думая, что включение RCSI - это просто включить и выключить. А если потом (!) выяснится, что с данными что-то не то, тогда рассказать про неких "мужиков то в мелкософте" и "умыться слезами"? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 14:22 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Ролг Хупин aleks222 пропущено... "Лишние", говоришь? А мужики то в мелкософте и не знают. "Глупости", говоришь? Дык никто ж не мешает тредстартеру включить rcsi и умыться слезами. что за фигня? На Production базе делать эксперименты думая, что включение RCSI - это просто включить и выключить. А если потом (!) выяснится, что с данными что-то не то, тогда рассказать про неких "мужиков то в мелкософте" и "умыться слезами"? Вы не нервничайте, поциент. Это ваще не с вами говорят. Модератор: Споконее, пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 15:10 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
НеофитSQL Разве чтение может блокироваться? Да, может. Пример из практики. Есть таблица в куче и два индекса - первичный ключ, и покрывающий (include) индекс, предназначенный для определенного запроса. (Заметьте, таблица одна, но объектов два). В процессе развития приложения этот запрос изменился, в него включили пару дополнительных полей. План запроса тоже изменился, и стал выполнять помимо поиска по инклуд-индексу, еще и lookup по первичному ключу. В ситуации, приведшей к дедлоку, первая сессия (читатель only!), при поиске по покрывающему индексу, сначала наложила S-блокировку на ключ в этом индексе, (прочитала его), и стала читать ключ из PK, (это всё в одном операторе select !), то есть попыталась наложить блокировку чтения и на него, но не тут-то было. Поскольку "в это же время" другая сессия (писатель, update) уже изменила строку в первичном ключе, (наложив на неё эксклюзивную X-блокировку), и вознамерилась довершить дело, (это тоже всё в одном запросе!), внеся соответствующие изменения в инклуд-индекс. Но эта строка в покрывающем индексе уже была заблокирована первой сессией. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 15:32 |
|
Какой уровень изоляции выбрать для процедуры?
|
|||
---|---|---|---|
#18+
Uridian, Спасибо за подробное объяснение, я его частично понял. В оракле (извиняюсь за упоминание непрофильного софта, важно для примера) эксклюзивный лок не запрещает чтение, поэтому такая ситуация не могла бы произойти. Т.е. по крайней мере есть гарантия что в Ларрином мире читатели рано или поздно закончат и отпустят ресурс, дедлока не будет. Есть особый случай "select.. for update", который намеренно ведет себя как писака, он хорошо известен им пользуются когда блокировка нужна. Но блокировка от других писак. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2021, 23:49 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1684703]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
132ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 239ms |
0 / 0 |