Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
Подскажите если у меня в цикле проходит обращение в процедуре и происходит взаимоблокировка, как я могу избежать этого? Посоветовали concurent dictionary - то я даже нагуглить не смог Пробовал SERIALIZABLE - не помогло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2018, 15:54 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
Начните, для начала, с публикации сообщения об ошибке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2018, 15:59 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
Pabl0, ConcurrentDictionary это вроде как из C#, вам точно это для SQL Server посоветовали? https://msdn.microsoft.com/ru-ru/library/dd287191(v=vs.110).aspx Вам вероятно придется код скинуть этих процедур, иначе сложно помочь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2018, 16:00 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
Да вот я тоже увидел что это для C, сначала я пытался эмитировать взаимо блокировку, а теперь нужно решение как обойти)) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2018, 18:47 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
В том то и дело, что ошибки у меня нету, но когда выполняется в цикле то иногда выдает "0" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2018, 18:50 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
Pabl0, ваш поток сознания слишком мутный, чтобы в нем что-то углядеть. Взаимоблокировка имеет четкое определение и всегда заканчивается тем, что один из потоков отстреливается с соответствующей ошибкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2018, 19:20 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
У меня цикл включается в API и потом пуляет на SQL я просто тупо не знаю как мне увидеть эту взаимоблокировку. Когда во время своего цикла я нажимаю sp_lock то показывает очень много Х Я смотрел в Управление - Журнале MS SQL но так не чего и не увидел там Ошибки происходят 100, потому что из цикла к примеру на 100 оборотов, добавляет в базу только 70+-, а должен добавить 100 И тут вопрос толи он не успевает добавить в базу, то ли взаимо блокировки но где ошибку посмотреть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2018, 19:27 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
Ну так разберитесь в вашем API, как получать ошибки, и залогируйте их. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2018, 19:29 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
Такс отлично, ошибок я получил 180 штук, все идентичны "Транзакция (идентификатор процесса РАЗНОЕ ЧИСЛО) вызвала взаимоблокировку ресурсов блокировка с другим процессом и стала жертвой взаимоблокировки. Запустите транзакцию повторно." Теперь мы уверены что это взаимно блокировки, теперь если я подниму уровень изоляции до Repetable Read это меня спасет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2018, 19:51 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
SERIALIZABLE даже он не помог :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2018, 19:57 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
Вот код Код: sql 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2018, 20:10 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
Если все 3 блока разбить на отдельные транзакции все будет работать, скажите правильно ли это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2018, 20:26 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
Pabl0, вероятно две сессии пишут один id. Или по id нет индекса. Очевидно же, что дедлок на апдейте. Serializable - помочь не сможет, на блокировке диапазонов сделает только хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2018, 11:36 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
Pabl0Вот код Код: sql 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. Ну, если у вас все верно написано - это эвивалентно Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2018, 12:17 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
nvv, да, я с вами полностью согласен на изменении дедлоки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2018, 07:31 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
aleks222, я сильно извиняюсь, но с кодом ппц намудрил, вот как должно быть Код: sql 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. извините еще раз пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2018, 07:58 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
Pabl0, Замените вашу череду excists/insert/update на это Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. О дедлоке можно предметно говорить, если покажете его граф (в виде ml, картинка бесполезна). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2018, 10:01 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
А если как я сделал в отдельные транзакции это не правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2018, 13:54 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
Pabl0, Если логика позволяет сделать без одной общей транзакции, т.е. каждый стейтмент в отдельной транзакции (кстати явно транзакцию для одного стейтмента указывать не нужно), то это вероятно будет работать, дедлоков не должно быть. Лучше попробуйте разобраться с предложенным merge решением. Вы сохраняете транзакцию и не делаете лишних движений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2018, 14:17 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
Pabl0А если как я сделал в отдельные транзакции это не правильно?Ну если вам наплевать, что, например, к @from @sum прибавится, а от @to @sum не отнимется, то можете вообще не заморачиваться с транзакциями. Если таки решите разобраться с транзакциями и дедлоками, то мой пример лучше переписать так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ЗЫ: А исходный пример надо бы поправить Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2018, 14:43 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
invmлучше переписать так Поясните пожалуйста почему лучше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 10:03 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
Владимир ЗатуливетерПоясните пожалуйста почему лучше?Чтобы снизить вероятность дедлока, если несколько сессий пересекуться по (@from, @to). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 10:12 |
|
||
|
Взаимоблокировки
|
|||
|---|---|---|---|
|
#18+
Pabl0, Код: sql 1. (NOLOCK) не используйте в процедурах, изменяющих данные или готовящих изменения. Потом будете списывать загадочные случаи на "компьютерный сбой" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 14:33 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39689558&tid=1689241]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 370ms |

| 0 / 0 |
