mysql-5.7 innodb 的并行任务调度详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql-5.7 innodb 的并行任务调度详解相关的知识,希望对你有一定的参考价值。

一、innodb并行任务调度是什么:

  这里要“考古”一下了,不然问题说不清楚。上大学的时候老师和我们说最初的计算机只有一个核心,并且一次也只能做一件事,

  如果你有两件事要用到计算机,在第一件事没有做完之前,后面那件事只能等着。后来呀,计算机就进化了一把,计算机不再

  是把一件是做完之后,再去做第二件事,而是一件事只做一段非常短的时间,并不关心这件事有没有做完,它就会去做第二件

  事,同样第二件事也只做一段非常短的时间,就回过头去做第一件事;

 

  虽然事实上两件事是交错着做的,由于第一件事都只做一段非常短的时间,所以整体上看起来,两件事是同时都有取得进展的

  上面所用到的一个词“一段非常短的时间”,用专业点的话来说就是“时间片”,也就是说每一个任务(事)只会在计算机(cpu)上执

  一个时间片这么久,就要被中断,把计算能力让给别的任务,上面的例子为了方便说明我们只是举了两个任务,事实上多个任务

  也就这样的,一个任务执行一段时间,就执行下一个任务。

 

  计算机的进化还没有终结,后来的cpu不只是才一个核心,而是有了多个核心,这样计算机就可以有更高的并行度了,任务的调

  度算法还是根据时间片那一套来的,这个也从侧面这种算法也是当前比较好靠谱的了。

 

  innodb 任务的调度和上面所说的cpu的任务调度在设计思想上是一样的,innodb会把任务放心一个任务队列中,每次会有m个

  任务有时间片,也就是说每次会有m个任务同时在做;

 

二、innodb 这种调度方式会有什么问题

  由上面所说的innodb每次会有m个任务在执行,如果这个m太大,那么cpu上下文切换就会频繁,这样的话高并行度反而会影响

  mysql 性能。

 

三、控制innodb并行度与任务调试的相关参数:

  1、innodb_thread_concurrency  控制着innodb一次并行执行多少任务,也就是多每次最多,多少个任务可以拿到时间片

  这个值也就是上文中所提到的m,如果这个值是0表示意思和m=无穷大是一样的。

  2、innodb_concurrency_tickets  这个参数定义着每一个任务时间片的长度。

  3、innodb_thread_sleep_delay   这个参数说的是当innodb已经同时有innodb_thread_concurrency个任务在执行了,新

  的任务来临时,这个新的任务要等innodb_thread_sleep_delay 这么久才能进行innodb的调度队列。

  4、innodb_adaptive_max_sleep_delay  确实上面的这些参数大多是用来吹水的,管理员通常不会知道对于一个给定的库

  上面这三个参数各个多大才最合理,一方便源于业务的周期性波动,可能白天的时候任务重,晚上的时候没人用,没有那一个

  值能适用这么宽的范围。而innodb_adaptive_max_sleep_delay它用于设定管理员容忍极限,例如把innodb_adaptive_max_sleep_delay

  设定成150000就是说,任何一个任务在150000微秒后一定要被加入到innodb调度队列。

 

 

----

交通学习&打赏

技术分享技术分享

 

以上是关于mysql-5.7 innodb 的并行任务调度详解的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 5.7 优化InnoDB配置

mysql-5.7 show engine innodb status 详解

MySQL 5.7 innodb全文索引

MySQL InnoDB Cluser | Mysql 5.7 集群

mysql 5.7 innodb memcached plugin 支持内存数据库

MySQL-5.7设置InnoDB表数据文件存储位置