mirror of
https://github.com/postgres/postgres.git
synced 2025-04-24 10:47:04 +03:00
Fix pg_xlogdump's calculation of full-page image data.
The old formula was completely bogus with the new WAL record format.
This commit is contained in:
parent
9a94629833
commit
ebc2b681b8
@ -351,14 +351,29 @@ XLogDumpCountRecord(XLogDumpConfig *config, XLogDumpStats *stats,
|
|||||||
uint8 recid;
|
uint8 recid;
|
||||||
uint32 rec_len;
|
uint32 rec_len;
|
||||||
uint32 fpi_len;
|
uint32 fpi_len;
|
||||||
|
int block_id;
|
||||||
|
|
||||||
stats->count++;
|
stats->count++;
|
||||||
|
|
||||||
/* Update per-rmgr statistics */
|
|
||||||
|
|
||||||
rmid = XLogRecGetRmid(record);
|
rmid = XLogRecGetRmid(record);
|
||||||
rec_len = XLogRecGetDataLen(record) + SizeOfXLogRecord;
|
rec_len = XLogRecGetDataLen(record) + SizeOfXLogRecord;
|
||||||
fpi_len = record->decoded_record->xl_tot_len - rec_len;
|
|
||||||
|
/*
|
||||||
|
* Calculate the amount of FPI data in the record. Each backup block
|
||||||
|
* takes up BLCKSZ bytes, minus the "hole" length.
|
||||||
|
*
|
||||||
|
* XXX: We peek into xlogreader's private decoded backup blocks for the
|
||||||
|
* hole_length. It doesn't seem worth it to add an accessor macro for
|
||||||
|
* this.
|
||||||
|
*/
|
||||||
|
fpi_len = 0;
|
||||||
|
for (block_id = 0; block_id <= record->max_block_id; block_id++)
|
||||||
|
{
|
||||||
|
if (XLogRecHasBlockImage(record, block_id))
|
||||||
|
fpi_len += BLCKSZ - record->blocks[block_id].hole_length;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Update per-rmgr statistics */
|
||||||
|
|
||||||
stats->rmgr_stats[rmid].count++;
|
stats->rmgr_stats[rmid].count++;
|
||||||
stats->rmgr_stats[rmid].rec_len += rec_len;
|
stats->rmgr_stats[rmid].rec_len += rec_len;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user