zoukankan      html  css  js  c++  java
  • 14.4.6 Configuring Thread Concurrency for InnoDB 配置Thread 并发

    14.4.6 Configuring Thread Concurrency for InnoDB  配置Thread 并发
    
    InnoDB 使用操作系统threads 来处理用户的事务请求。(事务可以执行很多请求到InnoDB 在它们提交或者回
    
    滚前)
    
    在现代的操作系统和多核服务器,
     上下文切换是有效的,很多的负载运行很多在没有任何并发数限制。
    
    
    可扩展性改进在MySQL 5.5和以上版本按降低了并发数量的限制
    
    
    它是有助于减少上下文切换在threads之间,InnoDB 可以使用一些技术来限制并发执行操作系统threads的数
    
    量
    (因此,在任何一个时间点处理的请求数).
    
    当InnoDB 接收一个新的请求从一个用户会话,如果threads的并发数量在一个预先定义的限制,
    
    
    新的请求sleep 短暂的时间在它再次尝试之前,请求不能被重新安排在sleep 被放入到 first-in/first-out  
    
    队列
    你可以限制并发线程数 通过设置 
    
    innodb_thread_concurrency.
    
    
    
    mysql> show variables like '%innodb_thread_concurrency%';
    +---------------------------+-------+
    | Variable_name             | Value |
    +---------------------------+-------+
    | innodb_thread_concurrency | 0     |
    +---------------------------+-------+
    1 row in set (0.00 sec)
    
    
    
    一旦 执行的threads 达到这个限制,额外的threads 会等待数微妙,
    
    
    
    
    此前, 它需要经验来找到优化的值对于innodb_thread_sleep_delay,
    
    
    优化的值可以改变依赖复杂, 在MySQL 5.6.3 和更高的版本,你可以设置配置选项
    
    innodb_adaptive_max_sleep_delay
    
    
    到允许的对于innodb_thread_sleep_delay,
    
    InnoDB 自动调整innodb_thread_sleep_delay 高或者低 依赖于当前的thread-scheduling activity
    
    
    
    这个动态调整有助于thread scheduling  机制来工作平顺的 在系统是负载较轻的和接近于满负荷
    
    
    InnoDB 使线程sleep只有当 并发的线程数受限制, 当对于线程数没有限制的时候,
    
    所有的线程都会被调度。也就是说, 如果 innodb_thread_concurrency是0,
    
    
    innodb_thread_sleep_delay 会被忽略。
    
    
    当这里有限制限制时( 当innodb_thread_concurrency  值大于0),
    
    InnoDB 降低上下文负载通过允许多个请求 在单个SQL语句执行期间来进入InnoDB 没有关注
    
    innodb_thread_concurrency的设置。
    
    因为一个SQL语句(比如一个关联)
    可能 包含多个行记录在InnoDB,InnoDB 分配一个指定数量的tickets
    
    允许一个线程被调度多次 以最小的开销
    
    
    当一个SQL 语句启动, 一个thread 没有tickets, 它必须观察innodb_thread_concurrency。
    
    一旦线程有权进入InnoDB, 它会被分配一个 rickets的number 可以用于随后进入InnoDB 来执行记录操作。
    
    
    如果tickets 用完, thread 被驱逐,innodb_thread_concurrency 再次观察,可以放置thread 到
    
    等待thread 的first-in/first-out queue。
    
    
    当thread 是再次允许进入InnoDB, tickets 再次被分配。
    
    分配的tickets 的数量是通过全局变量  innodb_concurrency_tickets指定,默认是5000
    
    
    mysql> show variables like '%innodb_concurrency_tickets%';
    +----------------------------+-------+
    | Variable_name              | Value |
    +----------------------------+-------+
    | innodb_concurrency_tickets | 5000  |
    +----------------------------+-------+
    1 row in set (0.00 sec)
    
    
    一个thread 等待一个lock 是给一个ticket 一旦locks 变的可用
    
    那些变量的争取的值依赖你的环境和负载, 尝试一些不同的值来决定最合适的值对你的应用。
    
    
    在限制并发执行threads的数量, 重新查询配置选项 可能改善InnoDB的性能
    

  • 相关阅读:
    python2在安装pywin32后出现ImportError: DLL load failed 解决方法
    selenium webdriver 启动三大浏览器Firefox,Chrome,IE
    windows下创建Python虚拟环境
    个人随笔
    在Pycharm中使用jupyter笔记本
    python之socket网络编程
    如何创建一个Django项目
    在Ubuntu终端彻底删除软件
    Ubuntu16.04下安装redis
    postgresql11 查看表结构和系统视图
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/6199786.html
Copyright © 2011-2022 走看看