mirror of
https://github.com/postgres/postgres.git
synced 2025-06-29 10:41:53 +03:00
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 249cf07
, 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
This commit is contained in:
@ -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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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
|
|||||||
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;
|
||||||
|
Reference in New Issue
Block a user