0001-Add-new-wait-event-to-be-used-in-apply-worker.patch

application/octet-stream

Filename: 0001-Add-new-wait-event-to-be-used-in-apply-worker.patch
Type: application/octet-stream
Part: 0
Message: RE: Perform streaming logical transactions by background workers and parallel apply

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: format-patch
Series: patch 0001
Subject: Add a new wait state and use it when sending data in the apply worker.
File+
doc/src/sgml/monitoring.sgml 5 0
src/backend/replication/logical/applyparallelworker.c 2 1
src/backend/utils/activity/wait_event.c 3 0
src/include/utils/wait_event.h 1 0
From 8415be715926d3a345243f7b85644b2d695bee8e Mon Sep 17 00:00:00 2001
From: Hou Zhijie <houzj.fnst@cn.fujitsu.com>
Date: Fri, 10 Feb 2023 10:04:39 +0800
Subject: [PATCH] Add a new wait state and use it when sending data in the apply worker.

d9d7fe6 reuse existing wait event when sending data in apply worker. But we
should have invent a new wait state if we are waiting at a new place, so fix
this.

---
 doc/src/sgml/monitoring.sgml                          | 5 +++++
 src/backend/replication/logical/applyparallelworker.c | 3 ++-
 src/backend/utils/activity/wait_event.c               | 3 +++
 src/include/utils/wait_event.h                        | 1 +
 4 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml
index 1756f1a..0160a0c 100644
--- a/doc/src/sgml/monitoring.sgml
+++ b/doc/src/sgml/monitoring.sgml
@@ -1735,6 +1735,11 @@ postgres   27093  0.0  0.0  30096  2752 ?        Ss   11:34   0:00 postgres: ser
        tuples into new buckets.</entry>
      </row>
      <row>
+      <entry><literal>LogicalParallelApplySendData</literal></entry>
+      <entry>Waiting for a logical replication leader apply process to send
+       data to a parallel apply process.</entry>
+     </row>
+     <row>
       <entry><literal>LogicalParallelApplyStateChange</literal></entry>
       <entry>Waiting for a logical replication parallel apply process to change
        state.</entry>
diff --git a/src/backend/replication/logical/applyparallelworker.c b/src/backend/replication/logical/applyparallelworker.c
index da437e0..0bd0abe 100644
--- a/src/backend/replication/logical/applyparallelworker.c
+++ b/src/backend/replication/logical/applyparallelworker.c
@@ -1181,7 +1181,8 @@ pa_send_data(ParallelApplyWorkerInfo *winfo, Size nbytes, const void *data)
 		/* Wait before retrying. */
 		rc = WaitLatch(MyLatch,
 					   WL_LATCH_SET | WL_TIMEOUT | WL_EXIT_ON_PM_DEATH,
-					   SHM_SEND_RETRY_INTERVAL_MS, WAIT_EVENT_MQ_SEND);
+					   SHM_SEND_RETRY_INTERVAL_MS,
+					   WAIT_EVENT_LOGICAL_PARALLEL_APPLY_SEND_DATA);
 
 		if (rc & WL_LATCH_SET)
 		{
diff --git a/src/backend/utils/activity/wait_event.c b/src/backend/utils/activity/wait_event.c
index 6e45992..ce17419 100644
--- a/src/backend/utils/activity/wait_event.c
+++ b/src/backend/utils/activity/wait_event.c
@@ -391,6 +391,9 @@ pgstat_get_wait_ipc(WaitEventIPC w)
 		case WAIT_EVENT_HASH_GROW_BUCKETS_REINSERT:
 			event_name = "HashGrowBucketsReinsert";
 			break;
+		case WAIT_EVENT_LOGICAL_PARALLEL_APPLY_SEND_DATA:
+			event_name = "LogicalParallelApplySendData";
+			break;
 		case WAIT_EVENT_LOGICAL_PARALLEL_APPLY_STATE_CHANGE:
 			event_name = "LogicalParallelApplyStateChange";
 			break;
diff --git a/src/include/utils/wait_event.h b/src/include/utils/wait_event.h
index 6cacd6e..b7c6db9 100644
--- a/src/include/utils/wait_event.h
+++ b/src/include/utils/wait_event.h
@@ -106,6 +106,7 @@ typedef enum
 	WAIT_EVENT_HASH_GROW_BUCKETS_ALLOCATE,
 	WAIT_EVENT_HASH_GROW_BUCKETS_ELECT,
 	WAIT_EVENT_HASH_GROW_BUCKETS_REINSERT,
+	WAIT_EVENT_LOGICAL_PARALLEL_APPLY_SEND_DATA,
 	WAIT_EVENT_LOGICAL_PARALLEL_APPLY_STATE_CHANGE,
 	WAIT_EVENT_LOGICAL_SYNC_DATA,
 	WAIT_EVENT_LOGICAL_SYNC_STATE_CHANGE,
-- 
2.7.2.windows.1