public inbox for [email protected]help / color / mirror / Atom feed
[PATCH v39 1/2] Avoid some calls to RelationGetRelationName 3+ messages / 3 participants [nested] [flat]
* [PATCH v39 1/2] Avoid some calls to RelationGetRelationName @ 2020-02-27 01:22 Justin Pryzby <[email protected]> 0 siblings, 0 replies; 3+ messages in thread From: Justin Pryzby @ 2020-02-27 01:22 UTC (permalink / raw) --- src/backend/access/heap/vacuumlazy.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 0d2e724a7d..803e7660f7 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -655,8 +655,8 @@ heap_vacuum_rel(Relation onerel, VacuumParams *params, } appendStringInfo(&buf, msgfmt, get_database_name(MyDatabaseId), - get_namespace_name(RelationGetNamespace(onerel)), - RelationGetRelationName(onerel), + vacrelstats->relnamespace, + vacrelstats->relname, vacrelstats->num_index_scans); appendStringInfo(&buf, _("pages: %u removed, %u remain, %u skipped due to pins, %u skipped frozen\n"), vacrelstats->pages_removed, @@ -827,7 +827,7 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats, if (params->nworkers > 0) ereport(WARNING, (errmsg("disabling parallel option of vacuum on \"%s\" --- cannot vacuum temporary tables in parallel", - RelationGetRelationName(onerel)))); + vacrelstats->relname))); } else lps = begin_parallel_vacuum(RelationGetRelid(onerel), Irel, @@ -1722,7 +1722,7 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats, if (vacuumed_pages) ereport(elevel, (errmsg("\"%s\": removed %.0f row versions in %u pages", - RelationGetRelationName(onerel), + vacrelstats->relname, tups_vacuumed, vacuumed_pages))); /* @@ -1751,7 +1751,7 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats, ereport(elevel, (errmsg("\"%s\": found %.0f removable, %.0f nonremovable row versions in %u out of %u pages", - RelationGetRelationName(onerel), + vacrelstats->relname, tups_vacuumed, num_tuples, vacrelstats->scanned_pages, nblocks), errdetail_internal("%s", buf.data))); @@ -1883,7 +1883,7 @@ lazy_vacuum_heap(Relation onerel, LVRelStats *vacrelstats) ereport(elevel, (errmsg("\"%s\": removed %d row versions in %d pages", - RelationGetRelationName(onerel), + vacrelstats->relname, tupindex, npages), errdetail_internal("%s", pg_rusage_show(&ru0)))); @@ -2431,7 +2431,7 @@ lazy_vacuum_index(Relation indrel, IndexBulkDeleteResult **stats, ereport(elevel, (errmsg(msg, - RelationGetRelationName(indrel), + vacrelstats->indname, dead_tuples->num_tuples), errdetail_internal("%s", pg_rusage_show(&ru0)))); @@ -2602,7 +2602,7 @@ lazy_truncate_heap(Relation onerel, LVRelStats *vacrelstats) vacrelstats->lock_waiter_detected = true; ereport(elevel, (errmsg("\"%s\": stopping truncate due to conflicting lock request", - RelationGetRelationName(onerel)))); + vacrelstats->relname))); return; } @@ -2668,7 +2668,7 @@ lazy_truncate_heap(Relation onerel, LVRelStats *vacrelstats) ereport(elevel, (errmsg("\"%s\": truncated %u to %u pages", - RelationGetRelationName(onerel), + vacrelstats->relname, old_rel_pages, new_rel_pages), errdetail_internal("%s", pg_rusage_show(&ru0)))); @@ -2733,7 +2733,7 @@ count_nondeletable_pages(Relation onerel, LVRelStats *vacrelstats) { ereport(elevel, (errmsg("\"%s\": suspending truncate due to conflicting lock request", - RelationGetRelationName(onerel)))); + vacrelstats->relname))); vacrelstats->lock_waiter_detected = true; return blkno; -- 2.17.0 --TD8GDToEDw0WLGOL Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v39-0002-Drop-reltuples.patch" ^ permalink raw reply [nested|flat] 3+ messages in thread
* [PATCH v1] Caller specified wait events for LWLockWaitForVar(), LWLockAcquireOrWait() @ 2023-07-17 16:20 Andres Freund <[email protected]> 0 siblings, 0 replies; 3+ messages in thread From: Andres Freund @ 2023-07-17 16:20 UTC (permalink / raw) Reporting waits within those functions as LWLock wait events is misleading, as we do not actually wait for the lock themselves. Author: Reviewed-by: Discussion: https://postgr.es/m/ Backpatch: --- src/include/storage/lwlock.h | 6 ++++-- src/backend/access/transam/xlog.c | 6 ++++-- src/backend/storage/lmgr/lwlock.c | 19 +++++++++++++------ .../utils/activity/wait_event_names.txt | 2 ++ 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/include/storage/lwlock.h b/src/include/storage/lwlock.h index 34169e5889e..0f345076f41 100644 --- a/src/include/storage/lwlock.h +++ b/src/include/storage/lwlock.h @@ -127,7 +127,8 @@ extern PGDLLIMPORT bool Trace_lwlocks; extern bool LWLockAcquire(LWLock *lock, LWLockMode mode); extern bool LWLockConditionalAcquire(LWLock *lock, LWLockMode mode); -extern bool LWLockAcquireOrWait(LWLock *lock, LWLockMode mode); +extern bool LWLockAcquireOrWait(LWLock *lock, LWLockMode mode, + uint32 wait_event_info); extern void LWLockRelease(LWLock *lock); extern void LWLockReleaseClearVar(LWLock *lock, uint64 *valptr, uint64 val); extern void LWLockReleaseAll(void); @@ -135,7 +136,8 @@ extern bool LWLockHeldByMe(LWLock *lock); extern bool LWLockAnyHeldByMe(LWLock *lock, int nlocks, size_t stride); extern bool LWLockHeldByMeInMode(LWLock *lock, LWLockMode mode); -extern bool LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval); +extern bool LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval, + uint32 wait_event_info); extern void LWLockUpdateVar(LWLock *lock, uint64 *valptr, uint64 val); extern Size LWLockShmemSize(void); diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 8b0710abe60..e406634c1cf 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -1498,7 +1498,8 @@ WaitXLogInsertionsToFinish(XLogRecPtr upto) */ if (LWLockWaitForVar(&WALInsertLocks[i].l.lock, &WALInsertLocks[i].l.insertingAt, - insertingat, &insertingat)) + insertingat, &insertingat, + WAIT_EVENT_WAL_WAIT_INSERT)) { /* the lock was free, so no insertion in progress */ insertingat = InvalidXLogRecPtr; @@ -2586,7 +2587,8 @@ XLogFlush(XLogRecPtr record) * helps to maintain a good rate of group committing when the system * is bottlenecked by the speed of fsyncing. */ - if (!LWLockAcquireOrWait(WALWriteLock, LW_EXCLUSIVE)) + if (!LWLockAcquireOrWait(WALWriteLock, LW_EXCLUSIVE, + WAIT_EVENT_WAL_WAIT_WRITE)) { /* * The lock is now free, but we didn't acquire it yet. Before we diff --git a/src/backend/storage/lmgr/lwlock.c b/src/backend/storage/lmgr/lwlock.c index 01d738f306b..549b061b533 100644 --- a/src/backend/storage/lmgr/lwlock.c +++ b/src/backend/storage/lmgr/lwlock.c @@ -1418,9 +1418,12 @@ LWLockConditionalAcquire(LWLock *lock, LWLockMode mode) * backends as a side-effect. Those other backends need to wait until the * flush finishes, but don't need to acquire the lock anymore. They can just * wake up, observe that their records have already been flushed, and return. + * + * As this is not used to *wait* for lwlock acquisition, the caller has to + * provide a wait event to be reported. */ bool -LWLockAcquireOrWait(LWLock *lock, LWLockMode mode) +LWLockAcquireOrWait(LWLock *lock, LWLockMode mode, uint32 wait_event_info) { PGPROC *proc = MyProc; bool mustwait; @@ -1470,7 +1473,7 @@ LWLockAcquireOrWait(LWLock *lock, LWLockMode mode) lwstats->block_count++; #endif - LWLockReportWaitStart(lock); + pgstat_report_wait_start(wait_event_info); if (TRACE_POSTGRESQL_LWLOCK_WAIT_START_ENABLED()) TRACE_POSTGRESQL_LWLOCK_WAIT_START(T_NAME(lock), mode); @@ -1492,7 +1495,7 @@ LWLockAcquireOrWait(LWLock *lock, LWLockMode mode) #endif if (TRACE_POSTGRESQL_LWLOCK_WAIT_DONE_ENABLED()) TRACE_POSTGRESQL_LWLOCK_WAIT_DONE(T_NAME(lock), mode); - LWLockReportWaitEnd(); + pgstat_report_wait_end(); LOG_LWDEBUG("LWLockAcquireOrWait", lock, "awakened"); } @@ -1605,9 +1608,13 @@ LWLockConflictsWithVar(LWLock *lock, * * Note: this function ignores shared lock holders; if the lock is held * in shared mode, returns 'true'. + * + * As this is not used to wait for lwlocks themselves, the caller has to + * provide a wait event to be reported. */ bool -LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval) +LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval, + uint32 wait_event_info) { PGPROC *proc = MyProc; int extraWaits = 0; @@ -1686,7 +1693,7 @@ LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval) lwstats->block_count++; #endif - LWLockReportWaitStart(lock); + pgstat_report_wait_start(wait_event_info); if (TRACE_POSTGRESQL_LWLOCK_WAIT_START_ENABLED()) TRACE_POSTGRESQL_LWLOCK_WAIT_START(T_NAME(lock), LW_EXCLUSIVE); @@ -1709,7 +1716,7 @@ LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval) if (TRACE_POSTGRESQL_LWLOCK_WAIT_DONE_ENABLED()) TRACE_POSTGRESQL_LWLOCK_WAIT_DONE(T_NAME(lock), LW_EXCLUSIVE); - LWLockReportWaitEnd(); + pgstat_report_wait_end(); LOG_LWDEBUG("LWLockWaitForVar", lock, "awakened"); diff --git a/src/backend/utils/activity/wait_event_names.txt b/src/backend/utils/activity/wait_event_names.txt index 3fabad96d96..a9358538721 100644 --- a/src/backend/utils/activity/wait_event_names.txt +++ b/src/backend/utils/activity/wait_event_names.txt @@ -141,6 +141,8 @@ WAIT_EVENT_SYNC_REP SyncRep "Waiting for confirmation from a remote server durin WAIT_EVENT_WAL_RECEIVER_EXIT WalReceiverExit "Waiting for the WAL receiver to exit." WAIT_EVENT_WAL_RECEIVER_WAIT_START WalReceiverWaitStart "Waiting for startup process to send initial data for streaming replication." WAIT_EVENT_XACT_GROUP_UPDATE XactGroupUpdate "Waiting for the group leader to update transaction status at end of a parallel operation." +WAIT_EVENT_WAL_WAIT_INSERT WALWaitInsert "Waiting for WAL record to be copied into buffers." +WAIT_EVENT_WAL_WAIT_WRITE WALWaitWrite "Waiting for WAL buffers to be written or flushed to disk." # -- 2.38.0 --hpprdef36fj7n3qo-- ^ permalink raw reply [nested|flat] 3+ messages in thread
* RE: [PoC] pg_upgrade: allow to upgrade publisher node @ 2023-09-06 05:39 Zhijie Hou (Fujitsu) <[email protected]> 0 siblings, 0 replies; 3+ messages in thread From: Zhijie Hou (Fujitsu) @ 2023-09-06 05:39 UTC (permalink / raw) To: Hayato Kuroda (Fujitsu) <[email protected]>; +Cc: Amit Kapila <[email protected]>; Peter Smith <[email protected]>; PostgreSQL Hackers <[email protected]>; Bruce Momjian <[email protected]>; Julien Rouhaud <[email protected]>; vignesh C <[email protected]>; Masahiko Sawada <[email protected]>; 'Dilip Kumar' <[email protected]> On Wednesday, September 6, 2023 11:18 AM Zhijie Hou (Fujitsu) <[email protected]> wrote: > > On Tuesday, September 5, 2023 3:35 PM Kuroda, Hayato/黒田 隼人 > <[email protected]> wrote: > > 4. > + * XXX: As mentioned in comments atop get_output_plugins(), we may > not > + * have to consider the uniqueness of entries. If so, we can use > + * count_old_cluster_logical_slots() instead of plugin_list_length(). > + */ > > I think check_loadable_libraries() will avoid loading the same library, so it seems > fine to skip duplicating the plugins and we can save some codes. Sorry, there is a typo, I mean "deduplicating" instead of " duplicating " > > ---- > /* Did the library name change? Probe it. */ > if (libnum == 0 || strcmp(lib, os_info.libraries[libnum - > 1].name) != 0) > ---- > > But if we think duplicating them would be better, I feel we could use the Here also " duplicating " should be "deduplicating". Best Regards, Hou zj ^ permalink raw reply [nested|flat] 3+ messages in thread
end of thread, other threads:[~2023-09-06 05:39 UTC | newest] Thread overview: 3+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2020-02-27 01:22 [PATCH v39 1/2] Avoid some calls to RelationGetRelationName Justin Pryzby <[email protected]> 2023-07-17 16:20 [PATCH v1] Caller specified wait events for LWLockWaitForVar(), LWLockAcquireOrWait() Andres Freund <[email protected]> 2023-09-06 05:39 RE: [PoC] pg_upgrade: allow to upgrade publisher node Zhijie Hou (Fujitsu) <[email protected]>
This inbox is served by agora; see mirroring instructions for how to clone and mirror all data and code used for this inbox