Improving deadlock error messages

Поиск
Список
Период
Сортировка
От Neil Conway
Тема Improving deadlock error messages
Дата
Msg-id 1177050949.16415.81.camel@localhost.localdomain
обсуждение исходный текст
Ответы Re: Improving deadlock error messages  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
The error message we currently produce when a deadlock occurs is pretty
unfriendly:
   ERROR:  deadlock detected   DETAIL:  Process 32068 waits for AccessExclusiveLock on relation   16413 of database
16384;blocked by process 32064.   Process 32064 waits for AccessExclusiveLock on relation 16415   of database 16384;
blockedby process 32068.
 

Users encounter this message relatively frequently -- and they often
depend on the information in the errdetail to track down the source of
the deadlock. Presenting numeric OIDs effectively forces the DBA to
resolve the OIDs to the appropriate relation and database names
manually.

I whipped up a quick patch to use names as well as OIDs for the
identifiers in the message, but on reflection the simple approach to
doing this is problematic: when we do syscache lookups to lookup the
identifier names, we might need to acquire an AccessShareLock on various
system catalogs (pg_class, pg_namespace, pg_database). This could fail
(e.g. because of a deadlock involving a system catalog), causing the
deadlock detector to infinitely recurse (albeit slowly).

We could fix this by first conditionally acquiring AccessShareLocks on
the necessary system catalogs. If any of those lock acquisitions fails,
we can just print the numeric OID instead. Since failing to acquire an
AccessShareLock on the system catalogs should not occur frequently in
practise, most users should see a more friendly error message.

Comments? Anyone see a better approach?

-Neil




В списке pgsql-hackers по дате отправления:

Предыдущее
От: Koichi Suzuki
Дата:
Сообщение: Re: [PATCHES] Full page writes improvement, code update
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Improving deadlock error messages