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的性能
    

  • 相关阅读:
    SCI写作经典替换词,瞬间高大上!(转)
    最佳化常用测试函数 Optimization Test functions
    算法复杂度速查表
    VS 代码行统计
    CPLEX IDE 菜单栏语言设置( 中文 英文 韩文 等多国语言 设置)
    如何从PDF文件中提取矢量图
    Matlab无法打开M文件的错误( Undefined function or method 'uiopen' for input arguments of type 'char)
    visual studio 资源视图 空白 解决方案
    MFC DialogBar 按钮灰色不响应
    嗨翻C语言笔记(二)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13350643.html
Copyright © 2011-2022 走看看