Hướng dẫn command sleep mysql show processlist - lệnh sleep danh sách quy trình hiển thị mysql

103

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Khi tôi chạy Hiển thị Danh sách xử lý trong cơ sở dữ liệu MySQL, tôi nhận được đầu ra này:

mysql> show full processlist;

+--------+------+-----------+--------+---------+-------+-------+-----------------------+
| Id     | User | Host      | db     | Command | Time  | State | Info                  |
+--------+------+-----------+-------+---------+-------+-------+-----------------------+
| 411665 | root | localhost | somedb | Sleep   | 11388 |       | NULL                  | 
| 412109 | root | localhost | somedb | Query   |     0 | NULL  | show full processlist | 
+--------+------+-----------+-------+---------+-------+-------+------------------------+

Tôi muốn biết quá trình "giấc ngủ" theo lệnh. Nó có nghĩa là gì? Tại sao nó chạy từ một thời gian dài và hiển thị null? Nó đang làm cho cơ sở dữ liệu chậm và khi tôi giết quá trình, thì nó hoạt động bình thường. Làm ơn giúp tôi.

Hướng dẫn command sleep mysql show processlist - lệnh sleep danh sách quy trình hiển thị mysql

Jyelton

34,7K25 Huy hiệu vàng127 Huy hiệu bạc188 Huy hiệu đồng25 gold badges127 silver badges188 bronze badges

Hỏi ngày 30 tháng 8 năm 2012 lúc 9:53Aug 30, 2012 at 9:53

7

Các kết nối trạng thái "Ngủ" thường được tạo bởi mã duy trì các kết nối liên tục với cơ sở dữ liệu.

Điều này có thể bao gồm các nhóm kết nối được tạo bởi các khung ứng dụng hoặc các công cụ quản trị cơ sở dữ liệu phía máy khách.

Như đã đề cập ở trên trong các bình luận, thực sự không có lý do gì để lo lắng về các kết nối này ... trừ khi tất nhiên bạn không biết kết nối đến từ đâu.

.

Đã trả lời ngày 3 tháng 1 năm 2013 lúc 20:12Jan 3, 2013 at 20:12

Đã vẽDrew

5,8834 Huy hiệu vàng42 Huy hiệu bạc43 Huy hiệu đồng4 gold badges42 silver badges43 bronze badges

Tôi đã tìm thấy câu trả lời này ở đây: https://dba.stackexchange.com/questions/1558. Tóm lại bằng cách sử dụng các mục sau (hoặc trong My.cnf) sẽ xóa vấn đề về thời gian chờ.

SET GLOBAL interactive_timeout = 180; SET GLOBAL wait_timeout = 180;

Điều này cho phép các kết nối kết thúc nếu chúng ở trong trạng thái ngủ trong 3 phút (hoặc bất cứ điều gì bạn xác định).

Đã trả lời ngày 12 tháng 3 năm 2018 lúc 11:36Mar 12, 2018 at 11:36

AntonyantonyAntony

3.43027 Huy hiệu bạc28 Huy hiệu đồng27 silver badges28 bronze badges

Giấc ngủ có nghĩa là chủ đề đó không làm gì cả. Thời gian là quá lớn Beacuse Anthor Thread Truy vấn, nhưng không ngắt kết nối máy chủ, mặc định Wait_TimeOut = 28800; để bạn có thể đặt các giá trị nhỏ hơn, ví dụ 10. Ngoài ra, bạn cũng có thể giết được luồng.

Đã trả lời ngày 23 tháng 5 năm 2013 lúc 3:22May 23, 2013 at 3:22

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 command sleep mysql show processlist - lệnh sleep danh sách quy trình hiển thị mysql

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 command sleep mysql show processlist - lệnh sleep danh sách quy trình hiển thị mysql

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.7673 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 command sleep mysql show processlist - lệnh sleep danh sách quy trình hiển thị mysql

Jenny d

Phù bằng vàng 27.4K2121 gold badges74 silver badges110 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 command sleep mysql show processlist - lệnh sleep danh sách quy trình hiển thị mysql

Lệnh ngủ trong danh sách xử lý MySQL là gì?

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.MySQL process has done with its query, but the client-side did not yet exit. Many web applications don't clean up their connections afterwards, which leads to sleeping MySQL processes.

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 cách nào để xem danh sách quy trình?

Hiển thị danh sách xử lý cho bạn thấy chủ đề nào đang chạy.Bạn cũng có thể nhận thông tin này từ thông tin_schema.Bảng danh sách xử lý hoặc lệnh Danh sách xử lý MySQLadmin.Nếu bạn có đặc quyền quy trình, bạn có thể thấy tất cả các chủ đề. shows you which threads are running. You can also get this information from the information_schema. PROCESSLIST table or the mysqladmin processlist command. If you have the PROCESS privilege , you can see all threads.

Làm thế nào tôi có thể xem các truy vấn chạy dài trong mysql?

Chạy 'Danh sách xử lý hiển thị;'Truy vấn từ trong dấu nhắc chế độ tương tác MySQL... (Adding the 'full' modifier to the command disables truncation of the Info column. This is necessary when viewing long queries.) Pro: Using the full modifier allows for seeing the full query on longer queries.