gpt4 book ai didi

postgresql - 测量 XID 在 PostgreSQL 中对失败查询的使用

转载 作者:行者123 更新时间:2023-11-29 13:53:40 25 4
gpt4 key购买 nike

我正在调查 Postgres 数据库上经常执行的查询,以帮助减少 XID 的使用。我可以使用 pg_stat_statements 获取执行的查询列表和调用次数,但它不包括因违反唯一约束等原因而失败的查询。有什么方法可以记录并计算这些失败查询的数量吗?

例子:

test_xid=# \d test
Table "public.test"
Column | Type | Modifiers
--------+---------+-----------
id | integer | not null
Indexes:
"test_pkey" PRIMARY KEY, btree (id)

test_xid=# truncate test;
TRUNCATE TABLE
test_xid=# select pg_stat_statements_reset();
pg_stat_statements_reset
--------------------------

(1 row)

test_xid=# select txid_current();
txid_current
--------------
224547
(1 row)

test_xid=# insert into test(id) values (1);
INSERT 0 1
test_xid=# insert into test(id) values (1);
ERROR: duplicate key value violates unique constraint "test_pkey"
DETAIL: Key (id)=(1) already exists.
test_xid=# insert into test(id) values (1);
ERROR: duplicate key value violates unique constraint "test_pkey"
DETAIL: Key (id)=(1) already exists.
test_xid=# insert into test(id) values (1);
ERROR: duplicate key value violates unique constraint "test_pkey"
DETAIL: Key (id)=(1) already exists.
test_xid=# select txid_current();
txid_current
--------------
224552
(1 row)

test_xid=# select query, calls from pg_stat_statements;
query | calls
------------------------------------+-------
insert into test(id) values (?); | 1
select pg_stat_statements_reset(); | 1
select txid_current(); | 2
(3 rows)

test_xid=# select pg_stat_statements_reset();
pg_stat_statements_reset
--------------------------

(1 row)

test_xid=# insert into test(id) values (1);
ERROR: duplicate key value violates unique constraint "test_pkey"
DETAIL: Key (id)=(1) already exists.
test_xid=# select query, calls from pg_stat_statements;
query | calls
------------------------------------+-------
select pg_stat_statements_reset(); | 1
(1 row)

可以看出,如果 INSERT 查询总是失败,则它不会出现在 pg_stat_statments 中,并且如果查询已经成功执行,则调用计数不会因后续失败而增加查询,即使失败的查询导致当前 XID 增加。

最佳答案

对于一般统计信息,您可以查看 pg_stat_database.xact_rollback。如果您想了解回滚的语句,我能想到的唯一不涉及 C 代码的方法是记录所有语句,然后查看日志。

如果您想深入研究 C 代码(或付钱请人),我认为向 pg_stat_statements 添加回滚支持不会非常困难,而且我怀疑社区会对此表示欢迎。

关于postgresql - 测量 XID 在 PostgreSQL 中对失败查询的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36166223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com