Re: Logging conflicted queries on deadlocks
От | Alvaro Herrera |
---|---|
Тема | Re: Logging conflicted queries on deadlocks |
Дата | |
Msg-id | 20080228124016.GE4764@alvh.no-ip.org обсуждение исходный текст |
Ответ на | Logging conflicted queries on deadlocks (ITAGAKI Takahiro <itagaki.takahiro@oss.ntt.co.jp>) |
Список | pgsql-hackers |
ITAGAKI Takahiro wrote: > I wrote a small patch to log conflicted queries. > With my patch, deadlock message will change as following: > > | ERROR: deadlock detected > | DETAIL: Process 3468 waits for ShareLock on transaction 451; blocked by process 4068. > | STATEMENT: UPDATE test SET i = i WHERE i = 1; <- ***conflicted query*** > | Process 4068 waits for ShareLock on transaction 450; blocked by process 3468. > | STATEMENT: UPDATE test SET i = i WHERE i = 2; Cute. > There are some open issues. One of the issues is that the killed query is > logged by log_min_error_statement, but conflicted query is logged in DETAIL. > Killed query is logged only on server but conflicted queries are > sent to both server and client. In addition, if log_min_error_statement > is less than ERROR level, only the conflicted queries are logged. > -- it's inconsistent and unsymmetric. Perhaps it could be shown in CONTEXT, like so: | ERROR: deadlock detected | DETAIL: Process 3468 waits for ShareLock on transaction 451; blocked by process 4068. | Process 4068 waits for ShareLock on transaction 450; blocked by process 3468. | STATEMENT: UPDATE test SET i = i WHERE i = 2; | CONTEXT: process 3468: UPDATE test SET i = i WHERE i = 1; I think it's useful to show the PID of each statement, for the case where there are more than two processes deadlocked. -- Alvaro Herrera http://www.CommandPrompt.com/ The PostgreSQL Company - Command Prompt, Inc.
В списке pgsql-hackers по дате отправления: