如何查看正在执行的事务

一、问题描述

今天在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 表中,查看当前执行中的事务。

相关推荐
一晌小贪欢1 小时前
Python-11 Python作用域与闭包:LEGB规则深度解析
开发语言·python·python基础·python小白·python作用域·python小庄
丸码1 小时前
JDK1.8新特性全解析
linux·windows·python
@游子1 小时前
Python学习笔记-Day4
笔记·python·学习
艾莉丝努力练剑1 小时前
【Python基础:语法第二课】Python 流程控制详解:条件语句 + 循环语句 + 人生重开模拟器实战
人工智能·爬虫·python·pycharm
Dest1ny-安全1 小时前
CTF 及网络安全相关平台汇总表
java·运维·服务器·python·安全·web安全
java1234_小锋1 小时前
[免费]基于Python的深度学习人脸表情识别系统(Keras卷积神经网络+OpenCV+PyQt)【论文+源码+SQL脚本】
python·深度学习·keras·表情识别
萧鼎1 小时前
告别 PR!用 Python + MoviePy 自动化剪辑视频
python·自动化·音视频
云霄IT1 小时前
python轮子:适配requests.request的aiohttp异步请求
开发语言·python
棒棒的皮皮1 小时前
【OpenCV】Python图像处理之开发环境搭建
人工智能·python·opencv·计算机视觉