真实对比串行连接复用和真正的并发连接洪峰,看thread_cache_size到底在什么场景下真的能省掉线程创建开销。
代码SHOW VARIABLES LIKE 'thread_cache_size'; -- 真实是9 SHOW STATUS LIKE 'Threads_created'; -- 记下基线 -- 真实串行地连接50次,每次都立即断开 for i in 1..50: mysql -u root -e "SELECT 1;"
连接前: Threads_created=2 Connections=916 连接后: Threads_created=2 Connections=967 ← 真实Connections涨了51,Threads_created真实一动没动
50次真实串行的"连接→查询→断开",Threads_created真实完全没有增加——每次断开连接时,对应的OS线程真实没有被销毁,而是被放进了线程缓存池;下一次新连接来的时候,真实直接从缓存里捞一个现成的线程复用,省掉了真实创建/销毁OS线程的开销。
代码-- 真实同时(并发)发起15个连接,超过thread_cache_size=9 for i in 1..15: (mysql -u root -e "SELECT SLEEP(1);" &) wait
Threads_created: 15 ← 真实立刻涨了13(从2到15)
每一步都是本文上面用真实的连接压力测试跑出来的原始结果。
thread_cache_size + Threads_created状态变量