2011-12-29 34 views
8

Gần đây phát hiện ra máy chủ MySQL của tôi chạm 90% sử dụng CPU cao khi mô phỏng trên đồng thời 100-500 đề nghịthread_cache_size giảm CPU và kết nối tối đa?

với các thiết lập mặc định cộng sau trong my.cnf

max_connections = 500 
max_allowed_packet = 16M

tôi nhận thấy các max_connection có thể nhấn lên đến 500, threads_created cũng có thể đi cao 200-500 và tôi đang nghĩ đến điều này đã thực sự gây CPU cao bất thường

Do đó thay vì sử dụng các thiết lập mặc định tôi điều chỉnh

innodb_buffer_pool_size = 2G #32bit linux server 
innodb_log_file_size = 256M 
innodb_log_buffer_size = 8M 
innodb_thread_concurrency = 16 
innodb_flush_method = O_DIRECT 
innodb_additional_mem_pool_size = 20M 
table_cache = 1028 
thread_cache_size = 16 
key_buffer_size=32M 
query_cache_size=32M 
join_buffer_size=1M 

Với cùng một thử nghiệm tải, CPU đã giảm xuống 10% trở xuống ... Tuy nhiên tôi nhận thấy max_connection không bao giờ chạm 500 nữa. Hiện chưa đến 50 giờ ...

Điều này có phải do thread_cache_size tôi đã điều chỉnh không? theo mặc định nó là 0. Hoặc có điều gì đó sai ở đâu đó ... Tôi tự hỏi trong trường hợp đó nếu máy chủ mysql được kiểm tra chính xác với kết nối tối đa. Tôi muốn kiểm tra làm thế nào nếu chủ đề đồng thời có thể đạt max_connections nhưng bằng cách nào đó nó không bao giờ trúng với số tiền tương tự tôi đã thử nghiệm trước đây. Kể từ khi thay đổi, nó không bao giờ chạm trên 50 bây giờ.

Bất kỳ ý tưởng nào?

+0

Tôi biết đã quá muộn để hỏi nhưng cấu hình cũ của bạn nghĩa là giá trị cũ của các thông số trên là gì? – ursitesion

Trả lời

1

Tạo chủ đề mới (vì tôi đoán ứng dụng của bạn không sử dụng kết nối tổng hợp) chiếm một lượng khá lớn. Với việc sử dụng lại các luồng MySQL theo cách này (tối đa 16 luồng), nó không còn sử dụng CPU bổ sung để tạo các luồng thường xuyên và nó cũng có khả năng hoàn thành các hoạt động một cách kịp thời, do đó đóng kết nối nhanh hơn và do đó giữ ít kết nối mở hơn tại một thời điểm.

Chỉ cần một đoán :-)

0

Việc bạn sử dụng

innodb_thread_concurrency = 16 

là một cầu thủ quan trọng trong hoạt động hạn chế. Xem

https://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_thread_concurrency

để được giải thích chi tiết và đề xuất kiểm tra.

Mặc định là 0 = không giới hạn được sử dụng đồng thời innodb_threads - nhưng nguy hiểm là overdriving bối cảnh hệ thống của bạn chuyển đổi cho rất nhiều innodb_threads hoạt động chạy đồng thời.

Các vấn đề liên quan