并發連接與并發查詢,并不是一個概念。
在執行show processlist
的結果里,看到了幾千個連接,指的是并發連接。
而"當前正在執行"的語句,才是并發查詢。
并發連接數多影響的是內存。
并發查詢太高對CPU不利。一個機器的CPU核數有限,線程全沖進來,上下文切換的成本就會太高。
所以需要設置參數:innodb_thread_concurrency
用來限制線程數。
當線程數達到該參數,InnoDB就會認為線程數用完了,會阻止其他語句進入引擎執行。
需要注意的是,在線程進入鎖等待以后,并發線程計數減一,所以等行鎖或者間隙鎖時的線程是不算在計數范圍內的。也就是說進入鎖等待的線程不吃CPU,從而避免整個系統鎖死。