Theo tài liệu MySQL, bạn nên đặt thread_cache_size
sao cho hầu hết các kết nối mới sử dụng các luồng từ bộ đệm thay vì các luồng mới được tạo. Điều này giúp tiết kiệm một số chi phí tạo luồng, mặc dù thông thường không tạo ra sự cải thiện hiệu suất đáng kể:
Yêu cầu cho các luồng được thỏa mãn bằng cách sử dụng lại các luồng được lấy từ bộ đệm nếu có thể và chỉ khi bộ đệm trống thì một luồng mới được tạo. Biến này có thể được tăng lên để cải thiện hiệu suất nếu bạn có nhiều kết nối mới. Thông thường, điều này không cung cấp một cải tiến hiệu suất đáng chú ý nếu bạn có một triển khai luồng tốt. Tuy nhiên, nếu máy chủ của bạn nhìn thấy hàng trăm kết nối mỗi giây, thông thường bạn nên đặt thread_cache_size đủ cao để hầu hết các kết nối mới sử dụng các luồng được lưu trong bộ nhớ cache . (nguồn)
Điều này có nghĩa là bạn nên đặt thread_cache_size
sao cho Threads_created / Connections
(% kết nối dẫn đến việc tạo chủ đề mới) khá thấp. Nếu bạn lấy tài liệu MySQL theo nghĩa đen ("nhất"), giá trị sẽ <50%. Câu trả lời của RolandoMySQLDBA cho biết <1%. Tôi không biết ai gần với sự thật hơn.
Bạn không nên đặt thread_cache_size
cao hơn Max_used_connections
. Câu cuối cùng trong câu trả lời của RolandoMySQLDBA ("Ít nhất, thread_cache_size phải lớn hơn Max_use_connections") có vẻ hợp lý bởi vì nó nói rằng bạn nên giữ nhiều luồng trong bộ đệm hơn so với máy chủ của bạn từng sử dụng. MySQL sẽ không bao giờ đặt nhiều luồng đó vào bộ đệm dù thế nào - nó không đặt trước các luồng trong bộ đệm - nó chỉ đặt chúng ở đó sau khi máy khách tạo một luồng và ngắt kết nối. Nếu bạn không bao giờ có máy khách X kết nối cùng một lúc, bạn sẽ không bao giờ có chủ đề X trong bộ đệm:
Khi máy khách ngắt kết nối, các luồng của máy khách sẽ được đặt vào bộ đệm nếu có ít hơn các luồng thread_cache_size ở đó. (nguồn)
Cũng xem câu trả lời này của Michael:
Đặt luồng ... trong đó, trong một ứng dụng hoạt động tốt, sẽ không phải là trường hợp.
/dba//a/28701