请选择 进入手机版 | 继续访问电脑版

[MsSql] MySQL slave 耽误 一列 外键检查和自增长 锁

[复制链接]
查看146 | 回复26 | 2021-9-17 12:15:52 | 显示全部楼层 |阅读模式
目次

MySQL slave 耽误 外键检查和自增长 锁

一、征象

  1. 延迟大,大事物。
复制代码
  • 表布局

MySQL slave 耽误
一列 外键检查和自增长
锁

  • 无IO

MySQL slave 耽误
一列 外键检查和自增长
锁

  • SQL THREAD占用CPU 100%

MySQL slave 耽误
一列 外键检查和自增长
锁

二、pscak 采样

  1. 采样30个点
复制代码
  • 外键检查 占70%

MySQL slave 耽误
一列 外键检查和自增长
锁

  • 自增锁获取 占30%

MySQL slave 耽误
一列 外键检查和自增长
锁

三、自增锁获取逻辑

逻辑如下实在 也是innodb_autoinc_lock_mode参数的作用

  1. switch (lock_mode) {
  2. case AUTOINC_NO_LOCKING://innodb_autoinc_lock_mode=2
  3. /* Acquire only the AUTOINC mutex. */
  4. dict_table_autoinc_lock(m_prebuilt->table);
  5. break;
  6. case AUTOINC_NEW_STYLE_LOCKING: // innodb_autoinc_lock_mode=1 注意这里没有break 巧妙的完成了逻辑
  7. /* For simple (single/multi) row INSERTs, we fallback to the
  8. old style only if another transaction has already acquired
  9. the AUTOINC lock on behalf of a LOAD FILE or INSERT ... SELECT
  10. etc. type of statement. */
  11. if (thd_sql_command(m_user_thd) == SQLCOM_INSERT
  12. || thd_sql_command(m_user_thd) == SQLCOM_REPLACE) {
  13. dict_table_t* ib_table = m_prebuilt->table;
  14. /* Acquire the AUTOINC mutex. */
  15. dict_table_autoinc_lock(ib_table);
  16. /* We need to check that another transaction isn't
  17. already holding the AUTOINC lock on the table. */
  18. if (ib_table->n_waiting_or_granted_auto_inc_locks) {
  19. /* Release the mutex to avoid deadlocks. */
  20. dict_table_autoinc_unlock(ib_table);
  21. } else {
  22. break;
  23. }
  24. }
  25. /* Fall through to old style locking. */
  26. case AUTOINC_OLD_STYLE_LOCKING://innodb_autoinc_lock_mode=0 触发
  27. DBUG_EXECUTE_IF("die_if_autoinc_old_lock_style_used",
  28. ut_ad(0););
  29. error = row_lock_table_autoinc_for_mysql(m_prebuilt); //这个函数上表上的自增锁
  30. if (error == DB_SUCCESS) {
  31. /* Acquire the AUTOINC mutex. */
  32. dict_table_autoinc_lock(m_prebuilt->table);
  33. }
  34. break;
  35. default:
  36. ut_error;
  37. }
复制代码

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 肯定会触发。

但是都不满意 。迷惑 。

四、方案

  1. 删除外键
  2. innodb_autoinc_lock_mode设置为2,从逻辑来看肯定不会做row_lock_table_autoinc_for_mysql了。
复制代码

到此这篇关于MySQL slave 耽误 一列 外键检查和自增长 锁的文章就先容 到这了,更多干系 MySQL slave 耽误 外键检查和自增长 锁内容请搜索 脚本之家从前 的文章或继续欣赏 下面的干系 文章渴望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 紫影蓝星惹 | 2021-9-17 17:52:04 | 显示全部楼层
顶一个!
回复

使用道具 举报

avatar 海田1 | 2021-9-18 03:02:34 | 显示全部楼层
顶!顶!顶!
回复

使用道具 举报

avatar 消敢市音 | 2021-9-20 13:59:19 | 显示全部楼层
admin楼主是好人!
回复

使用道具 举报

avatar Gemini迷妹 | 2021-9-20 13:59:23 | 显示全部楼层
十分赞同admin楼主!
回复

使用道具 举报

avatar 塔米酉 | 2021-9-20 22:19:17 | 显示全部楼层
今天过得很不爽!
回复

使用道具 举报

avatar 笑到呆萌 | 2021-9-24 10:45:18 | 显示全部楼层
楼上的忘记吃药了!
回复

使用道具 举报

avatar 尹泽汐猩 | 2021-9-28 02:41:44 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的源码论坛他的站点都是商业源码,还是免费下载的那种!特别好用。访问地址:http://www.mxswl.com 猫先森网络
回复

使用道具 举报

avatar 王太保 | 2021-9-29 19:41:24 | 显示全部楼层
怪事年年有,今年特别多!
回复

使用道具 举报

avatar 茹蕙zx | 2021-10-1 22:57:41 | 显示全部楼层
收藏了,怕admin楼主删了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则