Count write times when extending relation files for shared buffers
authorMichael Paquier
Wed, 18 Oct 2023 05:54:33 +0000 (14:54 +0900)
committerMichael Paquier
Wed, 18 Oct 2023 05:54:33 +0000 (14:54 +0900)
Relation files extended by multiple blocks at a time have been counting
the number of blocks written, but forgot to increment the write time in
this case, as single-block write and relation extension are treated as
two different I/O operations in the shared stats: IOOP_EXTEND vs
IOOP_WRITE.  In this case IOOP_EXTEND was forgotten for normal
(non-temporary) relations, still the number of blocks written was
incremented according to the relation extend done.

Write times are tracked when track_io_timing is enabled, which is not
the case by default.

Author: Nazir Bilal Yavuz
Reviewed-by: Robert Haas, Melanie Plageman
Discussion: https://postgr.es/m/CAN55FZ19Ss279mZuqGbuUNxka0iPbLgYuOQXqAKewrjNrp27VA@mail.gmail.com
Backpatch-through: 16

src/backend/utils/activity/pgstat_io.c

index eb7d35d4225a62752faa228c4a351d27fc7dce9e..8ec8670199720083a5cd02ac8b0d2a8557109ada 100644 (file)
@@ -119,7 +119,7 @@ pgstat_count_io_op_time(IOObject io_object, IOContext io_context, IOOp io_op,
        INSTR_TIME_SET_CURRENT(io_time);
        INSTR_TIME_SUBTRACT(io_time, start_time);
 
-       if (io_op == IOOP_WRITE)
+       if (io_op == IOOP_WRITE || io_op == IOOP_EXTEND)
        {
            pgstat_count_buffer_write_time(INSTR_TIME_GET_MICROSEC(io_time));
            if (io_object == IOOBJECT_RELATION)