mysql autocommit=0引起的业务hang住问题分析
发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,这篇文章主要讲解了"mysql autocommit=0引起的业务hang住问题分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"mysql auto
千家信息网最后更新 2024年11月27日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安全错误
数据库的锁怎样保障安全
淄博销售采购生产软件开发咨询
保国家安全保网络安全
网络安全宣传视频大学生
diy服务器需要显卡吗
数据库添加次数据文件代码
数据库基本表和视图
厦门乐昂网络技术有限公司
对于网络技术培训怎么看
网络安全竞赛操作手册
刀片式数据库服务器
一年有多少新服务器需求
svn搭建服务器
网络安全要写什么内容
亚菲意网络技术服务
西安农行软件开发
我的世界新服务器在哪里
网站服务器工具
精灵在线网络技术所有app
前端页面也要部署到服务器的吗
长宁区智能软件开发销售厂家
服务器装什么数据库好
帮注册软件开发者有什么影响
数据库查询怎么命名
国家网络安全传阅
安徽企业采购电脑服务器
剑网三清战绩要转到什么服务器
萧山三职计算机网络技术好吗
数据库建立员工日志表
如何免费试用腾讯云服务器
greenplum 数据库操作