首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到回滚调用的位置?

如何找到回滚调用的位置?
EN

Stack Overflow用户
提问于 2019-09-06 06:02:52
回答 1查看 102关注 0票数 1

现在,我使用Amazon、lambda、python和sqlalchemy。当我检查amazon性能洞察力时,我发现调用了一些回滚。到目前为止,回滚是被调用的。但是当我在洞察力中推出其他问题时,就没有错误了。如何找到回滚调用的位置?或者为什么要调用回滚?

  1. 我怀疑问题是错的。因此,我试图发送与我在性能洞察力中找到的查询相同的查询。但是没有回滚。
  2. 我怀疑交通问题。因此,我试图同时使用“for”和“5”终端发送许多关于(1000000)的相同查询。在我检查了显示处理列表之后。但是没有回滚。
  3. 我听说sqlalchemy.create_engine使用连接池,当连接关闭时,sqlalchemy调用回滚。但是我不知道,我如何检查这个问题,这个问题就是这个问题的解决方案。

这是我的rds性能洞察力。

EN

回答 1

Stack Overflow用户

发布于 2019-09-06 07:47:45

回滚可以从回滚事务以展开查询,或者在返回到池的连接时开始。

有一种方法可以让你感觉到你的应用程序正在做什么,那就是通过事件系统将这些回滚动作连接起来,从而实现一些跟踪。

有两个事件您需要查看:

  1. ConnectionEvents.rollback

拦截由事务发起的rollback()事件。

  1. PoolEvents.reset

在池连接发生“重置”操作之前调用。

您可以在这些事件上设置监听器,以增加一些计数器,或者执行一些日志记录,以计数回滚的数量。然后您就可以感觉到事务回滚与池回滚的相对权重。

例如,使用一些粗略的全局计数器,但您可以添加所需的任何逻辑:

代码语言:javascript
复制
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}')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57816527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档