zoukankan      html  css  js  c++  java
  • 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调度队列。

    ----

    交通学习&打赏

  • 相关阅读:
    序列化 Serialization
    http soap关系
    sql 查询
    返回最后插入到标识列的值(scope_identity.ident_current.@@identity)
    匿名方法
    九、volatile与Java内存模型
    八、Java内存模型JMM
    十、CAS
    CUSTOM ROUTE CONSTRAINTS
    获取本地数据库
  • 原文地址:https://www.cnblogs.com/JiangLe/p/7509798.html
Copyright © 2011-2022 走看看