mysql 死锁查询(MySQL slave 延迟一列 外键检查和自增加锁)
类别:数据库 浏览量:2995
时间:2021-10-09 00:47:59 mysql 死锁查询
MySQL slave 延迟一列 外键检查和自增加锁目录
- MySQL slave 延迟 外键检查和自增加锁
- 一、现象
- 二、pscak 采样
- 三、自增锁获取逻辑
- 四、方案
一、现象
延迟大,大事物。
- 表结构
- 无IO
- SQL THREAD占用CPU 100%
二、pscak 采样
采样30个点
- 外键检查 占70%
- 自增锁获取 占30%
三、自增锁获取逻辑
逻辑如下其实也是innodb_autoinc_lock_mode参数的作用
switch (lock_mode) { case AUTOINC_NO_LOCKING://innodb_autoinc_lock_mode=2 /* Acquire only the AUTOINC mutex. */ dict_table_autoinc_lock(m_prebuilt->table); break; case AUTOINC_NEW_STYLE_LOCKING: // innodb_autoinc_lock_mode=1 注意这里没有break 巧妙的完成了逻辑 /* For simple (single/multi) row INSERTs, we fallback to the old style only if another transaction has already acquired the AUTOINC lock on behalf of a LOAD FILE or INSERT ... SELECT etc. type of statement. */ if (thd_sql_command(m_user_thd) == SQLCOM_INSERT || thd_sql_command(m_user_thd) == SQLCOM_REPLACE) { dict_table_t* ib_table = m_prebuilt->table; /* Acquire the AUTOINC mutex. */ dict_table_autoinc_lock(ib_table); /* We need to check that another transaction isn't already holding the AUTOINC lock on the table. */ if (ib_table->n_waiting_or_granted_auto_inc_locks) { /* Release the mutex to avoid deadlocks. */ dict_table_autoinc_unlock(ib_table); } else { break; } } /* Fall through to old style locking. */ case AUTOINC_OLD_STYLE_LOCKING://innodb_autoinc_lock_mode=0 触发 DBUG_EXECUTE_IF("die_if_autoinc_old_lock_style_used", ut_ad(0);); error = row_lock_table_autoinc_for_mysql(m_prebuilt); //这个函数上表上的自增锁 if (error == DB_SUCCESS) { /* Acquire the AUTOINC mutex. */ dict_table_autoinc_lock(m_prebuilt->table); } break; default: ut_error; }
binlog row格式,innodb_autoinc_lock_mode=1 按理说不会触发row_lock_table_autoinc_for_mysql加自增锁。不知道什么原因。当前知道:
- 如果主库语句模式,从库innodb_autoinc_lock_mode=1 ,insert select 肯定会触发。
- 如果从库 innodb_autoinc_lock_mode=0 肯定会触发。
但是都不满足。疑惑。
四、方案
删除外键
innodb_autoinc_lock_mode设置为2,从逻辑来看肯定不会做row_lock_table_autoinc_for_mysql了。
到此这篇关于MySQL slave 延迟一列 外键检查和自增加锁的文章就介绍到这了,更多相关MySQL slave 延迟 外键检查和自增加锁内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- mysql语句运行顺序(浅谈mysql执行过程以及顺序)
- mysql中常用的三种存储引擎的区别(MySQL 存储过程的优缺点分析)
- mysql 分片键规则(MySql8 WITH RECURSIVE递归查询父子集的方法)
- mysql根据子节点查询父节点(mysql 递归查找菜单节点的所有子节点的方法)
- mysqlinnodb锁使用教程(MySQL Innodb关键特性之插入缓冲insert buffer)
- mysql索引原理和优化(Mysql 索引该如何设计与优化)
- linuxmysql怎么设置root密码(Linux mysql-5.6如何实现重置root密码)
- mysql查询count很慢(MySQL COUNT函数的使用与优化)
- mysql的存储方法(MySQL中的binary类型使用操作)
- mysql快速备份数据(如何使用Maxwell实时同步mysql数据)
- mysql怎么设置存储记录(MySQL 的一行记录是怎么存储的?)
- mysql学习之索引介绍及其原理(MySQL学习教程之聚簇索引)
- mysql索引b+树和b树(MySQL使用B+Tree当索引的优势有哪些)
- mysql备份工具怎么选(MySQL使用Xtrabackup备份流程详解)
- 停止mysql服务命令(windows下实现定时重启Apache与MySQL方法)
- mysql里修改密码命令(MySQL修改账号密码方法大全小结)
- 挑战新国标电自天花板,九号机械师MMAX 110P深度体验(挑战新国标电自天花板)
- 《满江红》不要只当电影看,学生应该这样做(满江红不要只当电影看)
- 电影《民间怪谈录之走阴人》定档8月5日,开启一场中式惊悚之旅(电影民间怪谈录之走阴人定档8月5日)
- 原创图画书,以儿童视角讲述中国故事(以儿童视角讲述中国故事)
- 八月再见 愿你岁月不扰,余生静好(八月再见愿你岁月不扰)
- 赏读 八月再见,九月你好(赏读八月再见九月你好)
热门推荐
- 云服务器用什么配置(如何选择云服务器 云服务器配置怎么搭配)
- linux目录操作功能(Linux 目录结构详细介绍)
- thinkphp分页效果怎样(thinkphp5+layui实现的分页样式示例)
- Convert.ToInt32,int.Parse,int.TryParse,(int)的区别
- mysql数据类型
- mysql参数说明(MySQL中你可能忽略的COLLATION实例详解)
- 如何将数据从View传递到控制器
- mysql设置updatetime自动更新(mysql 实现添加时间自动添加更新时间自动更新操作)
- echarts 高级图表教程(Echarts图例组件的属性与源代码)
- 云服务器哪个公司适合做(企业云服务器适用企业有哪些?)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9