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

Commit6b95016

Browse files
committed
pgstat: Prepare to use mechanism for truncated rels also for droppped rels.
The upcoming shared memory stats patch drops stats for dropped objects in atransactional manner, rather than removing them later as part of vacuum. Thismeans that stats for DROP inside a transaction needs to handle aborted(sub-)transactions similar to TRUNCATE: The stats up to the DROP should berestored.Rename the existing infrastructure in preparation.Author: Andres Freund <andres@anarazel.de>Discussion:https://postgr.es/m/20210405092914.mmxqe7j56lsjfsej@alap3.anarazel.de
1 parente1f958d commit6b95016

File tree

2 files changed

+57
-48
lines changed

2 files changed

+57
-48
lines changed

‎src/backend/postmaster/pgstat.c

Lines changed: 50 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -257,12 +257,13 @@ typedef struct TwoPhasePgStatRecord
257257
PgStat_Countertuples_inserted;/* tuples inserted in xact */
258258
PgStat_Countertuples_updated;/* tuples updated in xact */
259259
PgStat_Countertuples_deleted;/* tuples deleted in xact */
260-
PgStat_Counterinserted_pre_trunc;/* tuples inserted prior to truncate */
261-
PgStat_Counterupdated_pre_trunc;/* tuples updated prior to truncate */
262-
PgStat_Counterdeleted_pre_trunc;/* tuples deleted prior to truncate */
260+
/* tuples i/u/d prior to truncate/drop */
261+
PgStat_Counterinserted_pre_truncdrop;
262+
PgStat_Counterupdated_pre_truncdrop;
263+
PgStat_Counterdeleted_pre_truncdrop;
263264
Oidt_id;/* table's OID */
264265
boolt_shared;/* is it a shared catalog? */
265-
boolt_truncated;/* was the relation truncated? */
266+
boolt_truncdropped;/* was the relation truncated/dropped? */
266267
}TwoPhasePgStatRecord;
267268

268269
/*
@@ -2300,36 +2301,39 @@ pgstat_count_heap_delete(Relation rel)
23002301
}
23012302

23022303
/*
2303-
*pgstat_truncate_save_counters
2304+
*pgstat_truncdrop_save_counters
23042305
*
2305-
* Whenever a table is truncated, we save its i/u/d counters so that they can
2306-
* be cleared, and if the (sub)xact that executed the truncate later aborts,
2307-
* the counters can be restored to the saved (pre-truncate) values. Note we do
2308-
* this on the first truncate in any particular subxact level only.
2306+
* Whenever a table is truncated/dropped, we save its i/u/d counters so that
2307+
* they can be cleared, and if the (sub)xact that executed the truncate/drop
2308+
* later aborts, the counters can be restored to the saved (pre-truncate/drop)
2309+
* values.
2310+
*
2311+
* Note that for truncate we do this on the first truncate in any particular
2312+
* subxact level only.
23092313
*/
23102314
staticvoid
2311-
pgstat_truncate_save_counters(PgStat_TableXactStatus*trans)
2315+
pgstat_truncdrop_save_counters(PgStat_TableXactStatus*trans,boolis_drop)
23122316
{
2313-
if (!trans->truncated)
2317+
if (!trans->truncdropped||is_drop)
23142318
{
2315-
trans->inserted_pre_trunc=trans->tuples_inserted;
2316-
trans->updated_pre_trunc=trans->tuples_updated;
2317-
trans->deleted_pre_trunc=trans->tuples_deleted;
2318-
trans->truncated= true;
2319+
trans->inserted_pre_truncdrop=trans->tuples_inserted;
2320+
trans->updated_pre_truncdrop=trans->tuples_updated;
2321+
trans->deleted_pre_truncdrop=trans->tuples_deleted;
2322+
trans->truncdropped= true;
23192323
}
23202324
}
23212325

23222326
/*
2323-
*pgstat_truncate_restore_counters - restore counters when a truncate aborts
2327+
*pgstat_truncdrop_restore_counters - restore counters when a truncate aborts
23242328
*/
23252329
staticvoid
2326-
pgstat_truncate_restore_counters(PgStat_TableXactStatus*trans)
2330+
pgstat_truncdrop_restore_counters(PgStat_TableXactStatus*trans)
23272331
{
2328-
if (trans->truncated)
2332+
if (trans->truncdropped)
23292333
{
2330-
trans->tuples_inserted=trans->inserted_pre_trunc;
2331-
trans->tuples_updated=trans->updated_pre_trunc;
2332-
trans->tuples_deleted=trans->deleted_pre_trunc;
2334+
trans->tuples_inserted=trans->inserted_pre_truncdrop;
2335+
trans->tuples_updated=trans->updated_pre_truncdrop;
2336+
trans->tuples_deleted=trans->deleted_pre_truncdrop;
23332337
}
23342338
}
23352339

@@ -2350,7 +2354,7 @@ pgstat_count_truncate(Relation rel)
23502354
pgstat_info->trans->nest_level!=nest_level)
23512355
add_tabstat_xact_level(pgstat_info,nest_level);
23522356

2353-
pgstat_truncate_save_counters(pgstat_info->trans);
2357+
pgstat_truncdrop_save_counters(pgstat_info->trans, false);
23542358
pgstat_info->trans->tuples_inserted=0;
23552359
pgstat_info->trans->tuples_updated=0;
23562360
pgstat_info->trans->tuples_deleted=0;
@@ -2395,17 +2399,17 @@ AtEOXact_PgStat_Relations(PgStat_SubXactStatus *xact_state, bool isCommit)
23952399
Assert(trans->upper==NULL);
23962400
tabstat=trans->parent;
23972401
Assert(tabstat->trans==trans);
2398-
/* restore pre-truncate stats (if any) in case of aborted xact */
2402+
/* restore pre-truncate/drop stats (if any) in case of aborted xact */
23992403
if (!isCommit)
2400-
pgstat_truncate_restore_counters(trans);
2404+
pgstat_truncdrop_restore_counters(trans);
24012405
/* count attempted actions regardless of commit/abort */
24022406
tabstat->t_counts.t_tuples_inserted+=trans->tuples_inserted;
24032407
tabstat->t_counts.t_tuples_updated+=trans->tuples_updated;
24042408
tabstat->t_counts.t_tuples_deleted+=trans->tuples_deleted;
24052409
if (isCommit)
24062410
{
2407-
tabstat->t_counts.t_truncated=trans->truncated;
2408-
if (trans->truncated)
2411+
tabstat->t_counts.t_truncdropped=trans->truncdropped;
2412+
if (trans->truncdropped)
24092413
{
24102414
/* forget live/dead stats seen by backend thus far */
24112415
tabstat->t_counts.t_delta_live_tuples=0;
@@ -2504,10 +2508,10 @@ AtEOSubXact_PgStat_Relations(PgStat_SubXactStatus *xact_state, bool isCommit, in
25042508
{
25052509
if (trans->upper&&trans->upper->nest_level==nestDepth-1)
25062510
{
2507-
if (trans->truncated)
2511+
if (trans->truncdropped)
25082512
{
2509-
/* propagate the truncate status one level up */
2510-
pgstat_truncate_save_counters(trans->upper);
2513+
/* propagate the truncate/drop status one level up */
2514+
pgstat_truncdrop_save_counters(trans->upper, false);
25112515
/* replace upper xact stats with ours */
25122516
trans->upper->tuples_inserted=trans->tuples_inserted;
25132517
trans->upper->tuples_updated=trans->tuples_updated;
@@ -2547,8 +2551,8 @@ AtEOSubXact_PgStat_Relations(PgStat_SubXactStatus *xact_state, bool isCommit, in
25472551
* subtransaction
25482552
*/
25492553

2550-
/* first restore values obliterated by truncate */
2551-
pgstat_truncate_restore_counters(trans);
2554+
/* first restore values obliterated by truncate/drop */
2555+
pgstat_truncdrop_restore_counters(trans);
25522556
/* count attempted actions regardless of commit/abort */
25532557
tabstat->t_counts.t_tuples_inserted+=trans->tuples_inserted;
25542558
tabstat->t_counts.t_tuples_updated+=trans->tuples_updated;
@@ -2609,12 +2613,12 @@ AtPrepare_PgStat_Relations(PgStat_SubXactStatus *xact_state)
26092613
record.tuples_inserted=trans->tuples_inserted;
26102614
record.tuples_updated=trans->tuples_updated;
26112615
record.tuples_deleted=trans->tuples_deleted;
2612-
record.inserted_pre_trunc=trans->inserted_pre_trunc;
2613-
record.updated_pre_trunc=trans->updated_pre_trunc;
2614-
record.deleted_pre_trunc=trans->deleted_pre_trunc;
2616+
record.inserted_pre_truncdrop=trans->inserted_pre_truncdrop;
2617+
record.updated_pre_truncdrop=trans->updated_pre_truncdrop;
2618+
record.deleted_pre_truncdrop=trans->deleted_pre_truncdrop;
26152619
record.t_id=tabstat->t_id;
26162620
record.t_shared=tabstat->t_shared;
2617-
record.t_truncated=trans->truncated;
2621+
record.t_truncdropped=trans->truncdropped;
26182622

26192623
RegisterTwoPhaseRecord(TWOPHASE_RM_PGSTAT_ID,0,
26202624
&record,sizeof(TwoPhasePgStatRecord));
@@ -2710,8 +2714,8 @@ pgstat_twophase_postcommit(TransactionId xid, uint16 info,
27102714
pgstat_info->t_counts.t_tuples_inserted+=rec->tuples_inserted;
27112715
pgstat_info->t_counts.t_tuples_updated+=rec->tuples_updated;
27122716
pgstat_info->t_counts.t_tuples_deleted+=rec->tuples_deleted;
2713-
pgstat_info->t_counts.t_truncated=rec->t_truncated;
2714-
if (rec->t_truncated)
2717+
pgstat_info->t_counts.t_truncdropped=rec->t_truncdropped;
2718+
if (rec->t_truncdropped)
27152719
{
27162720
/* forget live/dead stats seen by backend thus far */
27172721
pgstat_info->t_counts.t_delta_live_tuples=0;
@@ -2743,11 +2747,11 @@ pgstat_twophase_postabort(TransactionId xid, uint16 info,
27432747
pgstat_info=get_tabstat_entry(rec->t_id,rec->t_shared);
27442748

27452749
/* Same math as in AtEOXact_PgStat, abort case */
2746-
if (rec->t_truncated)
2750+
if (rec->t_truncdropped)
27472751
{
2748-
rec->tuples_inserted=rec->inserted_pre_trunc;
2749-
rec->tuples_updated=rec->updated_pre_trunc;
2750-
rec->tuples_deleted=rec->deleted_pre_trunc;
2752+
rec->tuples_inserted=rec->inserted_pre_truncdrop;
2753+
rec->tuples_updated=rec->updated_pre_truncdrop;
2754+
rec->tuples_deleted=rec->deleted_pre_truncdrop;
27512755
}
27522756
pgstat_info->t_counts.t_tuples_inserted+=rec->tuples_inserted;
27532757
pgstat_info->t_counts.t_tuples_updated+=rec->tuples_updated;
@@ -5055,8 +5059,11 @@ pgstat_recv_tabstat(PgStat_MsgTabstat *msg, int len)
50555059
tabentry->tuples_updated+=tabmsg->t_counts.t_tuples_updated;
50565060
tabentry->tuples_deleted+=tabmsg->t_counts.t_tuples_deleted;
50575061
tabentry->tuples_hot_updated+=tabmsg->t_counts.t_tuples_hot_updated;
5058-
/* If table was truncated, first reset the live/dead counters */
5059-
if (tabmsg->t_counts.t_truncated)
5062+
/*
5063+
* If table was truncated/dropped, first reset the live/dead
5064+
* counters.
5065+
*/
5066+
if (tabmsg->t_counts.t_truncdropped)
50605067
{
50615068
tabentry->n_live_tuples=0;
50625069
tabentry->n_dead_tuples=0;

‎src/include/pgstat.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ typedef struct PgStat_TableCounts
123123
PgStat_Countert_tuples_updated;
124124
PgStat_Countert_tuples_deleted;
125125
PgStat_Countert_tuples_hot_updated;
126-
boolt_truncated;
126+
boolt_truncdropped;
127127

128128
PgStat_Countert_delta_live_tuples;
129129
PgStat_Countert_delta_dead_tuples;
@@ -186,10 +186,12 @@ typedef struct PgStat_TableXactStatus
186186
PgStat_Countertuples_inserted;/* tuples inserted in (sub)xact */
187187
PgStat_Countertuples_updated;/* tuples updated in (sub)xact */
188188
PgStat_Countertuples_deleted;/* tuples deleted in (sub)xact */
189-
booltruncated;/* relation truncated in this (sub)xact */
190-
PgStat_Counterinserted_pre_trunc;/* tuples inserted prior to truncate */
191-
PgStat_Counterupdated_pre_trunc;/* tuples updated prior to truncate */
192-
PgStat_Counterdeleted_pre_trunc;/* tuples deleted prior to truncate */
189+
booltruncdropped;/* relation truncated/dropped in this
190+
* (sub)xact */
191+
/* tuples i/u/d prior to truncate/drop */
192+
PgStat_Counterinserted_pre_truncdrop;
193+
PgStat_Counterupdated_pre_truncdrop;
194+
PgStat_Counterdeleted_pre_truncdrop;
193195
intnest_level;/* subtransaction nest level */
194196
/* links to other structs for same relation: */
195197
structPgStat_TableXactStatus*upper;/* next higher subxact if any */

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp