现在,我使用Amazon RDS,lambda,python和sqlalchemy。当我检查Amazon RDS性能洞察力时,我发现调用了一些回滚。到目前为止,回滚已被调用。 但是当我在洞察力中执行其他查询时,没有错误。 如何找到在何处调用回滚?还是为什么调用回滚?
这是我的rds性能见解CodeSandbox
答案 0 :(得分:2)
回滚可以源自回滚事务以取消查询,也可以基于将连接返回到池之后。
您可以了解应用程序运行情况的一种方法是通过事件系统加入这些回滚操作以启用一些跟踪。
您需要查看两个事件:
由交易启动的拦截rollback()事件。
在池连接发生“重置”操作之前调用。
您可以在这些事件上设置侦听器,以增加一些计数器,或执行一些特定于记录回滚数量的日志记录。这样您就可以了解事务回滚与池回滚的相对权重。
例如使用一些粗略的全局计数器,但是您可以添加所需的任何逻辑:
import logging
from sqlalchemy import event
POOL_ROLLBACKS = 0
TXN_ROLLBACKS = 0
@event.listens_for(YourEngine, 'reset')
def receive_reset(dbapi_connection, connection_record):
POOL_ROLLBACKS += 1
logging.debug(f"Pool rollback count: {POOL_ROLLBACKS}")
@event.listens_for(YourEngine, 'rollback')
def receive_rollback(conn):
# track a transaction based rollback
TXN_ROLLBACKS += 1
logging.debug(f'Transaction rollback count {TXN_ROLLBACKS}')