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 慢查询日志深入理解)
- windows mysql 忘记密码(解决MySQL忘记密码问题的方法)
- mysql5.7详细安装教程(MySQL5.7.33安装过程图文详解)
- mysqldecimal类型数据转换(mysql decimal数据类型转换的实现)
- mysqltimestamp如何比较(为什么MySQL 使用timestamp可以无视时区问题.)
- mysql数据表怎么复制(MySQL 复制表的方法)
- 如何查看mysql执行计划(到底什么是Mysql执行计划?)
- mysql触发器入门(MySQL中触发器和游标的介绍与使用)
- python mysql配置(详解python校验SQL脚本命名规则)
- mysql limit越大越慢(MySQL limit分页大偏移量慢的原因及优化方案)
- mysql查询很慢怎么回事(MySQL Like模糊查询速度太慢如何解决)
- idea向数据库中插入中文报错(Idea连接MySQL数据库出现中文乱码的问题)
- 创建数据库入门教程mysql(MySQL数据库安装教程一学就会)
- navicat不能连接到mysql报错2013(Navicat连接SQL Server数据:报错08001-命名管道提供程序的完美解决方法)
- mysql的简单介绍(MySQL Shell的介绍以及安装)
- mysql数据库如何删除重复记录(mysql数据库删除重复数据只保留一条方法实例)
- 今日大雪,大雪养生这样做,一年都有好气色(大雪养生这样做)
- 粗盐是什么 粗盐的功效与作用(粗盐的功效与作用)
- 会 吃人 的客机 从天堂到地狱只需5分钟,图-104如何做到(会吃人的客机)
- 男人犯的错,为什么要女人来承担(为什么要女人来承担)
- 心理学 四个金蟾,哪个最招财 测你今生的运势有多棒(心理学四个金蟾)
- 吉善缘《聚宝金蟾》金蟾招财摆件 三足全铜蟾蜍客厅店铺开业礼品(吉善缘聚宝金蟾金蟾招财摆件)
热门推荐
- sqlserver字符串格式化(SQL server中字符串逗号分隔函数分享)
- canvas指定区域生成图片(canvas实现图片镜像翻转的2种方式)
- dedecms添加板块(DedeCMS关键词替换问题较完美解决方法)
- html5发送文字特效(HTML5调用手机发短信和打电话功能)
- centos搭建sftp服务器(Linux云服务器搭建SFTP服务器图片服务器的操作)
- html元素和属性的区别(HTML5 HTMLCollection和NodeList的区别详解)
- 终于有人将mysql 索引讲清楚了(MySQL 索引的一些细节分享)
- dedecms自定义联动类别方法(DEDECMS点击主栏目默认显示第一个子栏目列表的方法)
- SQL Server中@@ROWCOUNT的用法
- python浪漫表白源码(python七夕浪漫表白源码)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9