Этот баннер — требование Роскомнадзора для исполнения 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 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
интересные тут беседы у вас invmaid - это ПК? Danion Нет ... Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 10:27 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
Yasha123, а вот ещё: авторПросто там несколько сканирований индексов и 91% у одного удивило. А чем этот план не актуальный? Данные из кеша. там ещё окажется на эти update триггер который шерстит всю таблицу. Просто так эти update не будут просить SIX ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 10:50 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
Danionбаза в AlwaysOn. Как-то может влиять?Может. С включением RCSI будут проблемы - http://www.sqlnuggets.com/blog/change-the-isolation-level-of-an-availability-group-database/ DanionПо нему настроен первичный ключ таблицы.ПК и есть первичный ключ. Эта вереница update'ов одинаковая в каждой транзакции? Т.е. апдейтятся одни и те же строки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 10:52 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
и то верно. актуальный кэш --> актуальный план. не осетрина, понимаешь, "второй свежести" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 10:54 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
TaPaKПросто так эти update не будут просить SIXSIX просит select, а не update. Потому что в момент запроса S на страницу уже имеется IX на этой странице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 10:55 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
invmTaPaKПросто так эти update не будут просить SIXSIX просит select, а не update. Потому что в момент запроса S на страницу уже имеется IX на этой странице. это звучит как то странно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 10:58 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
TaPaK, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 11:13 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
invm, не очень похоже на "простой" select, ну да ладно. По схеме же six уже предоставлен до select? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 11:19 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
TaPaKне очень похоже на "простой" select, ну да ладно.Хинты добавлены исключительно для демонстрации эффекта, а не для "усложнения" select'а. TaPaKПо схеме же six уже предоставлен до select?На основании чего такой вывод? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 11:26 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
invmTaPaKне очень похоже на "простой" select, ну да ладно.Хинты добавлены исключительно для демонстрации эффекта, а не для "усложнения" select'а. TaPaKПо схеме же six уже предоставлен до select?На основании чего такой вывод? Как-то так, поправьте : sp 3316 уже удерхивает SIX на page ...662 и хочет S на page ... 658. Как получили SIX из всего предоставленного не видно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 11:50 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
TaPaKКак получили SIX из всего предоставленного не видноОчень даже видно. SIX - не отдельная блокировка, а комбинация блокировок S и IX. Как она получается, см. пример выше. Но это вообще не важно: в контексте данного дедлока ее можно интерпретировать просто как IX. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 12:11 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
invmTaPaKКак получили SIX из всего предоставленного не видноОчень даже видно. SIX - не отдельная блокировка, а комбинация блокировок S и IX. Как она получается, см. пример выше. Но это вообще не важно: в контексте данного дедлока ее можно интерпретировать просто как IX. Ок, т.е. лечить теоретическии изысканиями? Тогда да, RSCII и следующий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 12:16 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
От меня ещё какая-то информация сейчас нужна? А то пока разбираюсь на другом сервере с "бонусами" 1С. Хотя похоже там проблема с ОС. Кстати, если кто встречал похожее: Ночью были массовые изменения в базе 1С erp. Там авто прирост включен, стандартные 10% + ограничение в 2 097 152, по сути не ограничено. Лог базы нормально рос, а потом: C:\SQL\erp_log.ldf: Operating system error 665(The requested operation could not be completed due to a file system limitation) encountered. И пошли The transaction log for database 'erp' is full due to 'LOG_BACKUP'. до бекапа лога, после ожидаемо нормально. На диске меньше 10% места не становилось. И это больше 10% от размера лога. Попробовал увеличить файл руками на ГБ - MODIFY FILE encountered operating system error 665(The requested operation could not be completed due to a file system limitation) while attempting to expand the physical file 'C:\SQL\erp_log.ldf'. На 1 МБ позволило. Почитал по ошибке, пишут, что одной из возможной причин является фрагментация диска, проверил - сейчас там 42% фрагментация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 12:22 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
DanionОт меня ещё какая-то информация сейчас нужна?Вопрос был тут - 21768041 Можете попробовать переписать как-то так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 13:38 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
авторЭта вереница update'ов одинаковая в каждой транзакции? Т.е. апдейтятся одни и те же строки? Разрабы говорят, что действие одинаковое. SET [total]=:yp0, [bonuses]=:yp1 для какого-то aid ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 15:02 |
|
||
|
Дедлоки с Intent Locks объектов
|
|||
|---|---|---|---|
|
#18+
DanionРазрабы говорят, что действие одинаковоеЯ имел в виду перечень aid'ов один и тот же в конкурирующих сессиях? Ладно, не важно. 1. Индекс переделайте вот так: Код: sql 1. 2. 3. 4. 5. Если сочетание (complex_id, order_num, service_id) уникально, то и индекс сделайте уникальным. Если уникально (complex_id, order_num), то service_id оставьте в include и тоже индекс сделайте уникальным. 2. Перепишите эту пачку update'ов так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 3. Если п.2 неприменим, перепишите select как показано тут - 21768307 , добавив к сортировке order_num. Вообще, с учетом увиденного и DanionТранзакция с кучей действий с разным таблицами, один из этапов которой в первом посте с селектами.Напрашивается RCSI, что бы не расставлять костыли на каждом шагу или приводить код в адекватный вид. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 15:36 |
|
||
|
|

start [/forum/topic.php?all=1&fid=46&tid=1688570]: |
0ms |
get settings: |
4ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
82ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 377ms |

| 0 / 0 |
