并发连接与并发查询,并不是一个概念。
在执行show processlist
的结果里,看到了几千个连接,指的是并发连接。
而"当前正在执行"的语句,才是并发查询。
并发连接数多影响的是内存。
并发查询太高对CPU不利。一个机器的CPU核数有限,线程全冲进来,上下文切换的成本就会太高。
所以需要设置参数:innodb_thread_concurrency
用来限制线程数。
当线程数达到该参数,InnoDB就会认为线程数用完了,会阻止其他语句进入引擎执行。
需要注意的是,在线程进入锁等待以后,并发线程计数减一,所以等行锁或者间隙锁时的线程是不算在计数范围内的。也就是说进入锁等待的线程不吃CPU,从而避免整个系统锁死。