Commit c55de5e5 authored by Michael Paquier's avatar Michael Paquier

Add wait event for fsync of WAL segments

This has been visibly a forgotten spot in the first implementation of
wait events for I/O added by 249cf070, and what has been missing is a
fsync call for WAL segments which is a wrapper reacting on the value of
GUC wal_sync_method.

Reported-by: Konstantin Knizhnik
Author: Konstantin Knizhnik
Reviewed-by: Craig Ringer, Michael Paquier
Discussion: https://postgr.es/m/4a243897-0ad8-f471-aa40-242591f2476e@postgrespro.ru
parent c072e803
...@@ -1674,6 +1674,10 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser ...@@ -1674,6 +1674,10 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser
<entry><literal>WALSenderTimelineHistoryRead</literal></entry> <entry><literal>WALSenderTimelineHistoryRead</literal></entry>
<entry>Waiting for a read from a timeline history file during walsender timeline command.</entry> <entry>Waiting for a read from a timeline history file during walsender timeline command.</entry>
</row> </row>
<row>
<entry><literal>WALSync</literal></entry>
<entry>Waiting for a WAL file to reach stable storage.</entry>
</row>
<row> <row>
<entry><literal>WALSyncMethodAssign</literal></entry> <entry><literal>WALSyncMethodAssign</literal></entry>
<entry>Waiting for data to reach stable storage while assigning WAL sync method.</entry> <entry>Waiting for data to reach stable storage while assigning WAL sync method.</entry>
......
...@@ -10156,6 +10156,7 @@ assign_xlog_sync_method(int new_sync_method, void *extra) ...@@ -10156,6 +10156,7 @@ assign_xlog_sync_method(int new_sync_method, void *extra)
void void
issue_xlog_fsync(int fd, XLogSegNo segno) issue_xlog_fsync(int fd, XLogSegNo segno)
{ {
pgstat_report_wait_start(WAIT_EVENT_WAL_SYNC);
switch (sync_method) switch (sync_method)
{ {
case SYNC_METHOD_FSYNC: case SYNC_METHOD_FSYNC:
...@@ -10191,6 +10192,7 @@ issue_xlog_fsync(int fd, XLogSegNo segno) ...@@ -10191,6 +10192,7 @@ issue_xlog_fsync(int fd, XLogSegNo segno)
elog(PANIC, "unrecognized wal_sync_method: %d", sync_method); elog(PANIC, "unrecognized wal_sync_method: %d", sync_method);
break; break;
} }
pgstat_report_wait_end();
} }
/* /*
......
...@@ -3925,6 +3925,9 @@ pgstat_get_wait_io(WaitEventIO w) ...@@ -3925,6 +3925,9 @@ pgstat_get_wait_io(WaitEventIO w)
case WAIT_EVENT_WAL_READ: case WAIT_EVENT_WAL_READ:
event_name = "WALRead"; event_name = "WALRead";
break; break;
case WAIT_EVENT_WAL_SYNC:
event_name = "WALSync";
break;
case WAIT_EVENT_WAL_SYNC_METHOD_ASSIGN: case WAIT_EVENT_WAL_SYNC_METHOD_ASSIGN:
event_name = "WALSyncMethodAssign"; event_name = "WALSyncMethodAssign";
break; break;
......
...@@ -921,6 +921,7 @@ typedef enum ...@@ -921,6 +921,7 @@ typedef enum
WAIT_EVENT_WAL_INIT_SYNC, WAIT_EVENT_WAL_INIT_SYNC,
WAIT_EVENT_WAL_INIT_WRITE, WAIT_EVENT_WAL_INIT_WRITE,
WAIT_EVENT_WAL_READ, WAIT_EVENT_WAL_READ,
WAIT_EVENT_WAL_SYNC,
WAIT_EVENT_WAL_SYNC_METHOD_ASSIGN, WAIT_EVENT_WAL_SYNC_METHOD_ASSIGN,
WAIT_EVENT_WAL_WRITE WAIT_EVENT_WAL_WRITE
} WaitEventIO; } WaitEventIO;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment