Mysql innodb_thread_concurrency参数

官网链接:https://dev.mysql.com/doc/refman/8.0/en/innodb-performance-thread_concurrency.html
InnoDB使用操作系统线程处理来自用户事务的请求。(事务在提交或回滚之前可能会向InnoDB发出很多请求。)在具有多核处理器的现代操作系统和服务器上,上下文切换是有效的,大多数工作负载运行良好,没有任何并发线程数量的限制。
在有助于减少线程之间的上下文切换的情况下,InnoDB可以使用一些技术来限制并发执行的操作系统线程的数量(从而限制每次处理的请求的数量)。当InnoDB从用户会话中接收到一个新请求时,如果并发执行的线程数达到了预定义的限制,新请求在再次尝试之前会休眠一段时间。在睡眠被放入先入/先出队列并最终被处理后无法重新调度的请求。等待锁的线程不计入并发执行的线程数。
可以通过设置配置参数innodb_thread_concurrency来限制并发线程的数量。一旦执行线程的数量达到这个限制,其他线程在被放入队列之前会休眠若干微秒(由配置参数innodb_thread_sleep_delay设置)。
你可以将配置选项innodb_adaptive_max_sleep_delay设置为innodb_thread_sleep_delay的最大值,InnoDB会根据当前的线程调度活动自动调整innodb_thread_sleep_delay的大小。这种动态调整有助于线程调度机制在系统负载较轻和接近满负荷运行时平稳地工作。
innodb_thread_concurrency的默认值和默认的并发线程数限制在MySQL和InnoDB的不同版本中都有所改变。innodb_thread_concurrency的默认值是0,所以默认情况下没有并发执行线程的数量限制。
InnoDB只有在并发线程数量有限的情况下才会导致线程休眠。当没有对线程数量的限制时,所有线程都平等地争用调度。也就是说,如果innodb_thread_concurrency为0,则innodb_thread_sleep_delay的值将被忽略。
当线程数有限制时(innodb_thread_concurrency为> 0),InnoDB允许单个SQL语句执行过程中产生的多个请求进入InnoDB,从而减少上下文切换的开销,而不需要遵守innodb_thread_concurrency设置的限制。由于一个SQL语句(比如一个join)可能在InnoDB中包含多个行操作,InnoDB会分配指定数量的“票据”,允许一个线程以最小的开销重复调度。
当一个新的SQL语句开始时,线程没有票据,并且它必须观察innodb_thread_concurrency。一旦线程有权进入InnoDB,它就会被分配一些票据,这些票据可以用来随后进入InnoDB执行行操作。如果票据用完,线程将被驱逐,并且innodb_thread_concurrency将再次被观察,这可能会将线程重新放入等待线程的先入先出队列中。当线程再次有资格进入InnoDB时,会再次分配票据。分配的票据数量由全局选项innodb_concurrency_tickets指定,默认为5000。等待锁的线程在锁可用时得到一个票据。
这些变量的正确值取决于您的环境和工作负载。尝试一系列不同的值,以确定什么值适合您的应用程序。在限制并发执行线程的数量之前,请检查一些可能提高InnoDB在多核和多处理器计算机上性能的配置选项,比如innodb_adaptive_hash_index。
1.设置https://www.cndba.cn/hbhe0316/article/22627https://www.cndba.cn/hbhe0316/article/22627https://www.cndba.cn/hbhe0316/article/22627https://www.cndba.cn/hbhe0316/article/22627https://www.cndba.cn/hbhe0316/article/22627

https://www.cndba.cn/hbhe0316/article/22627
https://www.cndba.cn/hbhe0316/article/22627
https://www.cndba.cn/hbhe0316/article/22627
https://www.cndba.cn/hbhe0316/article/22627 https://www.cndba.cn/hbhe0316/article/22627
[root@mysql57 ~]# cat /etc/my.cnf | grep -i innodb-thread-concurrency
innodb-thread-concurrency = 16
[root@mysql57 ~]# service mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL.. SUCCESS! 
mysql> show variables like '%thread_concurrency';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| innodb_thread_concurrency | 16    |
+---------------------------+-------+
1 row in set (0.00 sec)

版权声明:本文为博主原创文章,未经博主允许不得转载。

MYSQL

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值