Hướng dẫn what is sleep command in mysql processlist? - lệnh ngủ trong danh sách xử lý mysql là gì?

Trong quá trình hoạt động trang web, trong danh sách quy trình MySQL, tôi thấy một vài quy trình với cột "lệnh" được đánh dấu là "giấc ngủ".

Tôi có nên lo lắng không? Làm thế nào để ngăn chặn điều này?

hỏi ngày 17 tháng 6 năm 2011 lúc 9:27Jun 17, 2011 at 9:27

Hướng dẫn what is sleep command in mysql processlist? - lệnh ngủ trong danh sách xử lý mysql là gì?

1

Ngay cả những người mạnh mẽ nhất trong chúng ta cũng cần phải ngủ. Không ngủ, người ta 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 túc 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 mình, nhưng phía máy khách chưa thoát. Nhiều ứng dụng web không làm sạch các kết nối của họ sau đó, dẫn đến việc ngủ các quy trình MySQL. Đừng lo lắng nếu chỉ có một số ít trong số họ; MySQL sẽ dọn dẹp những thứ đó sau khoảng thời gian chờ có thể định 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 và kết nối liên tục, thì việc có rất nhiều quy 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 việc mở/đóng kết nối trên đầu. 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ư mọi quy trình SQL đều có việc phải làm, vì vậy họ ngủ.

Đã trả lời ngày 17 tháng 6 năm 2011 lúc 10:00Jun 17, 2011 at 10:00

Hướng dẫn what is sleep command in mysql processlist? - lệnh ngủ trong danh sách xử lý mysql là gì?

2

Không, đừng lo lắng về họ 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, kết nối cơ sở dữ liệu được mở, sau đó được sử dụng trong suốt thế hệ của 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, kết nối cơ sở dữ liệu sẽ bị đóng và máy chủ sau đó sẽ tiêu diệt luồng có liên quan, điều đó có nghĩa là kết nối này 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 "ngủ" cho đến khi hết thời gian. Trong trường hợp đó, bạn có thể kết thúc với rất 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.

Đã trả lời ngày 17 tháng 6 năm 2011 lúc 10:01Jun 17, 2011 at 10:01

Wolfgangszwolfgangszwolfgangsz

8.7773 huy hiệu vàng29 Huy hiệu bạc34 Huy hiệu đồng3 gold badges29 silver badges34 bronze badges

1

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 show ProcessList.

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:
SHOW SESSION VARIABLES LIKE 'wait_timeout';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 28800 |
+---------------+-------+

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

  • Để thay đổi giá trị của biến "Wait_Timeout":
SET session wait_timeout=600;
Query OK, 0 rows affected (0.00 sec)

Sau 10 phút nếu kết nối ngủ vẫn ngủ, MySQL hoặc Mariadb sẽ giảm kết nối đó.

Hướng dẫn what is sleep command in mysql processlist? - lệnh ngủ trong danh sách xử lý mysql là gì?

Jenny d

Phù bằng vàng 27.4K2121 gold badges74 silver badges111 bronze badges

Đã trả lời ngày 21 tháng 3 năm 2019 lúc 13:50Mar 21, 2019 at 13:50

S.BaoS.BaoS.Bao

1091 Huy hiệu bạc4 Huy hiệu đồng1 silver badge4 bronze badges

2

Đối với một số người tìm kiếm sẽ phải đối mặt với cùng một vấn đề. Trong một số trường hợp, nó có thể gây ra một vấn đề. Ví dụ, trong trường hợp của tôi, đó là 'ngoại lệ giao dịch bị khóa' và nó xuất hiện ngay cả sau khi tôi đã giết các quy trình bị khóa của mình. Tôi đã giải quyết điều này chỉ sau khi tôi đã giết tất cả các quá trình 'giấc ngủ'. Ngoài ra, bạn có thể kiểm tra nhận xét đầu tiên trong câu trả lời này, có vẻ như nó có thể gây ra vấn đề trong một số trường hợp https://stackoverflow.com/a/16861630/4207348

Đã trả lời ngày 31 tháng 1 lúc 16:43Jan 31 at 16:43

Hướng dẫn what is sleep command in mysql processlist? - lệnh ngủ trong danh sách xử lý mysql là gì?

Danh sách xử lý trong MySQL là gì?

Danh sách quy trình MySQL cho biết các hoạt động hiện đang được thực hiện bởi tập hợp các luồng thực thi trong máy chủ.Tuyên bố danh sách quy trình hiển thị là một nguồn thông tin quy trình.indicates the operations currently being performed by the set of threads executing within the server. The SHOW PROCESSLIST statement is one source of process information.

Làm thế nào để tôi thấy các kết nối giấc ngủ trong mysql?

Về cơ bản, bạn nhận được kết nối trong 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ố thứ cần có thời gian.mà không ngắt kết nối vớ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 với máy chủ MySQL ..

Làm thế nào để bạn tìm thấy các câu hỏi về giấc ngủ?

Các phiên người dùng ngủ mà không có giao dịch mở có thể được xác định bằng cách truy vấn sys.dm_exec_sessions: Chọn * từ SYS.querying sys. dm_exec_sessions : SELECT * FROM sys.

Làm thế nào để tôi tìm thấy danh sách quy trình trong mysql?

Đăng nhập vào SSH.Nhập MySQL để vào dòng lệnh MySQL.Loại hiển thị danh sách quy trình;Để xem các quy trình hiện tại trên máy chủ.Type show processlist; in order to see current processes on the server.