2010-10-29 17 views
9

Tôi đang tiêm thử nghiệm căng thẳng vào ứng dụng web của mình kết nối với máy chủ mysql và tôi đang theo dõi danh sách xử lý chương trình của mysql.Mysql hiển thị danh sách processlist nhiều quá trình ngủ và info = null?

Khi tải trọng cao (swap cao i/o) tôi nhận được nhiều quá trình như thế:

| 97535 | db| localhost | userA | Sleep | 515 |   | NULL 
| 97536 | db| localhost | userA | Sleep | 516 |   | NULL 
| 97786 | db| localhost | userA | Sleep | 343 |   | NULL 
| 97889 | db| localhost | userA | Sleep | 310 |   | NULL 

Nhưng tôi không thể hiểu tại sao họ vẫn ở đó và không bị giết? Điều này cuối cùng dẫn đến ứng dụng của tôi sử dụng tất cả các max_connections và ngừng xử lý các yêu cầu đến ...

Bất kỳ ý tưởng nào là những quy trình này và chúng đang làm gì ở đó :)?

Trả lời

12

Đó là các kết nối không hoạt động do khách hàng nắm giữ. Bạn nên đảm bảo rằng bất kỳ thư viện máy khách nào bạn đang sử dụng (JDBC, ...) được định cấu hình để không giữ các kết nối không được sử dụng mở quá lâu hoặC# số kết nối tối đa của khách hàng của bạn không quá lớn.

+0

có bất kỳ biến thời gian chờ mysql nào mà tôi có thể điều chỉnh để tránh điều này không? – AlfaTeK

+4

Bạn có thể đặt wait_timeout thành thứ gì đó nhỏ hơn (http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_wait_timeout) hoặc tăng giới hạn kết nối. Bạn thực sự muốn giải quyết điều này ở phía ứng dụng, tuy nhiên. Treo kết nối từ các rủi ro bên cơ sở dữ liệu đóng một kết nối giống như ứng dụng cố gắng sử dụng nó, có khả năng gây ra lỗi ứng dụng không có lý do chính đáng. Bạn đang sử dụng thư viện kết nối cơ sở dữ liệu nào? –

+0

@KeithRandall nhưng làm thế nào để xác định các quy trình Null? – Khuram

3

Đoán của tôi là bạn đang sử dụng kết nối liên tục, ví dụ: pconnect trong php:

[..] khi kết nối, trước tiên, hàm sẽ tìm một liên kết (liên tục) đã mở với cùng một máy chủ, tên người dùng và mật khẩu. Nếu ai được tìm thấy, một định danh cho nó sẽ được trả lại thay vì mở một kết nối mới

[..] kết nối đến máy chủ SQL sẽ không được đóng lại khi thực hiện các tập lệnh kết thúc. Thay vào đó, liên kết sẽ vẫn mở để sử dụng trong tương lai

tôi đã có một tình huống tương tự, và được sử dụng CodeIgniter với pconnect bật. Sau khi tắt nó đi (see how) mọi kết nối đã được đóng lại đúng sau khi sử dụng, và danh sách xử lý MySQL của tôi trống.

Hiệu suất: Ở trên không tranh luận về hiệu suất, nhưng chỉ đơn giản là cố gắng giải thích lý do tại sao bạn có thể thấy nhiều kết nối Ngủ trong MySQL. Nó có thể không phải là tiêu cực, liên quan đến hiệu suất, để có các kết nối vẫn hoạt động. Thông tin thêm tại: http://www.mysqlperformanceblog.com/2006/11/12/are-php-persistent-connections-evil/

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