Tôi có nên lo lắng về quá trình trạng thái ngủ của mysql trong danh sách quy trình


Câu trả lời:


17

Ngay cả những người mạnh mẽ nhất trong chúng ta đôi khi cũng cần ngủ. Không ngủ, một người lo lắng và mất ngủ có thể dẫn đến tất cả các loại triệu chứng nghiêm trọng.

Nghiêm trọng hơn: trạng thái ngủ có nghĩa là quá trình MySQL đã thực hiện với truy vấn của nó, nhưng phía máy khách vẫn chưa thoát. Nhiều ứng dụng web không dọn sạch các kết nối của chúng sau đó, dẫn đến các quy trình MySQL đang ngủ. Đừng lo lắng nếu chỉ có một số ít trong số họ; MySQL sẽ dọn sạch chúng sau một khoảng thời gian chờ cấu hình (Wait_timeout).

Hoặc nếu ứng dụng web của bạn sử dụng các kết nối liên tục và nhóm kết nối, thì việc có nhiều quá trình ngủ là hoàn toàn bình thường: trong trường hợp đó, ứng dụng của bạn chỉ mở ra ví dụ 100 kết nối SQL và giữ cho chúng mở. Điều đó làm giảm kết nối mở / đóng kết nối. Trừ khi ứng dụng của bạn là một ứng dụng rất bận rộn, điều bình thường là gần như không phải mọi quy trình SQL đều có việc phải làm, vì vậy chúng ngủ.


5

Không, đừng lo lắng về chúng trừ khi bạn có hàng ngàn người trong số họ. Thông thường họ chỉ ra một kết nối cơ sở dữ liệu hiện không làm gì cả, nhưng nếu không thì vẫn còn sống.

Nhiều trang web được xây dựng sao cho khi bắt đầu xử lý một trang, một kết nối cơ sở dữ liệu được mở, sau đó được sử dụng trong suốt quá trình tạo trang và cuối cùng bị loại bỏ ở cuối. Nếu việc loại bỏ được thực hiện đúng cách, kết nối cơ sở dữ liệu sẽ bị đóng và máy chủ sẽ giết luồng liên quan, điều đó có nghĩa là kết nối này sẽ biến mất khỏi danh sách quy trình.

Nếu kết nối không được đóng, nó có thể vẫn ở trạng thái "SLEEP" cho đến khi hết thời gian. Trong trường hợp đó, bạn có thể kết thúc với nhiều quá trình ngủ. nhưng trừ khi bạn gặp vấn đề về bộ nhớ trên máy chủ db, đây cũng không phải là vấn đề lớn.


3

Trước khi tăng biến max_connections, bạn phải kiểm tra xem bạn có bao nhiêu kết nối không tương tác bằng cách chạy lệnh showlistlist.

Nếu bạn có nhiều kết nối ngủ, bạn phải giảm giá trị của biến "Wait_timeout" để đóng kết nối không tương tác sau khi chờ đợi một số lần.

  • Để hiển thị giá trị Wait_timeout:
HIỂN THỊ CÁC BIỂU TƯỢNG BIỂU TƯỢNG THÍCH 'Wait_timeout';

+ --------------- + ------- +
| Biến_ame | Giá trị |
+ --------------- + ------- +
| chờ đợi 28800 |
+ --------------- + ------- +

giá trị là thứ hai, điều đó có nghĩa là kết nối không tương tác vẫn còn tới 8 giờ.

  • Để thay đổi giá trị của biến "Wait_timeout":
Phiên SET chờ_timeout = 600;
Truy vấn OK, 0 hàng bị ảnh hưởng (0,00 giây)

Sau 10 phút nếu kết nối ngủ vẫn ngủ, mysql hoặc MariaDB sẽ hủy kết nối đó.

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.