mysql ddl 锁_MySQL Online DDL导致全局锁表案例分析
MySQL Online DDL导致全局锁表案例分析
我这边遇到了什么问题?
线上给某个表执行新增索引SQL, 然后整个数据CPU打到100%, 连接数暴增到极限, 最后导致所有访问数据库的应用都奔溃.
SQL如下:
ALTER TABLE `book`
ADD INDEX `idx_sub_title` (`sub_title` ASC);
能看到什么?
'10063293', 'root', '10.0.0.1:35252', 'novel', 'Query', '50', 'Waiting for table metadata lock',
'ALTER TABLE `lemon_novel`.`book` \nADD INDEX `idx_sub_title` (`sub_title` ASC)'
'10094494', 'root', '172.16.2.112:42808', 'novel', 'Query', '31', 'Waiting for table metadata lock', 'SELECT \n
book_trend.book_id AS book_id,
很奇怪, 这两边都在等"Waiting for table metadata lock"
反手查一下"Waiting for table metadata lock"是什么
初步的一些结论
看下来下面的一些结论:MySQL 5.6以后的版本,支持在线DDL,新增index/删除index之类的可以直接InPlace操作,不需要rebuild整张表,理论上效果是很快的,详细资料见Online DDL Operations
DDL add index 操作会lock table metadata,此操作是导致我们服务不可用的原因
有怀疑过lock tabel matadata和MySQL autocommit有关,但是实践下来两者看起来没有关联。
后来在阿里云上面还看到过他们特定写过类似的答疑.
阿里云建议主要是这样操作.这里需要找到的是一直在占用该表的会话,而不是正在等待MDL锁解除的会话,注意区分。可以根据State列的状态和Info列的命令内容来进行分析判断。
您也可以用如下命令查询长时间未完成的事务,如果导致阻塞的语句的用户与当前用户不同,请使用导致阻塞的语句的用户登录来终止会话。
select concat('kill ',i.trx_mysql_thread_id,';') from information_schema.innodb_trx i,
(select
id, time
from
information_schema.processlist
where
time = (select
max(time)
from
information_schema.processlist
where
state = 'Waiting for table metadata lock'
and substring(info, 1, 5) in ('alter' , 'optim', 'repai', 'lock ', 'drop ', 'creat'))) p
where timestampdiff(second, i.trx_started, now()) > p.time
and i.trx_mysql_thread_id not in (connection_id(),p.id);
然而在我的场景, 上面的SQL并没有任何的进程输出.
陷入僵局的...
不过上面给了一些思路, 现在我们主要是因为有东西占用着 table metadata lock, 导致当前所有的东西都没有执行.
showfull processlist;
看一眼没什么卵用, 处理那两个奇怪的wait lock, 其他的都挺正常的.
那么, 看下现在谁占用着锁? 怎么看呢?
select*from information_schema.innodb_trx;
神奇了, 真有两个东西在占用锁.
那kill 了他们看看.
额, 解决了.
最终结论
某个奇怪的程序开了查询或者奇怪的操作,lock了 table metadata,
之后连接一直都没有被释放, 导致以上各种问题.
现在的问题来了, 究竟是哪个程序或者哪个代码导致的呢?
抱歉, 我现在也还不知道...
理论上可以查,
但是上次去查的时候发现数据库显示的host对应机器的端口早就没东西了,
死无对证ing.
最后建议online DDL前,最好确认一下当前数据库有没有类似table metadata lock存在
最好的方案还是主从切换来搞
全文完.
mysql ddl 锁_MySQL Online DDL导致全局锁表案例分析相关推荐
- mysql行锁索引问题_Mysql锁机制--索引失效导致行锁变表锁
=============== Tips:在阅读本文前,最好先阅读 这篇(Mysql锁机制--行锁)文章~ 在上篇文章中,我们看到InnoDB默认的行锁可以使得操作不同行时不会产生相互影响.不会阻塞, ...
- mysql设置乐观锁_mysql数据库怎么设置乐观锁
乐观锁与悲观锁不同的是,它是一种逻辑上的锁,而不需要数据库提供锁机制来支持当数据很重要, 回滚或重试一次需要很大的开销时,需要保证操作的ACID性质, 此时应该采用悲观锁而当数据对即时的一致性要求不高 ...
- mysql limit优化_MySQL:教你学会如何做性能分析与查询优化
点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:mikevictor cnblogs.com/mikevictor07/p/7275 ...
- Synchronized代码块锁的是什么?全局锁?对象锁?
对象锁:锁的是这个对象. 全局锁:锁的是那个写了synchronized关键字的方法或者代码块. 这里主要去聊全局锁 当java关键字 Synchronized()代码块锁随便的一个类比如,Integ ...
- mysql frm 恢复_mysql 从 frm 文件恢复 table 表结构的3种方法
mysql 正常运行的时候,查看 table 的结构并不是困难的事. 但是有时 mysql 发生故障,这种方法便不再可行. 当遇到故障,通常使用新的 mysql 实例来恢复当前的数据. 建表是非常重要 ...
- 内存回收导致关键业务抖动案例分析-论云原生OS内存QoS保障
蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友.目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作. ## 导语 云原生场景,相比于传统的IDC场景,业务更 ...
- mysql ddl脚本_MySQL在线DDL gh-ost使用总结
背景: 作为一个DBA,大表的DDL的变更大部分都是使用Percona的pt-online-schema-change,本文说明下另一种工具gh-ost的使用:不依赖于触发器,是因为他是通过模拟从库, ...
- mysql gh 划线_MySQL在线DDL gh-ost 使用说明
3)使用说明:条件是操作的MySQL上需要的binlog模式是ROW.如果在一个从上测试也必须是ROW模式,还要开启log_slave_updates.根据上面的参数说明按照需求进行调整. 环境:主库 ...
- mysql查看ddl语句_mysql语句-DDL语句
SQL分类 1.DDL语句:数据定义语句,用来定义不同的数据段.数据库,表,列,索引等数据表对象,常用语句:create.drop.alter等. 2.DML语句:数据操作语句,用于添加.删除.更新和 ...
最新文章
- 《1---关于解决MySQL在控制台插入中文乱码问题》
- div在最顶层显示----弹出框效果
- js的arguments_javascript
- Asp.Net Core异常处理整理
- 程序员初试和复试_程序员因肌肉发达面试被质疑能力,网友:这做程序员有啥关系呢?...
- windows删除桌面ie_从Windows 8“开始”屏幕启动IE的桌面版本
- 山寨“饿了么”应用中添加菜品数量按钮效果
- machine learning for hacker记录(3) 贝叶斯分类器
- 9206 课堂笔记 综合演练 添加数据与非空验证
- Springboot-实现热部署
- alsa的动态库安装在哪里_linux 给运行程序指定动态库路径
- 江西省普通高考2021艺术楼统考成绩查询,统考成绩查询
- AI 改写《权力的游戏》结局,和编剧比谁更烂?
- php求add函数,PHP函数每日一贴之字符串函数-addcslashes()函数
- UEFI中的Protocol
- 登录页面加密token和盐的作用
- swift学习之数组、字典和字符串
- 《文明之光》第六章读书笔记
- 资源网站模板Emlog程序zytheme模板
- 向毕业妥协系列之深度学习笔记(三)DL的实用层面(上)
热门文章
- html-页面结构分析
- 运营商服务器系统,浪潮服务器助力运营商三大支撑系统上云
- android 各版本市占率,Android各版本市占率:果冻豆遥遥领先
- c++如何显示图片_Vue+laravel后端添加商品后图片如何显示?
- php网页执行流程,PHP程序的执行流程
- 怎么将sql语句转化成语法树_数据库如何解析执行SQL
- html5 判断分享,好程序员HTML5大前端分享之函数篇
- 防止头文件重复包含之pragma once与#ifndef
- php keep user login,php5.4安装dedecms登录后台空白解决办法(session_register函数已废弃)...
- 计算机能力提升研修总结ppt,信息技术能力提升研修总结