60{
62 nblocks,
63 blkno;
67
70
72 scanned = 0;
73
74 for (blkno = 0; blkno < nblocks; blkno++)
75 {
79 maxoff;
81
83
84
85
86
87
89 {
91 stat->tuple_len += BLCKSZ - freespace;
92 stat->free_space += freespace;
93 continue;
94 }
95
98
100
102
104
105
106 scanned++;
107
109 {
111 continue;
112 }
113
114
115
116
117
118
120
122 offnum <= maxoff;
124 {
127
129
132 {
133 continue;
134 }
135
137
139
143
144
145
146
147
148
149
151 {
156 break;
161 stat->dead_tuple_count++;
162 break;
163 default:
164 elog(
ERROR,
"unexpected HeapTupleSatisfiesVacuum result");
165 break;
166 }
167 }
168
170 }
171
173
174
175
176
177
178
179
180
181
184
185
187
188
189
190
191 if (nblocks != 0)
192 {
193 stat->scanned_percent = 100.0 * scanned / nblocks;
194 stat->tuple_percent = 100.0 *
stat->tuple_len /
stat->table_len;
195 stat->dead_tuple_percent = 100.0 *
stat->dead_tuple_len /
stat->table_len;
196 stat->free_percent = 100.0 *
stat->free_space /
stat->table_len;
197 }
198
200 {
203 }
204}
void ReleaseBuffer(Buffer buffer)
void UnlockReleaseBuffer(Buffer buffer)
void LockBuffer(Buffer buffer, int mode)
Buffer ReadBufferExtended(Relation reln, ForkNumber forkNum, BlockNumber blockNum, ReadBufferMode mode, BufferAccessStrategy strategy)
#define BUFFER_LOCK_SHARE
#define RelationGetNumberOfBlocks(reln)
static Page BufferGetPage(Buffer buffer)
static bool BufferIsValid(Buffer bufnum)
Size PageGetExactFreeSpace(const PageData *page)
static bool PageIsEmpty(const PageData *page)
static Item PageGetItem(const PageData *page, const ItemIdData *itemId)
static bool PageIsNew(const PageData *page)
static ItemId PageGetItemId(Page page, OffsetNumber offsetNumber)
static OffsetNumber PageGetMaxOffsetNumber(const PageData *page)
BufferAccessStrategy GetAccessStrategy(BufferAccessStrategyType btype)
Size GetRecordedFreeSpace(Relation rel, BlockNumber heapBlk)
Assert(PointerIsAligned(start, uint64))
@ HEAPTUPLE_RECENTLY_DEAD
@ HEAPTUPLE_INSERT_IN_PROGRESS
@ HEAPTUPLE_DELETE_IN_PROGRESS
HTSV_Result HeapTupleSatisfiesVacuum(HeapTuple htup, TransactionId OldestXmin, Buffer buffer)
HeapTupleHeaderData * HeapTupleHeader
#define ItemIdGetLength(itemId)
#define ItemIdIsNormal(itemId)
#define ItemIdIsDead(itemId)
#define ItemIdIsUsed(itemId)
#define ItemIdIsRedirected(itemId)
static void ItemPointerSet(ItemPointerData *pointer, BlockNumber blockNumber, OffsetNumber offNum)
#define CHECK_FOR_INTERRUPTS()
#define OffsetNumberNext(offsetNumber)
#define FirstOffsetNumber
TransactionId GetOldestNonRemovableTransactionId(Relation rel)
#define RelationGetRelid(relation)
double vac_estimate_reltuples(Relation relation, BlockNumber total_pages, BlockNumber scanned_pages, double scanned_tuples)
#define VM_ALL_VISIBLE(r, b, v)