Show GIDs of two-phase commit commands as constants in pg_stat_statements
This relies on the "location" field added to TransactionStmt in 31de7e6, now applied to the "gid" field used by 2PC commands. These commands are now reported like: COMMIT PREPARED $1 PREPARE TRANSACTION $1 ROLLBACK PREPARED $1 Applying constants for these commands is a huge advantage for workloads that rely a lot on 2PC commands with different GIDs. Some tests are added to track the new behavior. Reviewed-by: Julien Rouhaud Discussion: https://postgr.es/m/ZMhT9kNtJJsHw6jK@paquier.xyz
This commit is contained in:
parent
5dc456b7dd
commit
638d42a3c5
@ -197,6 +197,29 @@ SELECT pg_stat_statements_reset();
|
|||||||
|
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
|
-- Two-phase transactions
|
||||||
|
BEGIN;
|
||||||
|
PREPARE TRANSACTION 'stat_trans1';
|
||||||
|
COMMIT PREPARED 'stat_trans1';
|
||||||
|
BEGIN;
|
||||||
|
PREPARE TRANSACTION 'stat_trans2';
|
||||||
|
ROLLBACK PREPARED 'stat_trans2';
|
||||||
|
SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C";
|
||||||
|
calls | rows | query
|
||||||
|
-------+------+-----------------------------------
|
||||||
|
2 | 0 | BEGIN
|
||||||
|
1 | 0 | COMMIT PREPARED $1
|
||||||
|
2 | 0 | PREPARE TRANSACTION $1
|
||||||
|
1 | 0 | ROLLBACK PREPARED $1
|
||||||
|
1 | 1 | SELECT pg_stat_statements_reset()
|
||||||
|
(5 rows)
|
||||||
|
|
||||||
|
SELECT pg_stat_statements_reset();
|
||||||
|
pg_stat_statements_reset
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
-- Savepoints
|
-- Savepoints
|
||||||
BEGIN;
|
BEGIN;
|
||||||
SAVEPOINT sp1;
|
SAVEPOINT sp1;
|
||||||
|
@ -1 +1,2 @@
|
|||||||
shared_preload_libraries = 'pg_stat_statements'
|
shared_preload_libraries = 'pg_stat_statements'
|
||||||
|
max_prepared_transactions = 5
|
||||||
|
@ -115,6 +115,16 @@ COMMIT;
|
|||||||
SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C";
|
SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C";
|
||||||
SELECT pg_stat_statements_reset();
|
SELECT pg_stat_statements_reset();
|
||||||
|
|
||||||
|
-- Two-phase transactions
|
||||||
|
BEGIN;
|
||||||
|
PREPARE TRANSACTION 'stat_trans1';
|
||||||
|
COMMIT PREPARED 'stat_trans1';
|
||||||
|
BEGIN;
|
||||||
|
PREPARE TRANSACTION 'stat_trans2';
|
||||||
|
ROLLBACK PREPARED 'stat_trans2';
|
||||||
|
SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C";
|
||||||
|
SELECT pg_stat_statements_reset();
|
||||||
|
|
||||||
-- Savepoints
|
-- Savepoints
|
||||||
BEGIN;
|
BEGIN;
|
||||||
SAVEPOINT sp1;
|
SAVEPOINT sp1;
|
||||||
|
@ -10924,7 +10924,7 @@ TransactionStmt:
|
|||||||
|
|
||||||
n->kind = TRANS_STMT_PREPARE;
|
n->kind = TRANS_STMT_PREPARE;
|
||||||
n->gid = $3;
|
n->gid = $3;
|
||||||
n->location = -1;
|
n->location = @3;
|
||||||
$$ = (Node *) n;
|
$$ = (Node *) n;
|
||||||
}
|
}
|
||||||
| COMMIT PREPARED Sconst
|
| COMMIT PREPARED Sconst
|
||||||
@ -10933,7 +10933,7 @@ TransactionStmt:
|
|||||||
|
|
||||||
n->kind = TRANS_STMT_COMMIT_PREPARED;
|
n->kind = TRANS_STMT_COMMIT_PREPARED;
|
||||||
n->gid = $3;
|
n->gid = $3;
|
||||||
n->location = -1;
|
n->location = @3;
|
||||||
$$ = (Node *) n;
|
$$ = (Node *) n;
|
||||||
}
|
}
|
||||||
| ROLLBACK PREPARED Sconst
|
| ROLLBACK PREPARED Sconst
|
||||||
@ -10942,7 +10942,7 @@ TransactionStmt:
|
|||||||
|
|
||||||
n->kind = TRANS_STMT_ROLLBACK_PREPARED;
|
n->kind = TRANS_STMT_ROLLBACK_PREPARED;
|
||||||
n->gid = $3;
|
n->gid = $3;
|
||||||
n->location = -1;
|
n->location = @3;
|
||||||
$$ = (Node *) n;
|
$$ = (Node *) n;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
@ -3540,7 +3540,8 @@ typedef struct TransactionStmt
|
|||||||
List *options; /* for BEGIN/START commands */
|
List *options; /* for BEGIN/START commands */
|
||||||
/* for savepoint commands */
|
/* for savepoint commands */
|
||||||
char *savepoint_name pg_node_attr(query_jumble_ignore);
|
char *savepoint_name pg_node_attr(query_jumble_ignore);
|
||||||
char *gid; /* for two-phase-commit related commands */
|
/* for two-phase-commit related commands */
|
||||||
|
char *gid pg_node_attr(query_jumble_ignore);
|
||||||
bool chain; /* AND CHAIN option */
|
bool chain; /* AND CHAIN option */
|
||||||
/* token location, or -1 if unknown */
|
/* token location, or -1 if unknown */
|
||||||
int location pg_node_attr(query_jumble_location);
|
int location pg_node_attr(query_jumble_location);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user