Điều đó có nghĩa là gì khi MySQL ở trạng thái Sending dữ liệu Gửi dữ liệu?


163

Điều đó có nghĩa là gì nếu truy vấn Mysql:

SHOW PROCESSLIST;

trả về "Gửi dữ liệu" trong cột Nhà nước?

Tôi tưởng tượng nó có nghĩa là truy vấn đã được thực thi và MySQL đang gửi dữ liệu Kết quả của Google cho khách hàng nhưng tôi tự hỏi tại sao nó lại mất quá nhiều thời gian (lên đến một giờ).

Cảm ơn bạn.


1
Nó có nghĩa là nó truyền dữ liệu từ quá trình của nó đến máy khách. Nếu bạn đang xem Sending datanhư một bước mất thời gian sau khi bạn chạy SHOW PROFILEthì thời gian thực sự thuộc về bước trước đó.
NB

Thật không may, tôi nhận được một tin nhắn, tính năng 'SHOW PROFILE' bị vô hiệu hóa, tôi phải xây dựng MySQL với 'enable-profiling'. Nhưng cảm ơn bạn đã phản hồi.
dùng1345414

Và đó là câu hỏi bổ sung. Truy vấn đã kết thúc nội bộ, đó có phải là vấn đề về tài nguyên để truyền như mạng hoặc xe buýt không?
dùng1345414

3
Không, bạn không nghe .. lý do Sending datacho thấy mất thời gian là vì đó là lỗi cấu hình MySQL, thời gian hiển thị ở đó thuộc về bước trước, nên là Executing queryhoặc một cái gì đó tương tự. Nó chỉ có nghĩa là truy vấn của bạn mất thời gian để thực hiện. Sending databước thường nhanh, trừ khi bạn truyền hàng trăm megabyte dữ liệu.
NB

3
Có lẽ câu hỏi đó có thể được đổi tên thành "Trạng thái 'Gửi dữ liệu' nghĩa là gì trong MySQL". Nó sẽ dễ dàng hơn để tìm câu hỏi.
chống độc

Câu trả lời:


249

Đây là một tình trạng khá sai lệch. Nó nên được gọi là "đọc và lọc dữ liệu".

Điều này có nghĩa là MySQLcó một số dữ liệu được lưu trữ trên đĩa (hoặc trong bộ nhớ) chưa được đọc và gửi qua. Nó có thể là chính bảng, một chỉ mục, một bảng tạm thời, một đầu ra được sắp xếp, v.v.

Nếu bạn có bảng bản ghi 1M (không có chỉ mục) mà bạn chỉ cần một bản ghi, MySQLvẫn sẽ xuất trạng thái là "gửi dữ liệu" trong khi quét bảng, mặc dù thực tế nó chưa gửi bất cứ thứ gì.


12
Tài liệu giải thích thêm rằng lý do rất có thể là do có nhiều thời gian thực hiện truy cập đĩa: dev.mysql.com/doc/refman/5.0/en/general-thread-states.html
Matthew Kolb

4
Và nếu MySQL "gửi dữ liệu" trong khi sử dụng CPU 99%, với rất ít I / O đĩa thì sao?
rustyx

@RustyX Làm thế nào về dữ liệu đã có trong bộ đệm trong RAM và nó đang sắp xếp một số hàng 100k hoặc 1M?
sjas

23

Ở trạng thái này:

Chuỗi này đang đọc và xử lý các hàng cho một câu lệnh CHỌN và gửi dữ liệu đến máy khách.

Bởi vì các hoạt động xảy ra trong trạng thái này có xu hướng thực hiện một lượng lớn truy cập đĩa (đọc) .

Đó là lý do tại sao phải mất nhiều thời gian hơn để hoàn thành và đó là trạng thái chạy lâu nhất trong suốt vòng đời của một truy vấn nhất định.

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.