如何查看正在执行的事务

一、问题描述

今天在pycharm断点调试代码时,同时在终端执行了一个update语句,该update语句被阻塞终端长时间没有反应。

示例如下:

python 复制代码
def test():
    id_ = data.get('id')  # 假设id_为66
    db.session.query(User).filter_by(id=id_).populate_existing().with_for_update().first()
    print("testing")

在第4行代码(print("testing"))处打上断点,然后运行。当运行到第4行时,在终端执行update修改User表的id为66的数据,会发现被阻塞。

二、原因

对User查询时,加了行锁。事务提交后,行锁才会被释放。

二、解决方法

  1. 方法一

    该示例中代码执行完,事务也就会提交,行锁自然会被释放,此时update语句就会执行完成,不阻塞。

  2. 方法二

    查看正在执行的事务,找到阻塞的事务,kill掉。

    PostgreSQL 中,可以从表 pg_stat_activity 中,查看正在执行的事务和查询。

    Mysql中,可以从information_schema 库的 innodb_trx 表中,查看当前执行中的事务。

相关推荐
卷无止境13 小时前
RAGFlow 项目全景报告:从文档解析引擎到 Agent 原生数据库
后端·python
灿飞屋14 小时前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
benchmark_cc14 小时前
单只股票五档盘口接入个人研究仓库:QuantDash 读取、校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash
青少儿编程课堂16 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
灿飞屋18 小时前
Kotlin与Java虚拟机四:函数
java·python·kotlin·安卓·android jetpack
一晌小贪欢19 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
一条大祥脚20 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
10年前端老司机21 小时前
Milvus 8种检索能力实践
数据库·python·agent
Sakura_j_h_21 小时前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc
大草原的小灰灰1 天前
LLM应用的标准开发框架LangChain(八)- 中间件
python·中间件·langchain