Postgresql deadlocks
Martin Tiršel
lk na blackpage.eu
Čtvrtek Březen 1 15:12:48 CET 2012
Zdravim,
mam nad Djangom a Postgresql postavenu aplikaciu a od vcera sa mi zacali
(bez zmeny v aplikacii) objavovat deadlocky v PG. Doteraz to za niekolko
mesiacov nenastalo, medzitym sa aplikacia prerabala a na novej verzii bezi
niekolko tyzdnov. Doteraz nebol jediny problem s tymto. Od vcera kazdych
niekolko minut, hoci aplikacia updatovana nebola, len pribudaju nove data
v databaze.
Vie ma niekto nasmerovat, na co by som sa mal zamerat, pripadne skusit
upravit? Logy vyzeraju nejako takto:
2012-03-01 14:52:27 CET ERROR: deadlock detected
2012-03-01 14:52:27 CET DETAIL: Process 10372 waits for ShareLock on
transaction 130251607; blocked by process 10370.
Process 10370 waits for ShareLock on transaction 130251610; blocked by
process 10372.
Process 10372: UPDATE "advert_advert" SET "views" =
"advert_advert"."views" + 1 WHERE "advert_advert"."id" = 1152
Process 10370: UPDATE "advert_advert" SET "views" =
"advert_advert"."views" + 1 WHERE "advert_advert"."id" = 1153
2012-03-01 14:52:27 CET HINT: See server log for query details.
2012-03-01 14:52:27 CET STATEMENT: UPDATE "advert_advert" SET "views" =
"advert_advert"."views" + 1 WHERE "advert_advert"."id" = 1152
Niekedy aj niekolko po sebe:
2012-03-01 14:56:14 CET ERROR: deadlock detected
2012-03-01 14:56:14 CET DETAIL: Process 12017 waits for ShareLock on
transaction 130253008; blocked by process 12018.
Process 12018 waits for ShareLock on transaction 130253007; blocked by
process 12017.
Process 12017: UPDATE "advert_advert" SET "views" =
"advert_advert"."views" + 1 WHERE "advert_advert"."id" = 1165
Process 12018: UPDATE "advert_advert" SET "views" =
"advert_advert"."views" + 1 WHERE "advert_advert"."id" = 1151
2012-03-01 14:56:14 CET HINT: See server log for query details.
2012-03-01 14:56:14 CET STATEMENT: UPDATE "advert_advert" SET "views" =
"advert_advert"."views" + 1 WHERE "advert_advert"."id" = 1165
2012-03-01 14:56:15 CET ERROR: deadlock detected
2012-03-01 14:56:15 CET DETAIL: Process 12023 waits for ShareLock on
transaction 130253016; blocked by process 12026.
Process 12026 waits for ShareLock on transaction 130253013; blocked by
process 12023.
Process 12023: UPDATE "advert_advert" SET "views" =
"advert_advert"."views" + 1 WHERE "advert_advert"."id" = 1165
Process 12026: UPDATE "advert_advert" SET "views" =
"advert_advert"."views" + 1 WHERE "advert_advert"."id" = 1151
2012-03-01 14:56:15 CET HINT: See server log for query details.
2012-03-01 14:56:15 CET STATEMENT: UPDATE "advert_advert" SET "views" =
"advert_advert"."views" + 1 WHERE "advert_advert"."id" = 1165
2012-03-01 14:56:16 CET ERROR: deadlock detected
2012-03-01 14:56:16 CET DETAIL: Process 12026 waits for ShareLock on
transaction 130253018; blocked by process 12028.
Process 12028 waits for ShareLock on transaction 130253016; blocked by
process 12026.
Process 12026: UPDATE "advert_advert" SET "views" =
"advert_advert"."views" + 1 WHERE "advert_advert"."id" = 1151
Process 12028: UPDATE "advert_advert" SET "views" =
"advert_advert"."views" + 1 WHERE "advert_advert"."id" = 1165
2012-03-01 14:56:16 CET HINT: See server log for query details.
2012-03-01 14:56:16 CET STATEMENT: UPDATE "advert_advert" SET "views" =
"advert_advert"."views" + 1 WHERE "advert_advert"."id" = 1151
Medzitym su v logoch tieto zaznamy, ale to s tym zrejme nesuvisi:
2012-03-01 14:54:01 CET LOG: could not receive data from client:
Connection reset by peer
2012-03-01 14:54:01 CET LOG: unexpected EOF on client connection
2012-03-01 14:54:02 CET LOG: could not receive data from client:
Connection reset by peer
2012-03-01 14:54:02 CET LOG: unexpected EOF on client connection
2012-03-01 14:56:02 CET LOG: could not receive data from client:
Connection reset by peer
2012-03-01 14:56:02 CET LOG: unexpected EOF on client connection
2012-03-01 14:56:02 CET LOG: could not receive data from client:
Connection reset by peer
2012-03-01 14:56:02 CET LOG: unexpected EOF on client connection
Ak zadam tuto query (pripadne dalsie, ktore sa uvadzaju na
http://wiki.postgresql.org/wiki/Lock_Monitoring pri rieseni problemo s
uzamykanim):
select relation::regclass, * from pg_locks where not granted;
tak mi to ziadne zaznamy nevrati.
--
S pozdravom,
Martin Tiršel
Další informace o konferenci Linux