my-ship-it opened a new issue, #1834:
URL: https://github.com/apache/cloudberry/issues/1834

   ## Summary
   
   `pg_stat_io` (inherited from the PostgreSQL 16 merge) gives per-backend,
   per-IO-object, per-context I/O statistics, and Cloudberry already exposes
   cluster-wide rollups via `gp_stat_io` and `gp_stat_io_summary`. However, the
   underlying counters are only incremented on the **shared-buffer-manager 
path**
   (`bufmgr.c`, `localbuf.c`, `md.c`). **Append-Optimized (AO) and
   Append-Optimized Column-Oriented (AOCO) table I/O is not counted at all.**
   
   Because AO/AOCO storage bypasses the shared buffer pool and uses its own
   `BufferedRead` / `BufferedAppend` layer, reads, writes, and extends against
   these tables are invisible to `pg_stat_io`. For a workload built primarily on
   AO/AOCO tables — which is common in Cloudberry analytics deployments — the 
view
   significantly under-reports actual physical I/O.
   
   ## Current behavior
   
   - `grep -rn pgstat_count_io_op src/backend/access/appendonly 
src/backend/access/aocs`
     returns **no matches** — the AO/AOCO read/write paths contain no
     instrumentation.
   - I/O counters are populated only from `bufmgr.c`, `localbuf.c`, and `md.c`,
     i.e. the heap / index / temp-relation paths inherited from PostgreSQL.
   - As a result, `pg_stat_io` (and `gp_stat_io` / `gp_stat_io_summary`) reflect
     heap/index/catalog I/O but omit the storage format that defines Cloudberry.
   
   ## Expected behavior
   
   I/O performed by AO/AOCO tables should be reflected in `pg_stat_io`, so that
   operators can observe physical I/O for the storage types they actually use.
   
   ## Proposed approach (for discussion)
   
   Instrument the AO/AOCO buffered I/O layer with `pgstat_count_io_op[_time]()`
   calls, analogous to the existing `md.c` instrumentation:
   
   - **Reads** — in the AO/AOCO `BufferedRead` path (`bufmgr` equivalent for 
AO),
     count `IOOP_READ`.
   - **Writes / extends** — in the `BufferedAppend` / segment-file extend path,
     count `IOOP_WRITE` and `IOOP_EXTEND`.
   - **fsync** — where AO segment files are flushed (`register_dirty_segment` /
     `mdimmedsync` equivalents).
   
   Open design questions:
   
   1. **IOOBJECT classification.** AO/AOCO data does not live in shared buffers,
      so `IOOBJECT_RELATION` (which today implies buffer-pool involvement) may 
be
      misleading. Options: reuse `IOOBJECT_RELATION`, or add a new IO object
      (e.g. `IOOBJECT_AO_RELATION`) to keep AO I/O distinguishable. Adding an 
enum
      value changes the fixed-size shared stats struct and the
      `pg_stat_io` / `pg_stat_get_io()` output shape, so it needs care.
   2. **IOCONTEXT mapping.** AO has no shared-buffer eviction/reuse semantics, 
so
      `hits` / `evictions` / `reuses` are not meaningful; only
      `reads` / `writes` / `extends` / `fsyncs` would be populated. Decide how 
the
      non-applicable columns are reported (zero vs. NULL).
   3. **`op_bytes`.** AO varblocks are variable-sized rather than 
`BLCKSZ`-aligned,
      so the per-op byte accounting differs from the heap path.
   
   ## Impact / motivation
   
   - Observability parity: AO/AOCO is the primary storage format for many
     Cloudberry analytics workloads, yet is the one format `pg_stat_io` can't 
see.
   - Capacity planning & troubleshooting: physical read/write volume for AO 
tables
     is currently only obtainable indirectly.
   
   ## Notes
   
   - Affects: `main`.
   - Related existing surfaces: `pg_stat_io` view (`system_views.sql`),
     `gp_stat_io` / `gp_stat_io_summary` (`system_views_gp*.sql`),
     `pgstat_io.c`, `pgstat.h` IO enums.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to