序列化异常:还涉及到谁?

时间:2014-11-24 12:23:33

标签: postgresql postgresql-9.2

当SERIALIZABLE隔离级别的事务失败时,是否有办法知道整个过程中涉及哪些连接(即事务)?

我正在开发一个会计数据库。我知道我们应该重试交易,这就是我们所做的。我遇到了一个问题,即交易必须运行10次才能在繁忙的系统上成功。

这里应该有一个严重的问题。我想知道是否有一个配置参数允许系统在异常细节中告知故障中涉及的其他连接。

SSI上的Postgresql wiki没有此类信息。

谢谢你的到来。

编辑1

我把日志推到DEBUG5级别没有运气。

所以我决定看看代码。序列化冲突检测在src / backend / storage / lmgr / predicate.c中完成,其中注定要失败的事务使用SXACT_FLAG_DOOMED标记标记为。

我只是添加了DEBUG1级别的elog(...)调用,编译了代码并试一试。

这很有趣,因为它现在向我展示了:

    2014-11-28 09:52:47 CET [9888]: [1-1] db=postgres,user=postgres DEBUG:  00000: 
SERIALIZABLE TX on Connection [12864] is marked DOOMED by SERIALIZABLE TX on Connection [9888]

现在我有了构建基块来了解正在发生的事情。

1 个答案:

答案 0 :(得分:0)

首先,查看主PostgreSQL日志文件。在我的方框中,它位于/ var / log / postgresql下。

之后,有一个lot of options用于记录和错误报告。您可以记录连接尝试,并可以记录每个SQL语句。您应该能够很好地了解服务器正在做什么。

我认为您应该阅读大部分链接文档。某些选项会对服务器吞吐量产生重大影响。