MySQL:master线程统计/RW-LOCK统计/page分配 问题

一、问题来源

问1 ,为啥5.7的这个值为0


image.png

问2:为啥8.0的这个值为0

image.png

二、关于RW LOCK

其实Innodb中并发控制结构分为rw lock,mutex(TTASEventMutex)和event(带有条件变量),主要作为Innodb的并发访问控制,这部分非常复杂,还需要学习,我们通常在show engine innodb中看到的mutex或者rw lock就是他们。比如:

  • rw lock其中一个作用就是作为buffer page(BPageLock)的保护,通常用于page的并发访问,比如修改和读取buffer page需要上不同的锁。
  • mutex其中一个作用就是作为buffer block(BPageMutex 类型为TTASEventMutex)的保护,比如需要修改/访问 block io fix部分则需要加这个锁。

rw lock和mutex(TTASEventMutex)都会接受参数的控制:

| innodb_spin_wait_delay             | 6     |
| innodb_sync_spin_loops             | 30    |

逻辑大概如下:

rw_lock_s_lock_spin 函数
如果第一次获取失败
  开启spin获取,则spins+1
    一层循环开启:
      二层循环,循环次数为srv_n_spin_wait_rounds(sync_spin_loops)
        等待每次等待时长srv_spin_wait_delay(大概为空循环的次数默认为6(srv_spin_wait_delay)*50(srv_spin_wait_pause_multiplier) 300次)
        如果获取了lock的使用权则结束二层循环
        否则需要等满srv_n_spin_wait_rounds
      如果等待满srv_n_spin_wait_rounds,则归还
      CPU给操作系统,等待下次CPU的调度
      再次调度的时候,rounds+1
      再次尝试获取锁资源如果获取成功,则退出一层循环
      如果获取锁资源如果获取失败,则OS waits+1,且进入muext等待
      ->sync_array_wait_event(sync_arr, cell); //等待唤醒,唤醒后继续判断,存在多个线程同时竞争的情况
      唤醒后再次循环二层循环,尝试获取锁资源      
    一层继续循环

sync_spin_loops的内部定义为srv_n_spin_wait_rounds
如果我们将经历srv_n_spin_wait_rounds*srv_spin_wait_delay*srv_spin_wait_pause_multiplier:
默认为30*6*50=9000(代码中)
看做一轮等待。那么从逻辑来看定义如下:

  • spins代表是spin获取的次数,如果第一次就获取成功了则这里是为0的
  • rounds代表是经历多少轮数才获取到lock的使用权。当然最后一轮可能提前获取到使用权。
  • OS waits代表是经历了多少轮的等待才获取了lock的使用权。

那么有如下结论

  • spins越少越好,代表第一次获取成功了
  • OS waits大量少于rounds越好,代表偶虽然第一次获取失败,但是第spin一次就获取成功了

但是myql 5.7中spins中关于x lock和s lock 对于这个计数是没有做的,8.0.23有计数。所以5.7这里可能是0。

并且注意这里是RW-LATCH INFO因此mutex是不包含的。

三、关于8.0 master线程的简析

master线程主要是每秒醒来干活,包含:

  • changer buffer 合并
  • flush redo
  • 唤醒purge线程干活
  • checkpoint(8.0剥离成了单独的checkpoint线程)

但是其中包含active和idle的方式,其判断主要是arcive计数器和上次是否相同,不相同则是active方式。那么我看了一下如下情况会进入active方式:

  • 事务提交一次,增加一次active计数。
  • update/delete/insert 总数超过了2的32次方就增加一次active计数。
  • 出现rollback,每行记录都会触发增加一次active计数。
  • innodb关闭表,增加一次active计数。

我们实际上可以从这个信息大概可以看出数据库数据的繁忙程度。但是在8.0中全局变量srv_log_writes_and_flush并没有做任何修改,因此初始化为0它一值都是0。5.6 5.7是有修改的,但是值没有什么意义就是 srv_active+ srv_idle,代表master线程触发的写盘操作。

四、page分配内存

(buf_page_get_gen->buf_buddy_alloc_low)

  1. 首先从freelist中获取块,不能获取则转下一个逻辑
  2. 从LRU中获取,受到参数innodb_lru_scan_depth的影响表示每次检查的块的数量,其中有一些条件不能获取
    • 块本生是脏块
    • 块本生被io fix了
      如果获取成功将从hash table中去掉,并且从lru放到free list中如果循环完整个LRU链表都不能获取则转下一个逻辑
  3. 如果扫描了整个LRU都不能获取,那么说明块可能脏块比较多了进行单块刷盘,这个时候是直接fsync了(buf_flush_single_page_from_LRU)

其他:

8.0.23
    mutex_enter(&buf_pool->flush_state_mutex); //为TTASEventMutex

      os_event_reset(buf_pool->no_flush[flush_type]); //为os_event  不受spin参数影响,例子https://www.jianshu.com/p/24b212286a1b

那么研究方向应该是TTASEventMutex\rw lock\os_event 各自的实现

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容