ตามเอกสาร MySQL คุณควรตั้งค่าthread_cache_size
เพื่อให้การเชื่อมต่อใหม่ส่วนใหญ่ใช้เธรดจากแคชแทนที่จะสร้างเธรดที่สร้างขึ้นใหม่ สิ่งนี้จะบันทึกโอเวอร์เฮดการสร้างเธรดบางอย่าง แต่โดยปกติจะไม่สร้างการปรับปรุงประสิทธิภาพที่สำคัญ:
การร้องขอเธรดเป็นที่พอใจโดยการใช้เธรดที่นำมาจากแคชใหม่ถ้าเป็นไปได้และเฉพาะเมื่อแคชว่างเปล่าคือเธรดใหม่ที่สร้างขึ้น ตัวแปรนี้สามารถเพิ่มขึ้นเพื่อปรับปรุงประสิทธิภาพหากคุณมีการเชื่อมต่อใหม่จำนวนมาก โดยทั่วไปสิ่งนี้ไม่ได้ให้การปรับปรุงประสิทธิภาพที่น่าทึ่งถ้าคุณมีการใช้เธรดที่ดี แต่ถ้าเซิร์ฟเวอร์ของคุณเห็นหลายร้อยของการเชื่อมต่อต่อวินาทีปกติคุณควรตั้ง thread_cache_size สูงพอเพื่อให้การเชื่อมต่อใหม่ส่วนใหญ่ใช้ที่เก็บไว้ชั่วคราวหัวข้อ (ที่มา)
นี่หมายความว่าคุณควรตั้งค่าของคุณthread_cache_size
เพื่อให้Threads_created / Connections
(% ของการเชื่อมต่อที่นำไปสู่การสร้างเธรดใหม่) ค่อนข้างต่ำ หากคุณใช้ MySQL เอกสารอย่างแท้จริง ("มากที่สุด") ค่าควรเป็น <50% คำตอบของ RolandoMySQLDBA บอกว่า <1% ฉันไม่รู้ว่าใครใกล้ความจริง
คุณควรจะไม่ตั้งสูงกว่าthread_cache_size
Max_used_connections
ประโยคสุดท้ายในคำตอบของ RolandoMySQLDBA ("อย่างน้อยที่สุด thread_cache_size ควรมากกว่า Max_used_connections") ดูเหมือนจะไม่สมเหตุสมผลเพราะมันบอกว่าคุณควรเก็บเธรดไว้ในแคชมากกว่าที่เซิร์ฟเวอร์ของคุณเคยใช้ MySQL จะไม่ใส่เธรดจำนวนมากลงในแคชอย่างไรก็ตามไม่ได้กำหนดเธรดไว้ในแคชล่วงหน้า แต่จะวางไว้ที่นั่นหลังจากไคลเอ็นต์สร้างเธรดและยกเลิกการเชื่อมต่อ หากคุณไม่เคยเชื่อมต่อไคลเอนต์ X ในเวลาเดียวกันคุณจะไม่มี X thread ในแคช:
เมื่อไคลเอ็นต์ยกเลิกการเชื่อมต่อเธรดของไคลเอ็นต์จะถูกวางในแคชหากมีเธรดน้อยกว่า thread_cache_size ที่นั่น (ที่มา)
ดูคำตอบนี้โดย Michael:
การตั้งค่า thread_cache_size ให้เป็นค่าที่มากกว่า max_connections ดูเหมือนจะเป็นคำแนะนำที่ไม่ช่วยเหลืออย่างมาก ... แคชอาจไม่สามารถขยายใหญ่กว่า max_connections ได้และแม้แต่แคชที่ใกล้เคียงกับขนาดนั้นก็สามารถทำได้ก็ต่อเมื่อคุณมีจำนวนมากบนเธรดของคุณ ... ซึ่งในแอปพลิเคชันที่ทำงานได้ดีจะไม่เป็นเช่นนั้น
https://dba.stackexchange.com/a/28701