mirror of
https://github.com/postgres/postgres.git
synced 2025-07-26 01:22:12 +03:00
Track statistics for spilling of changes from ReorderBuffer.
This adds the statistics about transactions spilled to disk from ReorderBuffer. Users can query the pg_stat_replication_slots view to check these stats and call pg_stat_reset_replication_slot to reset the stats of a particular slot. Users can pass NULL in pg_stat_reset_replication_slot to reset stats of all the slots. This commit extends the statistics collector to track this information about slots. Author: Sawada Masahiko and Amit Kapila Reviewed-by: Amit Kapila and Dilip Kumar Discussion: https://postgr.es/m/CA+fd4k5_pPAYRTDrO2PbtTOe0eHQpBvuqmCr8ic39uTNmR49Eg@mail.gmail.com
This commit is contained in:
@ -162,9 +162,10 @@ typedef struct ReorderBufferChange
|
||||
#define RBTXN_HAS_CATALOG_CHANGES 0x0001
|
||||
#define RBTXN_IS_SUBXACT 0x0002
|
||||
#define RBTXN_IS_SERIALIZED 0x0004
|
||||
#define RBTXN_IS_STREAMED 0x0008
|
||||
#define RBTXN_HAS_TOAST_INSERT 0x0010
|
||||
#define RBTXN_HAS_SPEC_INSERT 0x0020
|
||||
#define RBTXN_IS_SERIALIZED_CLEAR 0x0008
|
||||
#define RBTXN_IS_STREAMED 0x0010
|
||||
#define RBTXN_HAS_TOAST_INSERT 0x0020
|
||||
#define RBTXN_HAS_SPEC_INSERT 0x0040
|
||||
|
||||
/* Does the transaction have catalog changes? */
|
||||
#define rbtxn_has_catalog_changes(txn) \
|
||||
@ -184,6 +185,12 @@ typedef struct ReorderBufferChange
|
||||
((txn)->txn_flags & RBTXN_IS_SERIALIZED) != 0 \
|
||||
)
|
||||
|
||||
/* Has this transaction ever been spilled to disk? */
|
||||
#define rbtxn_is_serialized_clear(txn) \
|
||||
( \
|
||||
((txn)->txn_flags & RBTXN_IS_SERIALIZED_CLEAR) != 0 \
|
||||
)
|
||||
|
||||
/* This transaction's changes has toast insert, without main table insert. */
|
||||
#define rbtxn_has_toast_insert(txn) \
|
||||
( \
|
||||
@ -525,6 +532,17 @@ struct ReorderBuffer
|
||||
|
||||
/* memory accounting */
|
||||
Size size;
|
||||
|
||||
/*
|
||||
* Statistics about transactions spilled to disk.
|
||||
*
|
||||
* A single transaction may be spilled repeatedly, which is why we keep
|
||||
* two different counters. For spilling, the transaction counter includes
|
||||
* both toplevel transactions and subtransactions.
|
||||
*/
|
||||
int64 spillTxns; /* number of transactions spilled to disk */
|
||||
int64 spillCount; /* spill-to-disk invocation counter */
|
||||
int64 spillBytes; /* amount of data spilled to disk */
|
||||
};
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user