Về cơ bản, bạn nhận được kết nối ở trạng thái Ngủ khi:
- một tập lệnh PHP kết nối với MySQL
- một số truy vấn được thực thi
- sau đó, tập lệnh PHP thực hiện một số công việc cần thời gian
- mà không ngắt kết nối khỏi DB
- và cuối cùng, tập lệnh PHP kết thúc
- có nghĩa là nó ngắt kết nối khỏi máy chủ MySQL
Vì vậy, bạn thường kết thúc với nhiều quy trình ở trạng thái Ngủ khi bạn có nhiều quy trình PHP được kết nối mà không thực sự thực hiện bất kỳ điều gì ở phía cơ sở dữ liệu.
Một ý tưởng cơ bản, vì vậy:hãy đảm bảo rằng bạn không có các quy trình PHP chạy quá lâu - hoặc buộc chúng phải ngắt kết nối ngay khi chúng không cần truy cập vào cơ sở dữ liệu nữa.
Một điều khác mà tôi thường thấy khi có một số tải trên máy chủ:
- Ngày càng có nhiều yêu cầu đến với Apache
- có nghĩa là nhiều trang để tạo
- Mỗi tập lệnh PHP, để tạo một trang, kết nối với DB và thực hiện một số truy vấn
- Những truy vấn này ngày càng mất nhiều thời gian hơn khi tải trên máy chủ DB tăng lên
- Điều đó có nghĩa là nhiều quy trình tiếp tục được xếp chồng lên nhau
Một giải pháp có thể hữu ích là giảm thời gian thực hiện các truy vấn của bạn - tối ưu hóa các truy vấn dài nhất.