mirror of
https://github.com/postgres/postgres.git
synced 2025-11-09 06:21:09 +03:00
Add writeback to pg_stat_io
28e626bde0added the concept of IOOps but neglected to include writeback operations.ac8d53dae5added time spent doing these I/O operations. Without counting writeback, checkpointer write time in the log often differed substantially from that in pg_stat_io. To fix this, add IOOp IOOP_WRITEBACK and track writeback in pg_stat_io. Bumps catversion. Author: Melanie Plageman <melanieplageman@gmail.com> Reviewed-by: Kyotaro Horiguchi <horikyota.ntt@gmail.com> Reported-by: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/20230419172326.dhgyo4wrrhulovt6%40awork3.anarazel.de
This commit is contained in:
@@ -424,6 +424,14 @@ pgstat_tracks_io_op(BackendType bktype, IOObject io_object,
|
||||
bktype == B_CHECKPOINTER) && io_op == IOOP_EXTEND)
|
||||
return false;
|
||||
|
||||
/*
|
||||
* Temporary tables are not logged and thus do not require fsync'ing.
|
||||
* Writeback is not requested for temporary tables.
|
||||
*/
|
||||
if (io_object == IOOBJECT_TEMP_RELATION &&
|
||||
(io_op == IOOP_FSYNC || io_op == IOOP_WRITEBACK))
|
||||
return false;
|
||||
|
||||
/*
|
||||
* Some IOOps are not valid in certain IOContexts and some IOOps are only
|
||||
* valid in certain contexts.
|
||||
@@ -448,12 +456,6 @@ pgstat_tracks_io_op(BackendType bktype, IOObject io_object,
|
||||
if (strategy_io_context && io_op == IOOP_FSYNC)
|
||||
return false;
|
||||
|
||||
/*
|
||||
* Temporary tables are not logged and thus do not require fsync'ing.
|
||||
*/
|
||||
if (io_context == IOCONTEXT_NORMAL &&
|
||||
io_object == IOOBJECT_TEMP_RELATION && io_op == IOOP_FSYNC)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1268,6 +1268,8 @@ typedef enum io_stat_col
|
||||
IO_COL_READ_TIME,
|
||||
IO_COL_WRITES,
|
||||
IO_COL_WRITE_TIME,
|
||||
IO_COL_WRITEBACKS,
|
||||
IO_COL_WRITEBACK_TIME,
|
||||
IO_COL_EXTENDS,
|
||||
IO_COL_EXTEND_TIME,
|
||||
IO_COL_CONVERSION,
|
||||
@@ -1303,6 +1305,8 @@ pgstat_get_io_op_index(IOOp io_op)
|
||||
return IO_COL_REUSES;
|
||||
case IOOP_WRITE:
|
||||
return IO_COL_WRITES;
|
||||
case IOOP_WRITEBACK:
|
||||
return IO_COL_WRITEBACKS;
|
||||
}
|
||||
|
||||
elog(ERROR, "unrecognized IOOp value: %d", io_op);
|
||||
@@ -1322,6 +1326,7 @@ pgstat_get_io_time_index(IOOp io_op)
|
||||
{
|
||||
case IOOP_READ:
|
||||
case IOOP_WRITE:
|
||||
case IOOP_WRITEBACK:
|
||||
case IOOP_EXTEND:
|
||||
case IOOP_FSYNC:
|
||||
return pgstat_get_io_op_index(io_op) + 1;
|
||||
|
||||
Reference in New Issue
Block a user