PostgreSQL 教程: 检查事务成功率

八月 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_commitxact_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,一个推荐的实践是,配置适当的日志记录,并检查日志中的错误,梳理最常见错误的列表,并开始逐步消除它们。

了解更多

PostgreSQL 监控