mirror of
https://github.com/postgres/postgres.git
synced 2025-06-26 12:21:12 +03:00
Improve logging of autovacuum I/O activity
This adds some I/O stats to the logging of autovacuum (when the operation takes long enough that log_autovacuum_min_duration causes it to be logged), so that it is easier to tune. Notably, it adds buffer I/O counts (hits, misses, dirtied) and read and write rate. Authors: Greg Smith and Noah Misch
This commit is contained in:
@ -340,6 +340,7 @@ ReadBuffer_common(SMgrRelation smgr, char relpersistence, ForkNumber forkNum,
|
||||
{
|
||||
/* Just need to update stats before we exit */
|
||||
*hit = true;
|
||||
VacuumPageHit++;
|
||||
|
||||
if (VacuumCostActive)
|
||||
VacuumCostBalance += VacuumCostPageHit;
|
||||
@ -471,6 +472,7 @@ ReadBuffer_common(SMgrRelation smgr, char relpersistence, ForkNumber forkNum,
|
||||
TerminateBufferIO(bufHdr, false, BM_VALID);
|
||||
}
|
||||
|
||||
VacuumPageMiss++;
|
||||
if (VacuumCostActive)
|
||||
VacuumCostBalance += VacuumCostPageMiss;
|
||||
|
||||
@ -972,10 +974,14 @@ MarkBufferDirty(Buffer buffer)
|
||||
Assert(bufHdr->refcount > 0);
|
||||
|
||||
/*
|
||||
* If the buffer was not dirty already, do vacuum cost accounting.
|
||||
* If the buffer was not dirty already, do vacuum accounting.
|
||||
*/
|
||||
if (!(bufHdr->flags & BM_DIRTY) && VacuumCostActive)
|
||||
VacuumCostBalance += VacuumCostPageDirty;
|
||||
if (!(bufHdr->flags & BM_DIRTY))
|
||||
{
|
||||
VacuumPageDirty++;
|
||||
if (VacuumCostActive)
|
||||
VacuumCostBalance += VacuumCostPageDirty;
|
||||
}
|
||||
|
||||
bufHdr->flags |= (BM_DIRTY | BM_JUST_DIRTIED);
|
||||
|
||||
@ -2337,8 +2343,12 @@ SetBufferCommitInfoNeedsSave(Buffer buffer)
|
||||
{
|
||||
LockBufHdr(bufHdr);
|
||||
Assert(bufHdr->refcount > 0);
|
||||
if (!(bufHdr->flags & BM_DIRTY) && VacuumCostActive)
|
||||
VacuumCostBalance += VacuumCostPageDirty;
|
||||
if (!(bufHdr->flags & BM_DIRTY))
|
||||
{
|
||||
VacuumPageDirty++;
|
||||
if (VacuumCostActive)
|
||||
VacuumCostBalance += VacuumCostPageDirty;
|
||||
}
|
||||
bufHdr->flags |= (BM_DIRTY | BM_JUST_DIRTIED);
|
||||
UnlockBufHdr(bufHdr);
|
||||
}
|
||||
|
Reference in New Issue
Block a user