![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
|
Once in a while (about 3 times a day) one or more INSERTS/DELETES simply go into the "waiting" state, and block the whole database. The only way out is to terminate the client connection (i.e. to abort the blocked INSERT/DELETE query) Further investigation with ps -e -o wchan... showed that the backed process was simply sleeping in "semop". Output of ps: 762 ? S 0:00 /usr/lib/postgresql/bin/postmaster 764 ? S 0:00 postgres: stats buffer process 765 ? S 0:00 postgres: stats collector process 24872 ? S 0:00 postgres: sd sd 10.2.2.6 idle in transaction 24873 ? R 68:01 postgres: sd sd 10.2.2.6 SELECT 24932 ? S 3:09 postgres: sd sd 10.2.2.6 idle in transaction 24943 ? R 3:02 postgres: sd sd 10.2.2.6 SELECT 25004 ? S 0:01 postgres: sd sd 10.2.1.5 idle in transaction [snip] |
#2
| |||||
| |||||
|
|
Philipp Reisner writes: Once in a while (about 3 times a day) one or more INSERTS/DELETES simply go into the "waiting" state, and block the whole database. The only way out is to terminate the client connection (i.e. to abort the blocked INSERT/DELETE query) Further investigation with ps -e -o wchan... showed that the backed process was simply sleeping in "semop". Output of ps: 762 ? S 0:00 /usr/lib/postgresql/bin/postmaster 764 ? S 0:00 postgres: stats buffer process 765 ? S 0:00 postgres: stats collector process 24872 ? S 0:00 postgres: sd sd 10.2.2.6 idle in transaction 24873 ? R 68:01 postgres: sd sd 10.2.2.6 SELECT 24932 ? S 3:09 postgres: sd sd 10.2.2.6 idle in transaction 24943 ? R 3:02 postgres: sd sd 10.2.2.6 SELECT 25004 ? S 0:01 postgres: sd sd 10.2.1.5 idle in transaction [snip] All these "idle in transaction" sessions have unfinished transactions that are probably holding locks that the INSERT is waiting for. If you constantly have loads of "idle in transaction" sessions, you need to fix your application. In 7.3 there is a system table called pg_locks that you can use to investigate locks. I don't believe there was one in 7.2. |
|
| 63435 | 21154 | ExclusiveLock | t 6521098 | 6520640 | | 20988 | AccessShareLock | t |
|
| 63442 | 21153 | ExclusiveLock | t | 57548 | 21140 | ExclusiveLock | t 6520810 | 6520640 | | 20988 | AccessShareLock | t | 63434 | 21160 | ExclusiveLock | t | 63110 | 21109 | ExclusiveLock | t 6520833 | 6520640 | | 20988 | AccessShareLock | t | 57837 | 21096 | ExclusiveLock | t 6521078 | 6520640 | | 20988 | AccessShareLock | t | 63437 | 21156 | ExclusiveLock | t 6520702 | 6520640 | | 20988 | AccessShareLock | t | 63436 | 21155 | ExclusiveLock | t | 63438 | 21157 | ExclusiveLock | t | 63440 | 21159 | ExclusiveLock | t 6520814 | 6520640 | | 20988 | AccessShareLock | t |
|
| 57826 | 20987 | ExclusiveLock | t | 63439 | 21158 | ExclusiveLock | t 6521092 | 6520640 | | 20988 | AccessShareLock | t |
|
| 57535 | 20988 | ExclusiveLock | t (27 rows) |
#3
| |||
| |||
|
|
762 ? S 0:00 /usr/lib/postgresql/bin/postmaster 764 ? S 0:00 postgres: stats buffer process 765 ? S 0:00 postgres: stats collector process 24872 ? S 0:00 postgres: sd sd 10.2.2.6 idle in transaction 24873 ? R 68:01 postgres: sd sd 10.2.2.6 SELECT 24932 ? S 3:09 postgres: sd sd 10.2.2.6 idle in transaction 24943 ? R 3:02 postgres: sd sd 10.2.2.6 SELECT 25004 ? S 0:01 postgres: sd sd 10.2.1.5 idle in transaction 21226 ? S 0:00 postgres: sd sd 10.2.1.5 idle in transaction 21228 ? S 0:00 postgres: sd sd 10.2.1.5 idle in transaction 21229 ? S 0:00 postgres: sd sd 10.2.1.5 idle in transaction 21230 ? S 0:00 postgres: sd sd 10.2.1.5 idle in transaction 21231 ? S 0:01 postgres: sd sd 10.2.1.5 idle in transaction 21232 ? S 0:00 postgres: sd sd 10.2.1.5 idle in transaction 21227 ? S 0:01 postgres: sd sd 10.2.1.5 INSERT waiting 21391 pts/1 S 0:00 grep postg |
#4
| |||
| |||
|
| Thanks a lot for the reply! The applications uses the jdbc driver with autocommit turned off, commit and rollback. Do you know if the jdbc driver just starts a new transaction as soon as the last one was ended with commit/ rollback ? Yes, it does. |
![]() |
| Thread Tools | |
| Display Modes | |
| |