mysql autocommit=0引起的业务hang住问题分析
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要讲解了"mysql autocommit=0引起的业务hang住问题分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"mysql auto
千家信息网最后更新 2025年11月07日mysql autocommit=0引起的业务hang住问题分析
这篇文章主要讲解了"mysql autocommit=0引起的业务hang住问题分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"mysql autocommit=0引起的业务hang住问题分析"吧!
背景
有用户报告一个普通的select 语句被hang住了,执行超时。查明之后发现是autocommit使用不当导致。这里将case简化,说明复现步骤及原因。
复现
session1 建表并插入数据:create table if not exists t(id int primary key, c int);set autocommit=0;insert into t values(1,1);insert into t values(2,2);insert into t values(3,3);commit;select count(*) from t;这个执行流程的目的很直观,建表、插入数据、查询结果。貌似没有问题。维持session1不断,新建一个连接session2,执行 create table if not exists t(id int primary key, c int);此时该语句处于等待状态.再新建一个连接session3, 执行select count(*) from t; 该语句处于等待状态.于是从业务上看就是一个select 语句被hang住。
原因分析
MySQL Tips: 如果服务中某些语句无法执行完成,追查问题时第一步要先保留现场,pstack> tmplog之一个常用的方法。
这两个等待线程的栈如:#0 0x000000310ce0b7bb in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0#1 0x000000000063ba46 in MDL_wait::timed_wait(THD*, timespec*, bool, char const*) ()#2 0x000000000063e095 in MDL_context::acquire_lock(MDL_request*, unsigned long) ()可以看到,堵在MDL_wait.简单说明下什么是MDL。试想,如果一个语句在执行一个表上的查询过程中,表结构被改了,或者表被drop,这样会得到一个错误的结果。因此在一个事务持续期间,就需要对访问的表结构作保护。这个就是meta data lock (MDL).很容易理解的,对表数据作增删改查,需要对MDL加读锁,修改表结构、删除表等操作则加写锁。
MySQL Tips: MDL是5.5才加入的机制,5.1版本下本文的case不会复现。 MySQL Tips: 事务中MDL申请时机是在首次使用时,释放时机是在事务结束后。
也就是说文章开头的这个case,原因是session2等待在加写锁过程。而session3虽然只是加读锁,但与session2冲突,也需要等待。
session1的事务
也就是说session1还持有表t的MDL读锁。但我们的事务明明已经提交(commit)了。这里就涉及到一个常见的误解。以前有看过文章说,可以用set autocommit=0开启一个事务。其实这个描述不准确.
MySQL Tips: set autocommit=0是将本线程设置为非自动提交模式。在每个事务结束后,下个语句开始时自动新建一个事务。
这就意味着,session1最后的那个select count(*)操作,实际上之前隐含了一个begin操作。由于该事务没有提交,因此session1持有表t的MDL读锁。因此对于业务方的建议就是,及时提交这些读事务,或断开连接。
MySQL Tips: 连接断开时,MySQL会自动回滚当前未提交的事务。 由于本case里面session1的最后一个事务只是一个select语句,因此回滚不影响业务。
感谢各位的阅读,以上就是"mysql autocommit=0引起的业务hang住问题分析"的内容了,经过本文的学习后,相信大家对mysql autocommit=0引起的业务hang住问题分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
事务
语句
业务
问题
分析
就是
原因
数据
文章
结构
学习
也就是
也就是说
内容
只是
时机
是在
状态
线程
结果
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库插入死锁
用友采购订单 数据库表名
达梦数据库免费么
p75可以装服务器内存条吗
文科生网络安全
app软件开发解决方案工具
嵌入式的数据库
浙江万朋网络技术有...
嘉兴南湖区靠谱软件开发
杭州安卓软件开发如何选择
网络安全中队周报
数据库与os是并发运行
网络安全宣传大使滕秋月
西安交通大学网络安全考研分数线
软件开发高中学历可以吗
崇明区工业软件开发费用
用什么创建和修改数据库结构
bcv 技术数据库
租个国际服务器多少钱
崇义网络安全宣传周
网络安全技术专业排名
算法工程师软件开发工程师
小敏家数据库系统概念
在学习上用到什么数据库技术
凯特盒子服务器连接失败
jira 邮件服务器
名著新说网络安全
企业网络安全培训找哪个机构
服务器功率2200w
深圳市育鹏互联网科技有限公司