2011-08-18 30 views
6

Tôi đang gặp phải các đột biến CPU rất cao trên quy trình mysqld (lớn hơn 100% và thậm chí thấy 300% tại một thời điểm). Trung bình tải của tôi là khoảng: .25, .34, .28.Sử dụng CPU cao của MySQL và các liên kết liên tục

Tôi đọc bài này rất lớn về vấn đề này: MySQL high CPU usage

Một trong những điều chính để làm là kết nối liên tục vô hiệu hóa. Vì vậy, tôi đã kiểm tra php.ini và mysql.allow_persistent = onmysql.max_persistent = -1 - điều đó có nghĩa là không có giới hạn.

Điều này đặt ra một số câu hỏi cho tôi trước khi thay đổi bất cứ điều gì chỉ để đảm bảo:

  1. Nếu quá trình mysqld của tôi là spiking hơn 100% mỗi vài giây không nên trung bình tải của tôi cao hơn thì họ là ai?
  2. Điều gì sẽ vô hiệu hóa các liên kết liên tục - các tập lệnh của tôi có tiếp tục hoạt động không?
  3. Nếu tôi tắt tính năng này và tải lại php, điều này có ý nghĩa gì đối với người dùng hiện tại của tôi vì sẽ có nhiều người dùng hoạt động.

EDIT:

CPU Info: Core2Quad Q9400 2,6 Ghz

Trả lời

8

Kết nối liên tục sẽ không tự sử dụng bất kỳ CPU nào - nếu không có kết nối nào, nó chỉ ở chế độ chờ và chỉ tiêu thụ một chút bộ nhớ và chiếm một ổ cắm.

Tải trung bình chỉ là - trung bình. Nếu bạn có quá trình thay đổi từ 0% đến 100% 10 lần mỗi giây, bạn sẽ nhận được mức trung bình là 0,5. Chúng rất tốt cho việc tìm ra cpu dai dẳng lâu dài, nhưng do tính chất tự nhiên của chúng, ẩn dấu/xói mòn các dấu hiệu gai.

Kết nối liên tục với mysql thường không cần thiết. MySQL có một giao thức kết nối tương đối nhanh và tiết kiệm thời gian bất kỳ từ việc sử dụng các kết nối liên tục là khá nhỏ. Nhược điểm là một khi kết nối đi liên tục, nó có thể bị bỏ lại trong trạng thái không nhất quán. ví dụ. Nếu một ứng dụng sử dụng kết nối chết bất ngờ, MySQL sẽ không thấy điều đó và bắt đầu dọn dẹp. Điều này có nghĩa là bất kỳ biến phía máy chủ nào được tạo bởi ứng dụng, bất kỳ khóa nào, bất kỳ giao dịch nào, v.v ... sẽ bị bỏ lại ở trạng thái mà chúng ở trong khi ứng dụng gặp sự cố.

Khi kết nối được sử dụng lại bởi một ứng dụng khác, bạn sẽ bắt đầu với số tiền cho các món ăn bẩn trong bồn rửa và nhà vệ sinh không bị bẩn. Nó có thể khá dễ dàng gây ra deadlocks vì các giao dịch lủng lẳng/ổ khóa - các ứng dụng mới sẽ không biết về họ, và các ứng dụng cũ không còn xung quanh để từ bỏ những người.

+0

cảm ơn cho nhà vệ sinh tương tự :) Vì vậy, tùy chọn liên kết liên tục trong php của tôi.ini là tốt nhưng chỉ không sử dụng mysql_pconnect - đã nhận nó. – bMon

+0

Tại điểm nào (số) nên bắt đầu lo lắng về mức trung bình tải? Trên 1.0, 5.0, 20.0? – bMon

+2

không có gì sai với các kết nối liên tục, miễn là bạn đã xử lý lỗi "zomg tôi vừa tải lên quần của tôi" trong trường hợp bất kỳ tập lệnh nào của bạn - nếu tập lệnh chết, sau đó thực hiện cuộc gọi gần trên kết nối để mysql có thể dọn sạch. –

0

Spikes cũng tốt. Đây là MySQL đang làm việc. Trung bình tải của bạn có vẻ phù hợp.

Tắt liên kết liên tục đơn giản có nghĩa là các tập lệnh không thể sử dụng kết nối hiện có với cơ sở dữ liệu. Tôi sẽ không khuyên bạn nên vô hiệu hóa điều này. Ít nhất, nếu bạn muốn vô hiệu hóa chúng, hãy làm điều đó trên ứng dụng sau này, thay vì trên MySQL. Điều này thậm chí có thể tăng tải nhẹ, tùy thuộc vào điều kiện.

Cuối cùng, tính kiên trì của DB không liên quan gì đến người dùng trên trang web của bạn (thường). Người dùng thực hiện yêu cầu và sau khi tất cả tài nguyên trang được tải, có nghĩa là cho đến khi yêu cầu tiếp theo. (Ngoại trừ trong một vài trường hợp cụ thể.) Trong mọi trường hợp, trong khi yêu cầu đang diễn ra, tập lệnh sẽ vẫn được kết nối với DB.

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