Apa artinya ketika MySQL dalam keadaan "Mengirim data"?

163

Apa artinya jika permintaan Mysql:

SHOW PROCESSLIST;

mengembalikan "Mengirim data" di kolom Negara?

Saya membayangkan itu berarti permintaan telah dieksekusi dan MySQL mengirimkan "hasil" Data ke klien tapi saya bertanya-tanya mengapa ini mengambil begitu banyak waktu (hingga satu jam).

Terima kasih.

pengguna1345414
sumber
1
Ini berarti mengirimkan data dari prosesnya ke klien. Jika Anda melihat Sending datasebagai langkah yang membutuhkan waktu setelah Anda menjalankan, SHOW PROFILEmaka waktu yang dikonsumsi sebenarnya milik langkah sebelumnya.
NB
Sayangnya saya menerima pesan, Fitur 'SHOW PROFILE' dinonaktifkan, saya harus membuat MySQL dengan 'enable-profiling'. Tetapi terima kasih atas tanggapan Anda.
user1345414
Dan ini pertanyaan tambahan. Query telah selesai secara internal, apakah ini masalah sumber daya untuk transmisi seperti jaringan atau bus?
user1345414
3
Tidak, Anda tidak mendengarkan .. alasan yang Sending datamenunjukkan memakan waktu adalah karena ini adalah bug profil MySQL, waktu yang ditunjukkan ada pada langkah sebelumnya, yang seharusnya Executing queryatau yang serupa. Itu artinya permintaan Anda membutuhkan waktu untuk dieksekusi. Sending datalangkah biasanya cepat, kecuali Anda mengalirkan ratusan megabyte data.
NB
3
Mungkin pertanyaan itu dapat diubah namanya menjadi "Apa arti status 'Mengirim data' di MySQL". Akan lebih mudah untuk menemukan pertanyaannya.
antitoksik

Jawaban:

249

Ini adalah status yang cukup menyesatkan. Itu harus disebut "membaca dan memfilter data".

Ini berarti MySQLmemiliki beberapa data yang disimpan di disk (atau dalam memori) yang belum dibaca dan dikirim. Mungkin tabel itu sendiri, indeks, tabel sementara, output yang diurutkan dll.

Jika Anda memiliki tabel catatan 1M (tanpa indeks) di mana Anda hanya perlu satu catatan, MySQLmasih akan menampilkan status sebagai "mengirim data" saat memindai tabel, meskipun faktanya belum mengirim apa pun.

Quassnoi
sumber
12
Dokumentasi yang lebih lanjut menjelaskan bahwa alasannya kemungkinan besar karena banyak waktu melakukan akses disk: dev.mysql.com/doc/refman/5.0/en/general-thread-states.html
Matthew Kolb
4
Dan bagaimana jika MySQL "mengirim data" saat menggunakan 99% CPU, dengan sangat sedikit disk I / O?
rustyx
@RustyX Bagaimana dengan data yang sudah ada dalam buffer dalam RAM dan sedang mengurutkan beberapa baris 100k atau 1M?
sjas
23

Dalam kondisi ini:

Utas membaca dan memproses baris untuk pernyataan SELECT , dan mengirim data ke klien.

Karena operasi yang terjadi selama ini, negara ini cenderung melakukan sejumlah besar akses disk (baca) .

Itu sebabnya dibutuhkan lebih banyak waktu untuk menyelesaikan dan begitu juga keadaan terpanjang selama masa permintaan yang diberikan.

Venkatesh Kalikiri
sumber