|
|
|
дедлок в постгресе. как лечить?
|
|||
|---|---|---|---|
|
#18+
столкнулся с проблемой дедлока в постгресе и если как бороться с сабжем в с++ приложении многопточном опыт и понимание есть то с постгресом полный блудняк - не знаю. нужна любая помощь... вот что удалось получить с помощью админа из логов бд cat /var/log/postgresql/postgresql-9.3-main.log|grep 5345 2014-02-17 12:30:41 MSK ПОДРОБНОСТИ: Процесс 5345 ожидает в режиме ShareLock блокировку "транзакция 191878859"; заблокирован процессом 19088. Процесс 19088 ожидает в режиме ShareLock блокировку "транзакция 191878687"; заблокирован процессом 5345. Процесс 5345: UPDATE sessions SET serverid=-1 WHERE sessionid=6241089; cat /var/log/postgresql/postgresql-9.3-main.log|grep 19088 2014-02-17 12:30:41 MSK ПОДРОБНОСТИ: Процесс 5345 ожидает в режиме ShareLock блокировку "транзакция 191878859"; заблокирован процессом 19088. Процесс 19088 ожидает в режиме ShareLock блокировку "транзакция 191878687"; заблокирован процессом 5345. Процесс 19088: UPDATE sessions SET serverid=-1 WHERE sessionid=6241090; в игровом сервере 16 потоков каждый из которых может выполнять sql запрос ( у каждого потока свой независимый коннект к бд ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 21:28:18 |
|
||
|
дедлок в постгресе. как лечить?
|
|||
|---|---|---|---|
|
#18+
Ну для начала надо запустить так: Код: sql 1. Что-бы окружение увидеть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 21:50:19 |
|
||
|
дедлок в постгресе. как лечить?
|
|||
|---|---|---|---|
|
#18+
orfelin, приведите полные логи этих транзакций зависших, что они еще делали, до того как встали. есть ли у вас триггера там, форейнкеи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 00:10:19 |
|
||
|
дедлок в постгресе. как лечить?
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. на sessions никакие триггеры не навешены. А вообще триггеры и NOTIFY есть в бд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 10:34:27 |
|
||
|
дедлок в постгресе. как лечить?
|
|||
|---|---|---|---|
|
#18+
orfelin, у вас в логе не PID не txid нет... с таким логом вы ничего не решите... PS: может ли у вас внутри 1 транзакции вызываться больше одной UPDATE sessions? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 12:53:21 |
|
||
|
дедлок в постгресе. как лечить?
|
|||
|---|---|---|---|
|
#18+
вобще постгрес при обнаружении deadlock пытается завершить одну из транзакций вовлеченных в deadlock, таким образом оставшаяся транзакция может выполнить свою работу. Регулируется это GUC'ом deadlock_timeout. Если автоматическое завершение не работает, то нужно руками завершить одного из участников с помощью pg_terminate_backend. Бороться с ними нужно на уровне приложения (тем более что понимание у вас есть), нельзя допускать таких ситуаций когда использование ресурсов перекрывается транзакциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 12:59:49 |
|
||
|
дедлок в постгресе. как лечить?
|
|||
|---|---|---|---|
|
#18+
Maxim Bogukorfelin, у вас в логе не PID не txid нет... с таким логом вы ничего не решите... pid'ы есть orfelinзаблокирован процессом 19088. заблокирован процессом 5345. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 13:02:46 |
|
||
|
дедлок в постгресе. как лечить?
|
|||
|---|---|---|---|
|
#18+
daevy, у меня нет понимания какие два SQL запроса взаимо заблокировали друг друга вложенных запросов обновляющих таблицу sessions нет вот все варианты которые может вызывать мой сервер: Код: sql 1. Код: sql 1. 2. Код: sql 1. других запросов нет. встроенных в PG функций работающих с sessions нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 13:22:58 |
|
||
|
дедлок в постгресе. как лечить?
|
|||
|---|---|---|---|
|
#18+
эти запросы пытаются изменить одни и те же строки, с userid=89364, тут и возникает deadlock -- 1 UPDATE sessions SET serverid=-1 WHERE sessionid=6241089; UPDATE sessions SET isclosed=true, closeby=14 WHERE userid=89364 AND sessionid != 6241089; -- 2 UPDATE sessions SET serverid=-1 WHERE sessionid=6241090; UPDATE sessions SET isclosed=true, closeby=14 WHERE userid=89364 AND sessionid != 6241090; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 13:43:24 |
|
||
|
дедлок в постгресе. как лечить?
|
|||
|---|---|---|---|
|
#18+
orfelinу меня нет понимания какие два SQL запроса взаимо заблокировали друг друга эта информация есть в логе что вы привели, собственно вот: 4105: Процесс 5345: UPDATE sessions SET serverid=-1 WHERE sessionid=6241089; 4184- UPDATE sessions SET isclosed=true, closeby=14 WHERE userid=89364 AND sessionid != 6241089; 4285- Процесс 19088: UPDATE sessions SET serverid=-1 WHERE sessionid=6241090; 4365- UPDATE sessions SET isclosed=true, closeby=14 WHERE userid=89364 AND sessionid != 6241090; тут и пиды и запросы повлекшие deeadlock ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 14:04:59 |
|
||
|
дедлок в постгресе. как лечить?
|
|||
|---|---|---|---|
|
#18+
orfelindaevy, у меня нет понимания какие два SQL запроса взаимо заблокировали друг друга Взаимно блокируются не запросы, а транзакции. У Вас в одной транзакции изменяется несколько sessions. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 14:45:01 |
|
||
|
дедлок в постгресе. как лечить?
|
|||
|---|---|---|---|
|
#18+
daevyorfelinу меня нет понимания какие два SQL запроса взаимо заблокировали друг друга эта информация есть в логе что вы привели, собственно вот: 4105: Процесс 5345: UPDATE sessions SET serverid=-1 WHERE sessionid=6241089; 4184- UPDATE sessions SET isclosed=true, closeby=14 WHERE userid=89364 AND sessionid != 6241089; 4285- Процесс 19088: UPDATE sessions SET serverid=-1 WHERE sessionid=6241090; 4365- UPDATE sessions SET isclosed=true, closeby=14 WHERE userid=89364 AND sessionid != 6241090; тут и пиды и запросы повлекшие deeadlock кажится я вкурил - под одним и тем же логином попробовали законнектиться два юзера разных одновременно пойду патч пилить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 15:26:20 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38565940&tid=1998830]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
167ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 435ms |

| 0 / 0 |
