|
|
|
как смоделировать deadlock detected ?
|
|||
|---|---|---|---|
|
#18+
периодически проскакивают deadlock detected но я не понимаю почему. а пока не пойму, не смогу вылечить.... подскажите какой нибудь простой пример как можно смоделировать эту ситуацию, чтоб появился deadlock detected. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2015, 21:34 |
|
||
|
как смоделировать deadlock detected ?
|
|||
|---|---|---|---|
|
#18+
kkv79периодически проскакивают deadlock detected но я не понимаю почему. а пока не пойму, не смогу вылечить.... А в чём проблема-то? Если Вы их обрабатываете и их не слишком много, то всё хорошо. kkv79подскажите какой нибудь простой пример как можно смоделировать эту ситуацию, чтоб появился deadlock detected. Нда. http://lmgtfy.com/?q=Deadlocks in PostgreSQL site:stackoverflow.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2015, 23:03 |
|
||
|
как смоделировать deadlock detected ?
|
|||
|---|---|---|---|
|
#18+
у меня получилось воспроизвести deadlock detected по умолчанию стоит deadlock_timeout=1s поставил deadlock_timeout=10s всё равно выскочил deadlock detected, но только на 10 секунд позже. т.е. увеличив этот параметр, я не избавился от deadlock detected, а только увеличил тупняк базы... для чего тогда нужен параметр deadlock_timeout, если он делает только хуже? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 11:50 |
|
||
|
как смоделировать deadlock detected ?
|
|||
|---|---|---|---|
|
#18+
kkv79, чтобы дятел в своем приложении (в менее важной ветке) успел сам отказаться от вызвавшего дедлок стейтмента, а не отдавать на откуп СУБД решение , какую из 2-х веток рубить. Но это сложно -- читать самому дерево блокировок, самому вычислять дедлоки, самому предлагать пользователю откатить транзакцию [или её фрагмент до сейвпойнта]. Гораздо проще правильно обрабатывать ошибку на клиенте. И ставить таймаут в минимум. т.е. делок -- это ситуация, не разрешимая без внешнего вмешательства . СУБД предлагает вам сервис по разрешению, снятием одного из конкурирующих за ресурсы (обычно -- в скрест) 2-х потоков команд. До тех пор пока вы не научитесь вмешиваться сами (и у вас не появиться тяга к обильному hand-job-у) -- полжитесь на этот сервис. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 12:18 |
|
||
|
как смоделировать deadlock detected ?
|
|||
|---|---|---|---|
|
#18+
kkv79, этот параметр нужен не для того чтобы исправить проблему. процедура поиска deadlock'ов ресурсоемкая, поэтому нужен этот параметр чтобы его в каких-то определенных случаях уменьшить можно было. в логах постгреса должно быть видно запросы/транзакции которые вызвали deadlock, от них и нужно исходить. скорее всего у вас либо в разных транзакциях обновляются одни и те же строки, но в разном порядке либо блокируются одни и те же строки в разных таблицах в разном порядке. решение простое - нужно либо обновлять (или брать блокировки) в одном порядке либо не обновлять одновременно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 12:20 |
|
||
|
как смоделировать deadlock detected ?
|
|||
|---|---|---|---|
|
#18+
qwwqkkv79, чтобы дятел в своем приложении (в менее важной ветке) успел сам отказаться от вызвавшего дедлок стейтмента, а не отдавать на откуп СУБД решение , какую из 2-х веток рубить. Но это сложно -- читать самому дерево блокировок, самому вычислять дедлоки, самому предлагать пользователю откатить транзакцию [или её фрагмент до сейвпойнта]. Гораздо проще правильно обрабатывать ошибку на клиенте. И ставить таймаут в минимум. т.е. делок -- это ситуация, не разрешимая без внешнего вмешательства . СУБД предлагает вам сервис по разрешению, снятием одного из конкурирующих за ресурсы (обычно -- в скрест) 2-х потоков команд. До тех пор пока вы не научитесь вмешиваться сами (и у вас не появиться тяга к обильному hand-job-у) -- полжитесь на этот сервис. у меня есть тикер, который раз в секунду обновляет поле в одной из таблиц, а дальше триггер на этом поле, делает кучу полезных вещей, необходимых для функционирования системы. дак вот именно он (тикер), периодически дэдлочится с другими более важными апдэйтами. получается, нужно выставить deadlock_timeout=3s например. и замерять время выполнения данной транзакции (тикера) и если вдруг, транзакция не завершилась за 3 сек. то отменить её, т.к. она менее важная, чем поступившие данные от клиента. я правильно понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 16:21 |
|
||
|
как смоделировать deadlock detected ?
|
|||
|---|---|---|---|
|
#18+
kkv79, “Полезный триггер” изменяет записи в таблицах в порядке, отличном от такового в “более важных апдейтах”, при этом изменить нужно одни и те же таблицы. Меняя время вы ничего не измените: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Увеличивая параметр вы просто увеличиваете время, пока база не вмешается. Нужно пересмотреть подход к изменению данных. Самое простое — пересмотреть все `UPDATE` транзакции и обеспечить изменение таблиц в определенном порядке, скажем в алфавитном. На практике бывает весьма не просто... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 17:50 |
|
||
|
как смоделировать deadlock detected ?
|
|||
|---|---|---|---|
|
#18+
kkv79у меня есть тикер, который раз в секунду обновляет поле в одной из таблиц, а дальше триггер на этом поле, делает кучу полезных вещей, необходимых для функционирования системы. дак вот именно он (тикер), периодически дэдлочится с другими более важными апдэйтами. получается, нужно выставить deadlock_timeout=3s например. и замерять время выполнения данной транзакции (тикера) и если вдруг, транзакция не завершилась за 3 сек. то отменить её, т.к. она менее важная, чем поступившие данные от клиента. я правильно понял? Нет, ну вообще это вариант, конечно, но похожий на перематывание скотчем. ;) Кстати, Вы уверены, что знаете, как это реализовать? Короче, как временная мера пойдёт, а вообще послушали бы Вы Alexius и vyegorov... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 18:32 |
|
||
|
как смоделировать deadlock detected ?
|
|||
|---|---|---|---|
|
#18+
[/quot] Нет, ну вообще это вариант, конечно, но похожий на перематывание скотчем. ;) Кстати, Вы уверены, что знаете, как это реализовать? Короче, как временная мера пойдёт, а вообще послушали бы Вы Alexius и vyegorov...[/quot] получилось. поставил для тикера таймаут транзакции 2 сек. а deadlock_timeout=2100 дэдлоки пропали и появились Код: plaintext теперь хоть пользовательские данные не пропадают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 21:21 |
|
||
|
как смоделировать deadlock detected ?
|
|||
|---|---|---|---|
|
#18+
kkv79, Если вы знаете, что вы делаете, то пусть будет так. Но на самом деле вы скрыли симптомы, вообще не заглянув в проблему. Как администратор стороннего софта, я предпочел бы как можно быстрее эскалировать проблему разработчику, собрав все участвующие в дэдлоке запросы, частоту дэдлоков и мое видение на то, как проблему решать. Т.к. в противном случае, если “прорвет” где-то еще, то прийдут ко мне и спросят. И будут правы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 22:00 |
|
||
|
как смоделировать deadlock detected ?
|
|||
|---|---|---|---|
|
#18+
kkv79получилось. поставил для тикера таймаут транзакции 2 сек. а deadlock_timeout=2100 дэдлоки пропали и появились Код: plaintext теперь хоть пользовательские данные не пропадают. посмотрите, что и в каком порядке делает ваш тикер. (порядок захвата записей/уникъю важен) т.к. дедлок возникает при захвате ресурсов "крест--накрест" -- то, обеспечив одинаковую очередность "подходов к снаряду" конкурирующих транзакций, вы, вместо дедлока, получите нормально разрешимую очередь. и , пока вы не разобрались с этим моментом, -- ваше решение вполне имеет право на жизнь. хотя оно и не столь хорошо, как предлагаемая vyegorov альтернатива ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 22:59 |
|
||
|
как смоделировать deadlock detected ?
|
|||
|---|---|---|---|
|
#18+
vyegorovkkv79, Если вы знаете, что вы делаете, то пусть будет так. Но на самом деле вы скрыли симптомы, вообще не заглянув в проблему. Как администратор стороннего софта, я предпочел бы как можно быстрее эскалировать проблему разработчику, собрав все участвующие в дэдлоке запросы, частоту дэдлоков и мое видение на то, как проблему решать. Т.к. в противном случае, если “прорвет” где-то еще, то прийдут ко мне и спросят. И будут правы. сейчас как раз занимаюсь разбором запросов вызывающих блокировки.... уже кое что даже нашёл и поправил )) теперь я полностью понял как они появляются и как их лечить.... спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 23:01 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38955948&tid=1998000]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 509ms |

| 0 / 0 |
