八月 5, 2024
摘要:在本教程中,您将学习如何在 PostgreSQL 中检查事务成功率。
目录
介绍
事务成功率是已提交事务(xact_commit
)和已回滚事务(xact_rollback
)之间的比率。它表示成功操作的数量。事务所做的更改可能会被中止(回滚)或提交。在事务块以外失败的单个查询也会被计入回滚数。因此,一般来说,使用事务成功率,我们可以估计一个特定数据库中的错误数量。
比率值接近 100 表示数据库运行正常,错误很少。如果事务成功率低于 90,则最好启用其他日志和分析日志内容,以梳理最常见错误的列表,来做进一步调查。
示例
首先,创建一个数据库,名为bench
:
CREATE DATABASE bench;
第二步,我们需要指定-i
(initialize)选项执行pgbench
,来设置pgbench
样例数据库:
$ pgbench -i -s 50 bench
creating tables...
5000000 of 5000000 tuples (100%) done (elapsed 5.33 s, remaining 0.00 s)
vacuum...
set primary keys...
done.
第三步,使用pgbench
运行一次基准测试:
$ pgbench -c 10 -j 2 -t 10000 bench
starting vacuum...end.
transaction type: TPC-B (sort of)
scaling factor: 50
query mode: simple
number of clients: 10
number of threads: 2
number of transactions per client: 10000
number of transactions actually processed: 100000/100000
latency average: 4.176 ms
tps = 2394.718707 (including connections establishing)
tps = 2394.874350 (excluding connections establishing)
第四步,我们来检查一下样例数据库中已提交或回滚的事务数:
SELECT xact_commit, xact_rollback
FROM pg_stat_database WHERE datname = 'bench';
xact_commit | xact_rollback
-------------+---------------
100000 | 0
(1 row)
显然,事务成功率为 100%。
查询 pg_stat_database 视图
您可以在视图 pg_stat_database 中查看数据库级别的统计信息,该视图有一个xact_rollback
列。你应该注意这个列,因为它会告诉你,你的数据库中是否发生过很多次回滚,这些可能是你的应用程序中的潜在风险。
事务成功率类似于缓存命中率,但除此之外,它还会显示成功操作的数量。众所周知,事务所做的更改可能会被中止(回滚)或提交。如果应用程序未正确处理一次回滚,则可以将其视为一个错误。此外,在事务块以外失败的单个查询也会被视为回滚。因此,一般来说,使用事务成功率,我们可以估计特定数据库中的错误量。对于事务成功率,会用到xact_commit
和xact_rollback
值,并且,使用下面查询,可以计算事务成功率。下面是一个示例,显示每个数据库的结果:
SELECT datname, 100 * xact_commit / (xact_commit + xact_rollback) as commit_ratio
FROM pg_stat_database WHERE (xact_commit + xact_rollback) > 0;
结果值可能在 1 到 100 之间变化。接近 100 的值意味着数据库的错误很少。如果事务成功率低于 90,一个推荐的实践是,配置适当的日志记录,并检查日志中的错误,梳理最常见错误的列表,并开始逐步消除它们。