Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
Добрый день. Помогаю разработчикам с определением причин появления дедлоков. Изначально было похоже на классику: проблема с одной из таблиц, две страницы в ней, два запроса. Первый запрос с Insert и Select блочит первую страницу и хочет вторую, а второй запрос заблочил вторую страницу и хочет первую. Стандартный дедлок, вопросов не было. Эту часть переработали, но проблема осталась. Сейчас при дедлоке на этой же таблице блочат друг друга два селекта. Данные собраны через Extended Events. Прикладываю схему. По схеме блокировку первой страницы делает почему-то не S, а IX и SIX, что для выловленных запросов избыточно. Насколько я понимаю, для решения проблемы нужно понять, почему ставит блокировку не S, и по возможности изменить этот момент. Но пока причин не вижу. Проблемная таблица "n_order_marketing_complex_service" - одна из трех таблиц участвующих в join. Запрос жертва: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Оставшийся запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 12:55 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
Danion, т.е. SELECT без видимых причин решил что ему нужен SIX? Граф дедлока в xml покажите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 13:04 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
TaPaK, Причина наверняка где-то есть. План XML: (скрыл имя хоста, пользователя и базу) Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 13:21 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
Danion, Смотрите транзакции целиком. inputbuf показывает совсем не всё ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 13:36 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
Ваши селекты выполняются в транзакциях, в которых ранее были модификации "скрыто.dbo.n_order_marketing_complex_service". Об этом свидетельствует наличие IX. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 13:40 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
TaPaK, А можете подсказать где? Я выкладывал из xml_deadlock_report из extended events. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 13:45 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
invm, То есть - я вижу часть транзакции с селектом и где вроде нет причин, а блокирует часть, что через Extended Events не поймал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 13:46 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
DanionТо есть - я вижу часть транзакции с селектом и где вроде нет причин, а блокирует часть, что через Extended Events не поймал?Вы видите граф дедлока с конфликтующими инструкциями. Но это не означает, что ресурсы, за которые идет драка, заблокированы только этими инструкциями . У вас именно этот случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 13:59 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
invm, Спасибо за ответ. А я как-то могу получить полную видимость ситуации с этими блокировками? Или это только через разработчиков можно, чтобы смотрели что полностью выполняется при этом запросе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 14:37 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
Danioninvm, Спасибо за ответ. А я как-то могу получить полную видимость ситуации с этими блокировками? Или это только через разработчиков можно, чтобы смотрели что полностью выполняется при этом запросе? Быстрее у разработчиков, судя по тому что у вас там одно и то же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 14:38 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
TaPaK, Хорошо, попробую через разработчиков. Стабильность по времени начала и конца массовых дедлоков присутствует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 14:49 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
Danion, Сорее всего, ваш селект сканирует таблицу n_order_marketing_complex_service. Возможно создание правильного индекса уберет таковое и запросы из разных сессий перестанут пересекаться по данным. Заодно может снизится гранулярность блокировок. Соответственно, данный дедлок исчезнет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 16:21 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
invm, Не понял как добавление индекса поможет с блокировками, которые накладываются пока не очень понятно где. В селекте из этой таблицы участвуют в join поля omcs.order_num и omcs.complex_id. По таблице есть индексы и например этот не кластерный индекс включает данные поля: Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 16:47 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
DanionНе понял как добавление индекса поможет с блокировкамИндекс может убрать сканирование таблицы из плана выполнения. Соответственно, конкурирующие запросы перестанут пересекаться по читаемым данным. Показанный индекс возможно малоприменим для данного запроса, т.к. за значениями столбцов omcs.price и omcs.total все равно придется лезть в таблицу. План запроса смотрите - там все видно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 17:17 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
invm, Вот план запроса, поиск по индексу составил 91%. Как-то много. ! знак ругается на большее количество преобразований типов данных в рамках плана запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 17:47 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
Danioninvm, Вот план запроса, поиск по индексу составил 91%. Как-то много. это трактуется так: 91% всего времени выполнения происходил index seek (самое быстрое что может быть) % - это величина относительная, а не абсолютная ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 17:52 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
нужен актуальный план выполнения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 17:55 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
komrad, Просто там несколько сканирований индексов и 91% у одного удивило. А чем этот план не актуальный? Данные из кеша. При дедлоке Extended Events похоже не собирает данные, попробую профайлером завтра, там вроде было. Пытаюсь выяснить подробности у разрабов, пока выходит одна транзакция с кучей Select, update, delete, insert, один из кусков которой и есть с селектами. Тогда почему не падает всё остальное... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 18:03 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
Danion, "Правильный" для данного запроса индекс есть (правда не тот, который вы показали) и он задействован. Значит версия о полном сканировании таблицы отпадает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2018, 18:16 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
invm, Индекс этот применялся: CREATE NONCLUSTERED INDEX [in_n_order_marketing_complex_service$complex_id$order_num$service_id$price$total] ON [dbo].[n_order_marketing_complex_service] ( [complex_id] ASC ) INCLUDE ( [order_num], [service_id], [price], [total]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO Транзакция с кучей действий с разным таблицами, один из этапов которой в первом посте с селектами. При падении должно откатывать все этапы. При этом мне казалось, что блокировки наложенные в транзакции остаются до её окончания, а проблемы с одной таблицей только. С таблицей по которой дедлоки происходит update, потом этом запрос с селектами, после в ней ничего не меняется. Кроме варианта с грязным чтением (который может дать не соответствующие действительности данные) что-то можно сделать? Например как-то изменять уровень блокировки на S после update... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 09:14 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
DanionС таблицей по которой дедлоки происходит update, потом этом запрос с селектами, после в ней ничего не меняется.Покажите этот update. Danionчто-то можно сделать?Радикально - включить RCSI. Паллиативно, пока не выяснена причина дедлока - добавить хинт rowlock к таблице в селекте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 09:31 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
invm, Вот: Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 09:44 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
aid - это ПК? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 10:11 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
При включении RCSI нашел упоминание о проблемах с миррорингом в начале. Вроде не критично с данной проблемой блокировок, но база в AlwaysOn. Как-то может влиять? Вроде не должно. invm, Нет, похоже на номер заказа. По нему настроен первичный ключ таблицы. ALTER TABLE [dbo].[n_order_marketing_complex_service] ADD PRIMARY KEY CLUSTERED ( [aid] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 10:20 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39749969&tid=1688570]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
77ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 266ms |
| total: | 424ms |

| 0 / 0 |
