如何发现事务是否频繁中止?
How to discover if a transaction is frequently aborting?
我正在尝试调试使用 STM 的程序。 ThreadScope 读数指出非常高的 CPU activity,如您在此处所见:
所以我试图查明发生这种情况是否是由于频繁中止的事务引起的。我想到的第一件事是使用这样的东西来测试:
atomically $ do
someWork
...
`orElse` do
unsafeIOToSTM $ traceEventIO "transaction aborted!"
retry
但我不确定这是否正确,或者这是否是在 STM 场景中进行调试的最佳方法。有什么想法吗?
使用stm-stats包。它提供了 trackSTM
,您应该使用它来代替 atomically
,而 dumpSTMStats :: IO ()
将提供如下内容:
STM transaction statistics (2011-10-09 12:28:37.188951 UTC):
Transaction Commits Retries Ratio
_anonymous_ 1 0 0.00
reader 1 23 23.00
writer 23 0 0.00
(交易名称会自动生成,但有帮助者可以自己设置。)
我正在尝试调试使用 STM 的程序。 ThreadScope 读数指出非常高的 CPU activity,如您在此处所见:
所以我试图查明发生这种情况是否是由于频繁中止的事务引起的。我想到的第一件事是使用这样的东西来测试:
atomically $ do
someWork
...
`orElse` do
unsafeIOToSTM $ traceEventIO "transaction aborted!"
retry
但我不确定这是否正确,或者这是否是在 STM 场景中进行调试的最佳方法。有什么想法吗?
使用stm-stats包。它提供了 trackSTM
,您应该使用它来代替 atomically
,而 dumpSTMStats :: IO ()
将提供如下内容:
STM transaction statistics (2011-10-09 12:28:37.188951 UTC):
Transaction Commits Retries Ratio
_anonymous_ 1 0 0.00
reader 1 23 23.00
writer 23 0 0.00
(交易名称会自动生成,但有帮助者可以自己设置。)