On Thu, Mar 07, 2019 at 11:25:10AM +0900, Michael Paquier wrote: > On Wed, Mar 06, 2019 at 11:08:12AM -0800, Jeremy Schneider wrote: >> If anything, I think we might just want to add comments to >> RegisterLWLockTranches() and lwlocknames.txt with links to the doc file >> that needs to be updated whenever a new tranche is added. > > Yes, that would surely help. > >> Not sure the best place for a comment on SLRUs (is SimpleLruInit a good >> place?)... but I'm kindof hopeful that we're not adding many more new >> SLRUs anyway and that people would bias toward leveraging the buffer >> cache when possible. > > A reference at the top of SimpleLruInit() sounds good to me.
Thinking more about that, a comment at the top of SimpleLruInit() and RegisterLWLockTranches() are both good things. So please find attached a patch which does the following things to address this thread: - Reorder the list of events in the Lock section in alphabetical order (not LWLock!). - Add the missing event entries, which is what Thomas has provided. - Add more documentation to mention the doc updates. Thoughts? -- Michael
diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 0e73cdcdda..feff6d4d60 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -861,7 +861,7 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser <tbody> <row> - <entry morerows="63"><literal>LWLock</literal></entry> + <entry morerows="67"><literal>LWLock</literal></entry> <entry><literal>ShmemIndexLock</literal></entry> <entry>Waiting to find or allocate space in shared memory.</entry> </row> @@ -1139,44 +1139,27 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser <entry>Waiting to allocate or exchange a chunk of memory or update counters during Parallel Hash plan execution.</entry> </row> + <row> + <entry><literal>session_dsa</literal></entry> + <entry>Waiting for per-session dynamic shared memory allocation + lock.</entry> + </row> + <row> + <entry><literal>session_record_table</literal></entry> + <entry>Waiting to access a shared record type cache by + structure.</entry> + </row> + <row> + <entry><literal>session_typmod_table</literal></entry> + <entry>Waiting to access a shared record type cache by + typmod.</entry> + </row> + <row> + <entry><literal>shared_tuplestore</literal></entry> + <entry>Waiting to access a shared tuplestore.</entry> + </row> <row> <entry morerows="9"><literal>Lock</literal></entry> - <entry><literal>relation</literal></entry> - <entry>Waiting to acquire a lock on a relation.</entry> - </row> - <row> - <entry><literal>extend</literal></entry> - <entry>Waiting to extend a relation.</entry> - </row> - <row> - <entry><literal>page</literal></entry> - <entry>Waiting to acquire a lock on page of a relation.</entry> - </row> - <row> - <entry><literal>tuple</literal></entry> - <entry>Waiting to acquire a lock on a tuple.</entry> - </row> - <row> - <entry><literal>transactionid</literal></entry> - <entry>Waiting for a transaction to finish.</entry> - </row> - <row> - <entry><literal>virtualxid</literal></entry> - <entry>Waiting to acquire a virtual xid lock.</entry> - </row> - <row> - <entry><literal>speculative token</literal></entry> - <entry>Waiting to acquire a speculative insertion lock.</entry> - </row> - <row> - <entry><literal>object</literal></entry> - <entry>Waiting to acquire a lock on a non-relation database object.</entry> - </row> - <row> - <entry><literal>userlock</literal></entry> - <entry>Waiting to acquire a user lock.</entry> - </row> - <row> <entry><literal>advisory</literal></entry> <entry>Waiting to acquire an advisory user lock.</entry> </row> @@ -1185,6 +1168,42 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser <entry><literal>BufferPin</literal></entry> <entry>Waiting to acquire a pin on a buffer.</entry> </row> + <row> + <entry><literal>extend</literal></entry> + <entry>Waiting to extend a relation.</entry> + </row> + <row> + <entry><literal>object</literal></entry> + <entry>Waiting to acquire a lock on a non-relation database object.</entry> + </row> + <row> + <entry><literal>page</literal></entry> + <entry>Waiting to acquire a lock on page of a relation.</entry> + </row> + <row> + <entry><literal>relation</literal></entry> + <entry>Waiting to acquire a lock on a relation.</entry> + </row> + <row> + <entry><literal>speculative token</literal></entry> + <entry>Waiting to acquire a speculative insertion lock.</entry> + </row> + <row> + <entry><literal>transactionid</literal></entry> + <entry>Waiting for a transaction to finish.</entry> + </row> + <row> + <entry><literal>tuple</literal></entry> + <entry>Waiting to acquire a lock on a tuple.</entry> + </row> + <row> + <entry><literal>userlock</literal></entry> + <entry>Waiting to acquire a user lock.</entry> + </row> + <row> + <entry><literal>virtualxid</literal></entry> + <entry>Waiting to acquire a virtual xid lock.</entry> + </row> <row> <entry morerows="13"><literal>Activity</literal></entry> <entry><literal>ArchiverMain</literal></entry> diff --git a/src/backend/access/transam/slru.c b/src/backend/access/transam/slru.c index 3623352b9c..42ddc61121 100644 --- a/src/backend/access/transam/slru.c +++ b/src/backend/access/transam/slru.c @@ -161,6 +161,12 @@ SimpleLruShmemSize(int nslots, int nlsns) return BUFFERALIGN(sz) + BLCKSZ * nslots; } +/* + * Initialize new SLRU tranche in shared memory + * + * Note that the tranche name is registered as a wait event, hence the + * related documentation for pg_stat_activity should be kept in sync. + */ void SimpleLruInit(SlruCtl ctl, const char *name, int nslots, int nlsns, LWLock *ctllock, const char *subdir, int tranche_id) diff --git a/src/backend/storage/lmgr/lwlock.c b/src/backend/storage/lmgr/lwlock.c index 81dac45ae5..beeca0011d 100644 --- a/src/backend/storage/lmgr/lwlock.c +++ b/src/backend/storage/lmgr/lwlock.c @@ -597,6 +597,9 @@ LWLockNewTrancheId(void) * routine will save a pointer to the tranche name passed as an argument, * so the name should be allocated in a backend-lifetime context * (TopMemoryContext, static variable, or similar). + * + * Note that the tranche name is registered as a wait event, hence the related + * documentation for pg_stat_activity should be kept in sync. */ void LWLockRegisterTranche(int tranche_id, const char *tranche_name) diff --git a/src/backend/storage/lmgr/lwlocknames.txt b/src/backend/storage/lmgr/lwlocknames.txt index db47843229..7c87529382 100644 --- a/src/backend/storage/lmgr/lwlocknames.txt +++ b/src/backend/storage/lmgr/lwlocknames.txt @@ -2,7 +2,8 @@ # these are defined here. If you add a lock, add it to the end to avoid # renumbering the existing locks; if you remove a lock, consider leaving a gap # in the numbering sequence for the benefit of DTrace and other external -# debugging scripts. +# debugging scripts. Each lock has an associated wait event, hence the +# documentation for pg_stat_activity should be kept in sync with this data. # 0 is available; was formerly BufFreelistLock ShmemIndexLock 1
signature.asc
Description: PGP signature