可以通过innodb_thread_concurrency 来调节  并发线程数的限制值,使用innodb_thread_sleep_delay来调整当 并发 thread 到达 innodb_thread_concurrency时需要sleep的时间。当请求被innodb接受的时候,会获得一个 消费凭证 innodb_concurrency_tickets (默认5000次),当这个请求中有多个SQL被执行的时候,每执行一次,消费一次tickets,在次数用完之前,该线程重新请求时无须再进行前面 thread 是否达到 并发限制值的检查。

同时innodb_commit_concurrency也控制了多线程并发提交的数量。如果 innodb_thread_concurrency  设置的有点大innodb_commit_concurrency应该做出相应的调整,否则会造成大量线程阻塞。

所以,跟并发相关的有这几个参数设置:innodb_thread_concurrency、innodb_thread_sleep_delay、innodb_concurrency_tickets、innodb_commit_concurrency。

跟innodb_thread_concurrency相似的参数有 thread_concurrency ,但是它在5.6版本的官方文档中已被标识为过时,在5.7.2版本废除了该参数,所以我们这里不涉及对该参数的测试及描述。

2 参数设置

2.1 innodb_thread_concurrency

2.1.1 默认值

innodb_thread_concurrency默认是0,则表示没有并发线程数限制,所有请求都会直接请求线程执行。注意:当 innodb_thread_concurrency 设置为0时,则innodb_thread_sleep_delay的设置将会被忽略,不起作用。如果数据库没出现性能问题时,使用默认值即可。

2.1.2 大于0

当innodb_thread_concurrency>0,则表示有 并发数限制,当一个新的请求发起时,会检查当前并发线程数是否达到了 innodb_thread_concurrency的限制值,如果有,则需要sleep一段时间(sleep的设置详见下一部分),然后再再次请求,如果再次请求时,当前并发数还是达到限制值,那么就会进入FIFO队列等待执行。当进入到内核执行时,会得到一个 消费凭证 ticket,则这个线程,在后面的多次进入innodb执行操作是都不需要重复上面的检查步骤,当把次数消费完,那么这个线程就会被驱逐,等待下次再次进入Innodb,再重新分配ticket。

2.1.3 建议配置(来自官网)

当并发用户线程数量小于64,建议设置innodb_thread_concurrency=0;

如果负载不稳定,时而低,时而高到峰值,建议先设置innodb_thread_concurrency=128,并通过不断的降低这个参数,96, 80, 64等等,直到发现能够提供最佳性能的线程数,例如,假设系统通常有40到50个用户,但定期的数量增加至60,70,甚至200。你会发现,性能在80个并发用户设置时表现稳定,如果高于这个数,性能反而下降。在这种情况下,建议设置innodb_thread_concurrency参数为80,以避免影响性能;

如果DB服务器上还允许其他应用,需要限制mysql的线程使用情况,则可以设置可分配给DB的线程数,但是不建议DB上跑其他应用,也不建议这么设置,因为这样可能导致数据库没有对硬件最优使用;

设置过高值,可能会因为系统资源内部争夺导致性能下降;

在大多数情况下,最佳的值是小于并接近虚拟CPU的个数;

定期监控和分析DB,因为随着数据库负载的变化,业务的增加,innodb_thread_concurrency也需要动态的调整。

2.2 innodb_thread_sleep_delay

5.6.3版本前,需要反复测试才能确定innodb_thread_sleep_delay值,并且固定为一个值,在5.6.3版本后,因为 Innodb 自动调整innodb_thread_sleep_delay参数:

Innodb_adaptive_max_sleep_delay:最大sleep的时间,微秒为单位

可以通过设置参数 innodb_adaptive_max_sleep_delay 来限制 innodb_thread_sleep_delay的最大值,不设置 innodb_thread_sleep_delay的取值情况,让Innodb自动跟进负载来调整,当系统负荷较高时,Innodb动态调整slee时间可使得数据库稳定运行。

2.3 innodb_commit_concurrency

该值只能为默认值0,mysql不限制并发提交。大于0表示允许N个事务在同一时间点提交,N的范围是0-1000。

注意事项:mysqld运行时,不许把innodb_commit_concurrency 的值从0改为非0,或非0的值改为0;但允许从N改为M(N及M均大于0)

2.4 innodb_concurrency_tickets

默认是5000(基于5.6,5.7)。

如果innodb_concurrency_tickets设置小些,适用于小事物操作较多的系统,可以快速使用完线程后退出来,提供给其他请求使用;而对于大事务来说,可能会循环进入等待队列中等待执行完成,这会耗费更多时间及资源;如果innodb_concurrency_tickets设置大些,适用于大事务频繁操作的系统,这样大事务则不需要频繁进入queue等待队列,可以通过较少的请求来处理;但是对于小事务来说,则意味着他们要等待更长的时候,才能排队进入到内核执行。所以,当innodb_thread_concurrency>0时,需要上下调整 innodb_concurrency_tickets ,使其达到最佳性能。可以通过show engine innodb status 的queue查看,也可以通过INFORMATION_SCHEMA.INNODB_TRX 的TRX_CONCURRENCY_TICKETS查看消费次数情况。

MySQL Innodb 并发涉及参数

标签:delay   show   span   com   线程阻塞   dev   应用   范围   max

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:http://www.cnblogs.com/xinysu/p/6439715.html

mysql并发参数查看_MySQL Innodb 并发涉及参数相关推荐

  1. mysql 优化300例_MySQL配置文件my.cnf参数优化和中文详解

    Mysql参数优化对于新手来讲,是比较难懂的东西,其实这个参数优化,是个很复杂的东西,对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一次性完成,需要不断的 ...

  2. mysql排序规则查看_MySQL 查看编码 排序规则

    mysql show variables Variable_name Value collation_connection utf8_general_ci collation_database utf ...

  3. mysql innodb 并发插入问题_包大量死锁错误_mysql innodb 并发插入问题,包大量死锁错误...

    开了10个并发写线程,没1000条记录批量提交一次,结果mysql包大量死锁错误! "Deadlock found when trying to get lock; try restarti ...

  4. mysql innodb 多线程插入_mysql innodb 并发插入问题,包大量死锁错误

    开了10个并发写线程,没1000条记录批量提交一次,结果mysql包大量死锁错误! "Deadlock found when trying to get lock; try restarti ...

  5. mysql optimize 参数查看_Mysql High Performance:Optimize Setting

    Tuning I/O 1. 影响同步数据到disc和恢复数据,因为涉及到了io,对性能影响非常大,其实是在性能与数据安全性上找一个平衡 2. MyISAM delay_key_write:延缓inde ...

  6. mysql高并发不用事务_Mysql高并发加锁事务处理

    # Mysql高并发加锁事务处理 MySQL 使用 SELECT - FOR UPDATE 做事务写入前的确认 以MySQL 的InnoDB 为例,预设的 Tansaction isolation l ...

  7. mysql 8 配置参数优化_MySQL性能优化之参数配置

    1.目的: 通过根据服务器目前状况,修改Mysql的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能. 2.服务器参数: 32G内存.4个CPU,每个CPU 8核. 3.MySQL目 ...

  8. mysql 散列查询_MySQL InnoDB中hash查找表的实现

    MySQL版本:5.7.14 源码位置为hash0hash.h hash0hash.cc 作为一种时间复杂度最优为O(1)的数据结构,但是最坏时间复杂对位O(n)的一种数据结构,但是在良好的设计has ...

  9. mysql必须的组件_mysql innodb的重要组件

    innodb包涵如下几个组件 一.innodb_buffer_pool: 1 它主要用来缓存数据与索引(准确的讲由于innodb中的表是由聚集索引组织的,所以数据只不是过主键这个索引的叶子结点). 二 ...

最新文章

  1. mysql command type_mysql command line client 使用命令
  2. [雪峰磁针石博客]2018最佳12个开源或免费web服务器和客户端性能测试工具
  3. 从子窗体传递数据给父窗体
  4. 2.图像作为函数 | 生成高斯噪音_8
  5. 使用正态分布变换(Normal Distributions Transform)进行点云配准
  6. Unity3D 4.x怎样实现动画的Ping Pong效果
  7. 每天开豪车跟随老板出入高档会所,吃住高档酒店,这样的职场生活,有必要坚持下去吗?
  8. SCPPO(五):解决MVC中Json传输数据量问题
  9. DoWhile(Java)
  10. Javascript 第五章总结:A trip to Objectville
  11. CSS使图像等比例缩放兼容IE6、IE7、FF
  12. 【63测试20161111】【BFS】【DP】【字符串】
  13. T32添加Toolbar按钮
  14. 金华职业技术学院计算机网络技术考试,金华职业技术学院2016年提前招生计算机应用技术专业测评方案...
  15. bilibili level up
  16. 示波器(Oscilloscope)快速入门
  17. 人类一败涂地做图教程_人类一败涂地怎么捏人?自定义人物PS制作教程
  18. 【C语言】ASCII码的数字转字母,字母转数字的方法
  19. 数据集中度分析(不排序)
  20. 哈希表及哈希冲突避免

热门文章

  1. [Andriod设计模式之旅]——Builder模式
  2. SQL关于数据库完整性
  3. 2017全球光伏增速或放缓 国内“6·30”仍将是分水岭
  4. java解压缩和shell_shell 文件的归档和压缩
  5. 用easyx画电子钟_实时钟表 · Joker/EasyX - Gitee.com
  6. 【Computer Organization笔记05】运算器基本功能,定点运算器,Am2901的组成与功能,VHDL硬件描述语言
  7. 【Computer Organization笔记04】ALU的基本功能,1位ALU,位数扩展以及功能扩展
  8. 【数据结构笔记21】图的遍历,DFS与BFS,连通图
  9. HTTP缓存原理及相关知识(2)-CDN
  10. [转]jQuery: how to get which button was clicked upon form submission?