mysql 线程设置_mysql-InnoDB并发线程配置

本文深入探讨了MySQL InnoDB的并发线程控制,包括innodb_thread_concurrency参数的作用,线程休眠和等待队列的管理,以及相关参数如innodb_thread_sleep_delay和innodb_concurrency_tickets的影响。内容涵盖线程限制对事务执行的影响,以及如何通过调整参数优化并发性能。
摘要由CSDN通过智能技术生成

一 Innodb并发线程控制

InnoDB使用操作系统线程来处理来自用户事务的请求。(事务在提交或回滚之前可能会向InnoDB发出很多请求。)在具有多核处理器的现代操作系统和服务器上,上下文切换非常有效,大多数工作负载运行良好,并发线程的数量没有任何限制。同时mysql5.5及以上版本的可伸缩性有了提高,这也降低了对InnoDB内进行并发线程数量限制的要求。(不建议设置并发控制)

InnoDB可以使用一系列技术去限制并发的线程数量(从而限制每次处理的并发请求数),这有助于降低线程之间的上下文切换。若并发线程数已经达到或者超过限制,新接收的用户请求会进入一个短暂的休眠,然后再次尝试进入innodb,若是还不能进入innodb,则该请求被放入一个请求队列中继续进行等待。等待锁的线程不会计算在并发执行的线程数中。

可以通过设置配置参数innodb_thread_concurrency来限制并发线程的数量。一旦并发线程的数量达到这个限制,其他线程在被放入队列之前就会休眠几微秒(由配置参数innodb_thread_sleep_delay设置)。

以前,需要进行实验才能找到innodb_thread_sleep_delay的最优值,这个最优值可能会根据工作负载而变化。在MySQL 5.6.3及更高版本中,可以设置innodb_adaptive_max_sleep_delay为 innodb_thread_sleep_delay设置一个最大值,而InnoDB会根据当前的线程调度活动情况自动调整 innodb_thread_sleep_delay的值。 这种动态调整有助于线程调度机制在系统轻负载和接近满负荷运行时顺利工作。

在不同版本的MySQL和InnoDB中,innodb_thread_concurrency的默认值和默认的并发线程数限制可能有所不同。 mysql 5.7中innodb_thread_concurrency的默认值是0,也就是默认情况下,并发执行的线程数量没有限制。

InnoDB只有在限制并发线程数量情况下(当innodb_thread_concurrency>0时)才会导致线程休眠。 当线程数量没有限制时,所有线程平等对待执行。也就是说,如果innodb_thread_concurrency为0,则忽略innodb_thread_sleep_delay的值。

当限制并发线程数量情况下(当innodb_thread_concurrency>0时),InnoDB允许在执行单个SQL语句期间发出的多个请求进入InnoDB,而无需观察innodb_thread_concurrency设置的限制,从而减少上下文切换开销。由于一个SQL语句(比如join)可能包含InnoDB中的多个行操作,InnoDB分配了指定数量的"tickets",允许线程以最小的开销重复调度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值