前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[MYSQL] select导致主从延迟增大 (原因:autocommit=off)

[MYSQL] select导致主从延迟增大 (原因:autocommit=off)

原创
作者头像
大大刺猬
发布2024-06-21 11:17:04
870
发布2024-06-21 11:17:04
举报
文章被收录于专栏:大大刺猬大大刺猬

导读

之前也有遇到从库select导致从库延迟的, 那是因为从库的select数据量太大, 锁还没释放. 本次又遇到个类似的案例, 也是select导致从库延迟太大.

现象

客户环境不方便截图, 就用文字描述了. 或者直接看复现过程也行.

主库执行insert数据, 从库select验证, 主库再执行drop table操作, 从库验证时发现未能drop掉, 且延迟在增大, show processlist能看到 Waiting for table metadata lock.

分析

其实我们查询元数据锁相关的表, 就能找到相关的会话了. 但我show processlist看到的会话就只有 我的连接 和 主从相关的进程, 难道是我阻塞了(select未释放相关资源)? 但我select已经结束了啊. 这就奇怪了.

我们还是查询一下元数据锁相关的表/视图吧, select * from sys.schema_table_lock_waits\G 查询发现确实是在等一个连接, 而那个连接确实是我的连接. 查询information_schema.innodb_trx找到我们的事务是RUNNING状态, 再查询performance_schema.events_statements_current 发现我们最近跑的一条SQL确实是查询那个表的... 也就是确实是我们的select阻塞了.

复现/模拟

本次就不适用主从模拟了, 而使用两个会话模拟, 只要是阻塞了就行

代码语言:sql
复制
-- session 1
set session autocommit = 0;
select * from db1.t2 limit 1;

-- session 2
drop table db1.t2; -- 将会被阻塞

show processlist

光看这个图还是比较有迷惑性的(如果把上面的autocommit遮住的话)

查询元数据锁 sys.schema_table_lock_waits

这里就已经能看到阻塞的会话就是咱自己....是谁阻塞了我, 是我阻塞了我

也可以查询performanceschema.events_statements* 看看具体的SQL.

总结

基础不牢, 地动山摇.

生产环境还是不容易见到的. 条件: 某事务在查询将要删除的表, 但未提交.

同事在oracle上也测试了下, 发现select未提交 不影响drop操作.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 现象
  • 分析
  • 复现/模拟
  • 总结
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档