Tôi nên sử dụng giá trị nào của thread_cache_size?


25

Tôi đang sử dụng Asp.Net cùng với MySQL. Trong chuỗi kết nối .Net, tôi đã đặt Kích thước nhóm tối đa là 150.

Nếu tôi chạy như sau tôi sẽ nhận được các giá trị sau:

SHOW GLOBAL STATUS LIKE 'max_used_connections'; gives 66
SHOW GLOBAL STATUS LIKE 'Threads_created'; gives 66
SHOW GLOBAL STATUS LIKE 'connections'; gives 474

Cung cấp cho Themes_created / Connected = 0,1392.

Vì vậy, từ đó có vẻ như tôi cần phải tăng lên thread_cache_size.

Nhưng nếu tôi chạy, SHOW PROCESSLISTtôi luôn thấy rằng tôi có rất nhiều kết nối mở (hầu hết trong số họ đang ngủ) do hồ bơi được tạo bởi .Net. Tôi vẫn cần phải thiết lập thread_cache_sizevì tôi vẫn sẽ sử dụng lại các kết nối từ nhóm kết nối? Nếu Kích thước bể bơi là 150, bạn có nghĩ rằng giá trị tốt sẽ được đặt thread_cache_sizethành 150+ không? Điều này sẽ ảnh hưởng đến CPU và bộ nhớ rất nhiều?

Câu trả lời:


43

Dựa trên thông tin trong Tài liệu MySQL, bạn nên làm như sau: Tìm hiểu những con số cao nhất của kết nối đồng thời mysqld đã sử dụng Connections , Threads_created , và Max_used_connections ,

  • SHOW GLOBAL STATUS LIKE 'Connections';
  • SHOW GLOBAL STATUS LIKE 'Threads_created';
  • SHOW GLOBAL STATUS LIKE 'Max_used_connections';

Hãy thử tính toán như sau

Threads_created / Connections: Nếu giá trị này vượt quá 0,01 thì tăng thread_cache_size. Ít nhất, thread_cache_sizenên lớn hơn Max_used_connections.


Cảm ơn vì nhận xét tuyệt vời! Tôi cập nhật câu hỏi của tôi một chút.
Martin

Tôi nghĩ rằng bạn đang có ý định mysql> HIỂN THỊ TÌNH TRẠNG TOÀN CẦU THÍCH 'kết nối'; (bạn đã viết max_use_connections hai lần)
Alekc

1
Tôi chỉ muốn thêm điều đó bằng cách tham khảo dev.mysql.com/doc/refman/5.7/en/NH bạn nên thêm 8 vào Max_use_connections cho giá trị thread_cache_size (không vượt quá 100)
CME64

1
Trên thực tế, hướng dẫn sử dụng đề xuất mặc định là (1% số mac_use_connections) + 8 .... hoặc 100 ... tùy theo mức nào ít hơn.
Christopher McGowan

Đối với tôi, số của tôi là 264/103134, tính ra là 0,0026, thấp hơn 0,01 Nhưng MaxUsedConnections của tôi là 72, vì vậy câu cuối cùng bị xung đột khủng khiếp
thuyền viên

11

Theo tài liệu MySQL, bạn nên đặt thread_cache_sizesao 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_sizesao 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_sizecao 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


tôi nghĩ vậy! sau khi tôi kiểm tra cấu hình này, "thread_cache_size phải lớn hơn Max_use_connections" không hữu ích.
CK.Nguyen

-2

Trong ngày làm việc chung, 'một người thuê mới' có thể cần kết nối không? Hầu hết các pháp sư sẽ không biết có bao nhiêu người có thể được thuê trong vài ngày tới. V 8 của MySQL đề xuất CAP thread_cache_size ở mức 100 để ngăn chặn tình trạng quá tải bất kể max_use_connections. Đối với tôi, 100 là một CAP tốt.

Xem liên kết này, xin vui lòng.

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_thread_cache_size
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.