Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit1c453cf

Browse files
Show more detail in nbtree rmgr descriptions.
Show a detailed description of the page offset number arrays that appearin certain nbtree WAL records.Also brings nbtree desc routines in line with the guidelines establishedby recent commit7d8219a.Author: Melanie Plageman <melanieplageman@gmail.com>Reviewed-By: Peter Geoghegan <pg@bowt.ie>Discussion:https://postgr.es/m/flat/20230109215842.fktuhesvayno6o4g%40awork3.anarazel.de
1 parentce5e234 commit1c453cf

File tree

3 files changed

+83
-11
lines changed

3 files changed

+83
-11
lines changed

‎src/backend/access/rmgrdesc/nbtdesc.c

Lines changed: 76 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,61 @@
1515
#include"postgres.h"
1616

1717
#include"access/nbtxlog.h"
18+
#include"access/rmgrdesc_utils.h"
19+
20+
staticvoidbtree_del_desc(StringInfobuf,char*block_data,uint16ndeleted,
21+
uint16nupdated);
22+
staticvoidbtree_update_elem_desc(StringInfobuf,void*update,void*data);
23+
24+
staticvoid
25+
btree_del_desc(StringInfobuf,char*block_data,uint16ndeleted,
26+
uint16nupdated)
27+
{
28+
OffsetNumber*updatedoffsets;
29+
xl_btree_update*updates;
30+
OffsetNumber*data= (OffsetNumber*)block_data;
31+
32+
appendStringInfoString(buf,", deleted:");
33+
array_desc(buf,data,sizeof(OffsetNumber),ndeleted,
34+
&offset_elem_desc,NULL);
35+
36+
appendStringInfoString(buf,", updated:");
37+
array_desc(buf,data,sizeof(OffsetNumber),nupdated,
38+
&offset_elem_desc,NULL);
39+
40+
if (nupdated <=0)
41+
return;
42+
43+
updatedoffsets= (OffsetNumber*)
44+
((char*)data+ndeleted*sizeof(OffsetNumber));
45+
updates= (xl_btree_update*) ((char*)updatedoffsets+
46+
nupdated*
47+
sizeof(OffsetNumber));
48+
49+
appendStringInfoString(buf,", updates:");
50+
array_desc(buf,updates,sizeof(xl_btree_update),
51+
nupdated,&btree_update_elem_desc,
52+
&updatedoffsets);
53+
}
54+
55+
staticvoid
56+
btree_update_elem_desc(StringInfobuf,void*update,void*data)
57+
{
58+
xl_btree_update*new_update= (xl_btree_update*)update;
59+
OffsetNumber*updated_offset=*((OffsetNumber**)data);
60+
61+
appendStringInfo(buf,"{ updated offset: %u, ndeleted tids: %u",
62+
*updated_offset,new_update->ndeletedtids);
63+
64+
appendStringInfoString(buf,", deleted tids:");
65+
66+
array_desc(buf, (char*)new_update+SizeOfBtreeUpdate,sizeof(uint16),
67+
new_update->ndeletedtids,&uint16_elem_desc,NULL);
68+
69+
updated_offset++;
70+
71+
appendStringInfo(buf," }");
72+
}
1873

1974
void
2075
btree_desc(StringInfobuf,XLogReaderState*record)
@@ -31,15 +86,15 @@ btree_desc(StringInfo buf, XLogReaderState *record)
3186
{
3287
xl_btree_insert*xlrec= (xl_btree_insert*)rec;
3388

34-
appendStringInfo(buf,"off %u",xlrec->offnum);
89+
appendStringInfo(buf,"off: %u",xlrec->offnum);
3590
break;
3691
}
3792
caseXLOG_BTREE_SPLIT_L:
3893
caseXLOG_BTREE_SPLIT_R:
3994
{
4095
xl_btree_split*xlrec= (xl_btree_split*)rec;
4196

42-
appendStringInfo(buf,"level %u, firstrightoff %d, newitemoff %d, postingoff %d",
97+
appendStringInfo(buf,"level: %u, firstrightoff: %d, newitemoff: %d, postingoff: %d",
4398
xlrec->level,xlrec->firstrightoff,
4499
xlrec->newitemoff,xlrec->postingoff);
45100
break;
@@ -48,31 +103,41 @@ btree_desc(StringInfo buf, XLogReaderState *record)
48103
{
49104
xl_btree_dedup*xlrec= (xl_btree_dedup*)rec;
50105

51-
appendStringInfo(buf,"nintervals %u",xlrec->nintervals);
106+
appendStringInfo(buf,"nintervals: %u",xlrec->nintervals);
52107
break;
53108
}
54109
caseXLOG_BTREE_VACUUM:
55110
{
56111
xl_btree_vacuum*xlrec= (xl_btree_vacuum*)rec;
57112

58-
appendStringInfo(buf,"ndeleted %u; nupdated %u",
113+
appendStringInfo(buf,"ndeleted: %u, nupdated: %u",
59114
xlrec->ndeleted,xlrec->nupdated);
115+
116+
if (!XLogRecHasBlockImage(record,0))
117+
btree_del_desc(buf,XLogRecGetBlockData(record,0,NULL),
118+
xlrec->ndeleted,xlrec->nupdated);
119+
60120
break;
61121
}
62122
caseXLOG_BTREE_DELETE:
63123
{
64124
xl_btree_delete*xlrec= (xl_btree_delete*)rec;
65125

66-
appendStringInfo(buf,"snapshotConflictHorizon %u; ndeleted %u; nupdated %u",
126+
appendStringInfo(buf,"snapshotConflictHorizon: %u, ndeleted: %u, nupdated: %u",
67127
xlrec->snapshotConflictHorizon,
68128
xlrec->ndeleted,xlrec->nupdated);
129+
130+
if (!XLogRecHasBlockImage(record,0))
131+
btree_del_desc(buf,XLogRecGetBlockData(record,0,NULL),
132+
xlrec->ndeleted,xlrec->nupdated);
133+
69134
break;
70135
}
71136
caseXLOG_BTREE_MARK_PAGE_HALFDEAD:
72137
{
73138
xl_btree_mark_page_halfdead*xlrec= (xl_btree_mark_page_halfdead*)rec;
74139

75-
appendStringInfo(buf,"topparent %u; leaf %u; left %u; right %u",
140+
appendStringInfo(buf,"topparent: %u; leaf: %u; left: %u; right: %u",
76141
xlrec->topparent,xlrec->leafblk,xlrec->leftblk,xlrec->rightblk);
77142
break;
78143
}
@@ -81,11 +146,11 @@ btree_desc(StringInfo buf, XLogReaderState *record)
81146
{
82147
xl_btree_unlink_page*xlrec= (xl_btree_unlink_page*)rec;
83148

84-
appendStringInfo(buf,"left %u; right %u; level %u; safexid %u:%u; ",
149+
appendStringInfo(buf,"left: %u; right: %u; level: %u; safexid: %u:%u; ",
85150
xlrec->leftsib,xlrec->rightsib,xlrec->level,
86151
EpochFromFullTransactionId(xlrec->safexid),
87152
XidFromFullTransactionId(xlrec->safexid));
88-
appendStringInfo(buf,"leafleft %u; leafright %u; leaftopparent %u",
153+
appendStringInfo(buf,"leafleft: %u; leafright: %u; leaftopparent: %u",
89154
xlrec->leafleftsib,xlrec->leafrightsib,
90155
xlrec->leaftopparent);
91156
break;
@@ -94,14 +159,14 @@ btree_desc(StringInfo buf, XLogReaderState *record)
94159
{
95160
xl_btree_newroot*xlrec= (xl_btree_newroot*)rec;
96161

97-
appendStringInfo(buf,"lev %u",xlrec->level);
162+
appendStringInfo(buf,"lev: %u",xlrec->level);
98163
break;
99164
}
100165
caseXLOG_BTREE_REUSE_PAGE:
101166
{
102167
xl_btree_reuse_page*xlrec= (xl_btree_reuse_page*)rec;
103168

104-
appendStringInfo(buf,"rel %u/%u/%u; snapshotConflictHorizon %u:%u",
169+
appendStringInfo(buf,"rel: %u/%u/%u, snapshotConflictHorizon: %u:%u",
105170
xlrec->locator.spcOid,xlrec->locator.dbOid,
106171
xlrec->locator.relNumber,
107172
EpochFromFullTransactionId(xlrec->snapshotConflictHorizon),
@@ -114,7 +179,7 @@ btree_desc(StringInfo buf, XLogReaderState *record)
114179

115180
xlrec= (xl_btree_metadata*)XLogRecGetBlockData(record,0,
116181
NULL);
117-
appendStringInfo(buf,"last_cleanup_num_delpages %u",
182+
appendStringInfo(buf,"last_cleanup_num_delpages: %u",
118183
xlrec->last_cleanup_num_delpages);
119184
break;
120185
}

‎src/backend/access/rmgrdesc/rmgrdesc_utils.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,9 @@ relid_desc(StringInfo buf, void *relid, void *data)
8282
{
8383
appendStringInfo(buf,"%u",*(Oid*)relid);
8484
}
85+
86+
void
87+
uint16_elem_desc(StringInfobuf,void*value,void*data)
88+
{
89+
appendStringInfo(buf,"%u",*(uint16*)value);
90+
}

‎src/include/access/rmgrdesc_utils.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@ extern void array_desc(StringInfo buf, void *array, size_t elem_size, int count,
1818
externvoidoffset_elem_desc(StringInfobuf,void*offset,void*data);
1919
externvoidredirect_elem_desc(StringInfobuf,void*offset,void*data);
2020
externvoidrelid_desc(StringInfobuf,void*relid,void*data);
21+
externvoiduint16_elem_desc(StringInfobuf,void*value,void*data);
2122

2223
#endif/* RMGRDESC_UTILS_H */

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp