diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 405c09c949..b5c0bd78ac 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -2462,38 +2462,6 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i Send time of last reply message received from standby server - - - - spill_txns bigint - - - Number of transactions spilled to disk after the memory used by - logical decoding exceeds logical_decoding_work_mem. The - counter gets incremented both for top-level transactions and - subtransactions. - - - - - - spill_count bigint - - - Number of times transactions were spilled to disk. Transactions - may get spilled repeatedly, and this counter gets incremented on every - such invocation. - - - - - - spill_bytes bigint - - - Amount of decoded transaction data spilled to disk. - - @@ -2518,12 +2486,6 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i mechanism will simply display NULL lag. - - Tracking of spilled transactions works only for logical replication. In - physical replication, the tracking mechanism will display 0 for spilled - statistics. - - The reported lag times are not predictions of how long it will take for diff --git a/doc/src/sgml/release-13.sgml b/doc/src/sgml/release-13.sgml index 7395edb5ba..b893b7d6c3 100644 --- a/doc/src/sgml/release-13.sgml +++ b/doc/src/sgml/release-13.sgml @@ -983,20 +983,6 @@ Author: Alvaro Herrera - - - Add columns to the pg_stat_replication - system view to report how much logical decoding information has been - spilled to disk (Tomas Vondra) - - - - - diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index d1177c6b57..76154a8d5f 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -785,10 +785,7 @@ CREATE VIEW pg_stat_replication AS W.replay_lag, W.sync_priority, W.sync_state, - W.reply_time, - W.spill_txns, - W.spill_count, - W.spill_bytes + W.reply_time FROM pg_stat_get_activity(NULL) AS S JOIN pg_stat_get_wal_senders() AS W ON (S.pid = W.pid) LEFT JOIN pg_authid AS U ON (S.usesysid = U.oid); diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index 7afa2271bd..5251932669 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -317,10 +317,6 @@ ReorderBufferAllocate(void) buffer->outbufsize = 0; buffer->size = 0; - buffer->spillCount = 0; - buffer->spillTxns = 0; - buffer->spillBytes = 0; - buffer->current_restart_decoding_lsn = InvalidXLogRecPtr; dlist_init(&buffer->toplevel_by_lsn); @@ -2418,7 +2414,6 @@ ReorderBufferSerializeTXN(ReorderBuffer *rb, ReorderBufferTXN *txn) int fd = -1; XLogSegNo curOpenSegNo = 0; Size spilled = 0; - Size size = txn->size; elog(DEBUG2, "spill %u changes in XID %u to disk", (uint32) txn->nentries_mem, txn->xid); @@ -2477,13 +2472,6 @@ ReorderBufferSerializeTXN(ReorderBuffer *rb, ReorderBufferTXN *txn) spilled++; } - /* update the statistics */ - rb->spillCount += 1; - rb->spillBytes += size; - - /* Don't consider already serialized transactions. */ - rb->spillTxns += rbtxn_is_serialized(txn) ? 0 : 1; - Assert(spilled == txn->nentries_mem); Assert(dlist_is_empty(&txn->changes)); txn->nentries_mem = 0; diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index e2477c47e0..136e9c6585 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -254,7 +254,6 @@ static bool TransactionIdInRecentPast(TransactionId xid, uint32 epoch); static void WalSndSegmentOpen(XLogReaderState *state, XLogSegNo nextSegNo, TimeLineID *tli_p); -static void UpdateSpillStats(LogicalDecodingContext *ctx); /* Initialize walsender process before entering the main command loop */ @@ -1348,8 +1347,7 @@ WalSndWriteData(LogicalDecodingContext *ctx, XLogRecPtr lsn, TransactionId xid, /* * LogicalDecodingContext 'update_progress' callback. * - * Write the current position to the lag tracker (see XLogSendPhysical), - * and update the spill statistics. + * Write the current position to the lag tracker (see XLogSendPhysical). */ static void WalSndUpdateProgress(LogicalDecodingContext *ctx, XLogRecPtr lsn, TransactionId xid) @@ -1368,11 +1366,6 @@ WalSndUpdateProgress(LogicalDecodingContext *ctx, XLogRecPtr lsn, TransactionId LagTrackerWrite(lsn, now); sendTime = now; - - /* - * Update statistics about transactions that spilled to disk. - */ - UpdateSpillStats(ctx); } /* @@ -2418,9 +2411,6 @@ InitWalSenderSlot(void) walsnd->sync_standby_priority = 0; walsnd->latch = &MyProc->procLatch; walsnd->replyTime = 0; - walsnd->spillTxns = 0; - walsnd->spillCount = 0; - walsnd->spillBytes = 0; SpinLockRelease(&walsnd->mutex); /* don't need the lock anymore */ MyWalSnd = (WalSnd *) walsnd; @@ -3256,7 +3246,7 @@ offset_to_interval(TimeOffset offset) Datum pg_stat_get_wal_senders(PG_FUNCTION_ARGS) { -#define PG_STAT_GET_WAL_SENDERS_COLS 15 +#define PG_STAT_GET_WAL_SENDERS_COLS 12 ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo; TupleDesc tupdesc; Tuplestorestate *tupstore; @@ -3310,9 +3300,6 @@ pg_stat_get_wal_senders(PG_FUNCTION_ARGS) int pid; WalSndState state; TimestampTz replyTime; - int64 spillTxns; - int64 spillCount; - int64 spillBytes; bool is_sync_standby; Datum values[PG_STAT_GET_WAL_SENDERS_COLS]; bool nulls[PG_STAT_GET_WAL_SENDERS_COLS]; @@ -3336,9 +3323,6 @@ pg_stat_get_wal_senders(PG_FUNCTION_ARGS) applyLag = walsnd->applyLag; priority = walsnd->sync_standby_priority; replyTime = walsnd->replyTime; - spillTxns = walsnd->spillTxns; - spillCount = walsnd->spillCount; - spillBytes = walsnd->spillBytes; SpinLockRelease(&walsnd->mutex); /* @@ -3436,11 +3420,6 @@ pg_stat_get_wal_senders(PG_FUNCTION_ARGS) nulls[11] = true; else values[11] = TimestampTzGetDatum(replyTime); - - /* spill to disk */ - values[12] = Int64GetDatum(spillTxns); - values[13] = Int64GetDatum(spillCount); - values[14] = Int64GetDatum(spillBytes); } tuplestore_putvalues(tupstore, tupdesc, values, nulls); @@ -3677,21 +3656,3 @@ LagTrackerRead(int head, XLogRecPtr lsn, TimestampTz now) Assert(time != 0); return now - time; } - -static void -UpdateSpillStats(LogicalDecodingContext *ctx) -{ - ReorderBuffer *rb = ctx->reorder; - - elog(DEBUG2, "UpdateSpillStats: updating stats %p %lld %lld %lld", - rb, - (long long) rb->spillTxns, - (long long) rb->spillCount, - (long long) rb->spillBytes); - - SpinLockAcquire(&MyWalSnd->mutex); - MyWalSnd->spillTxns = rb->spillTxns; - MyWalSnd->spillCount = rb->spillCount; - MyWalSnd->spillBytes = rb->spillBytes; - SpinLockRelease(&MyWalSnd->mutex); -} diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 1b35510d46..6b3aa7c006 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202007071 +#define CATALOG_VERSION_NO 202007131 #endif diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 4661919773..298ff4c4d1 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -5237,9 +5237,9 @@ proname => 'pg_stat_get_wal_senders', prorows => '10', proisstrict => 'f', proretset => 't', provolatile => 's', proparallel => 'r', prorettype => 'record', proargtypes => '', - proallargtypes => '{int4,text,pg_lsn,pg_lsn,pg_lsn,pg_lsn,interval,interval,interval,int4,text,timestamptz,int8,int8,int8}', - proargmodes => '{o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}', - proargnames => '{pid,state,sent_lsn,write_lsn,flush_lsn,replay_lsn,write_lag,flush_lag,replay_lag,sync_priority,sync_state,reply_time,spill_txns,spill_count,spill_bytes}', + proallargtypes => '{int4,text,pg_lsn,pg_lsn,pg_lsn,pg_lsn,interval,interval,interval,int4,text,timestamptz}', + proargmodes => '{o,o,o,o,o,o,o,o,o,o,o,o}', + proargnames => '{pid,state,sent_lsn,write_lsn,flush_lsn,replay_lsn,write_lag,flush_lag,replay_lag,sync_priority,sync_state,reply_time}', prosrc => 'pg_stat_get_wal_senders' }, { oid => '3317', descr => 'statistics: information about WAL receiver', proname => 'pg_stat_get_wal_receiver', proisstrict => 'f', provolatile => 's', diff --git a/src/include/replication/reorderbuffer.h b/src/include/replication/reorderbuffer.h index 626ecf4dc9..019bd382de 100644 --- a/src/include/replication/reorderbuffer.h +++ b/src/include/replication/reorderbuffer.h @@ -413,17 +413,6 @@ 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 spillCount; /* spill-to-disk invocation counter */ - int64 spillTxns; /* number of transactions spilled to disk */ - int64 spillBytes; /* amount of data spilled to disk */ }; diff --git a/src/include/replication/walsender_private.h b/src/include/replication/walsender_private.h index 734acec2a4..509856c057 100644 --- a/src/include/replication/walsender_private.h +++ b/src/include/replication/walsender_private.h @@ -78,11 +78,6 @@ typedef struct WalSnd * Timestamp of the last message received from standby. */ TimestampTz replyTime; - - /* Statistics for transactions spilled to disk. */ - int64 spillTxns; - int64 spillCount; - int64 spillBytes; } WalSnd; extern WalSnd *MyWalSnd; diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index 93bb2159ca..fa436f2caa 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -2002,12 +2002,9 @@ pg_stat_replication| SELECT s.pid, w.replay_lag, w.sync_priority, w.sync_state, - w.reply_time, - w.spill_txns, - w.spill_count, - w.spill_bytes + w.reply_time FROM ((pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, sslcompression, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid) - JOIN pg_stat_get_wal_senders() w(pid, state, sent_lsn, write_lsn, flush_lsn, replay_lsn, write_lag, flush_lag, replay_lag, sync_priority, sync_state, reply_time, spill_txns, spill_count, spill_bytes) ON ((s.pid = w.pid))) + JOIN pg_stat_get_wal_senders() w(pid, state, sent_lsn, write_lsn, flush_lsn, replay_lsn, write_lag, flush_lag, replay_lag, sync_priority, sync_state, reply_time) ON ((s.pid = w.pid))) LEFT JOIN pg_authid u ON ((s.usesysid = u.oid))); pg_stat_slru| SELECT s.name, s.blks_zeroed,