MySQL slave 延迟一列 外键检查和自增加锁_MsSql

来源:脚本之家  责任编辑:小易  
目录
MySQL slave 延迟 外键检查和自增加锁一、现象
二、pscak 采样
三、自增锁获取逻辑四、方案

MySQL slave 延迟 外键检查和自增加锁

一、现象

延迟大,大事物。

表结构

无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出现Waiting for table metadata lock的原因方法MySQL表结构变更你不可不知的Metadata Lock详解MYSQL METADATA LOCK(MDL LOCK)MDL锁问题分析浅谈MySQL next-key lock 加锁范围MySQL 加锁控制并发的方法PHP+MySQL高并发加锁事务处理问题解决方法MYSQL METADATA LOCK(MDL LOCK) 理论及加锁类型测试

  • 本文相关:
  • 大数据量分页存储过程效率测试附测试代码与结果
  • 浅谈sqlserver下float的不确定性
  • sqlserver触发器创建、删除、修改、查看示例代码
  • 通过使用正确的search arguments来提高sql server数据库的性能
  • mssql case,group by用法
  • 使用 top 子句限制update 语句更新的数据
  • sqlserver数据库中的5173错误解决方法
  • sqlserver数据库获取数据库信息
  • 谈谈tempdb对sql server性能优化有何影响
  • sql中时间以5分钟半个小时任意间隔分组的实现方法
  • mysql 存储过程动态指明表名字。谢谢。
  • window mysql和mariadb可以同时安装吗
  • MySQl的配置要点是什么? 请详细说一下。
  • mysql用命令行创建完数据库后 怎么知道数据存在哪里
  • 安装MySQL时总出现这样的问题是为什么
  • 求PHP商城SKU的代码和mysql数据库
  • mysql里写SELECT top 1 * FROM user ORDER BY id desc;怎么...
  • MYSQL如何把两个结构相同的表组成一个表查询
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页mssqlmysql出现waiting for table metadata lock的原因方法mysql表结构变更你不可不知的metadata lock详解mysql metadata lock(mdl lock)mdl锁问题分析浅谈mysql next-key lock 加锁范围mysql 加锁控制并发的方法php+mysql高并发加锁事务处理问题解决方法mysql metadata lock(mdl lock) 理论及加锁类型测试大数据量分页存储过程效率测试附测试代码与结果浅谈sqlserver下float的不确定性sqlserver触发器创建、删除、修改、查看示例代码mssql case,group by用法使用 top 子句限制update 语句更新的数据sqlserver数据库中的5173错误解决方法sqlserver数据库获取数据库信息谈谈tempdb对sql server性能优化有何影响sql中时间以5分钟半个小时任意间隔分组的实现方法sql server 2012 安装图解教程(附sql server数据库入门学习总结microsoft sql server 2012 数据win7系统安装sqlserver2000的详细sql重复记录查询的几种方法sqlserver中distinct的用法(不重sql server错误代码大全及解释(sql-order by 多字段排序(升序、sql将一个表中的数据插入到另一个用sql语句添加删除修改字段、一些sql语句练习实例之三——平均销售等待时间数据库触发器db2和sqlserver有哪些区别sqlserver中防止并发插入重复数据的方法详由于系统错误 126 (sql server),指定驱动select * from sp_who的解决方案数据库备份 sqlserver的备份和灾难恢复设置密码保护的sqlserver数据库备份文件与一道关于数据库(经典父子级 id 关联)更新sql语句中如何将datetime格式的日期转换为sql server的链接服务器技术小结
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved