MySQLが「データの送信中」の状態にあるとはどういう意味ですか?


163

Mysqlクエリの意味は次のとおりです。

SHOW PROCESSLIST;

状態列に「送信データ」を返しますか?

クエリが実行され、MySQLがクライアントに「結果」データを送信していることを意味していると思いますが、なぜこれほど長い時間(最大1時間)かかるのか疑問に思っています。

ありがとうございました。


1
つまり、プロセスからクライアントにデータを送信しています。Sending data実行SHOW PROFILE後に時間がかかるステップとして表示されている場合、消費される時間は実際には前のステップに属しています。
NB

残念ながら、私はメッセージを受け取ります。「SHOW PROFILE」機能は無効になっています。MySQLを「enable-profiling」でビルドする必要があります。
user1345414 2012

そして、それは追加の質問です。クエリは既に内部的に終了していますが、ネットワークやバスなどの送信用リソースの問題ですか?
user1345414 2012

3
いいえ、あなたは聞いていません.. Sending dataそれがMySQLプロファイリングのバグであるために時間がかかっていると表示される理由は、そこに表示される時間は前のステップに属し、それはExecuting queryまたは同様のはずです。これは、クエリの実行に時間がかかることを意味します。Sending data数百メガバイトのデータをストリーミングしない限り、ステップは通常高速です。
NB

3
おそらく、その質問は「MySQLでの「データの送信」状態の意味」に名前を変更できます。質問を見つけやすくなります。
2013

回答:


249

これはかなり誤解を招く状況です。「データの読み取りとフィルタリング」と呼ばれるべきです。

これは、MySQLまだ読み取られずに送信されるデータがディスク(またはメモリ)に保存されていることを意味します。テーブル自体、インデックス、一時テーブル、ソートされた出力などです。

レコードMySQLが1つだけ必要な1Mレコードテーブル(インデックスなし)がある場合、まだ何も送信していないにもかかわらず、テーブルのスキャン中にステータスが「送信データ」として出力されます。


12
理由がディスクアクセスを実行するのに多くの時間が原因である可能性が最も高いことをさらに説明するドキュメント:dev.mysql.com/doc/refman/5.0/en/general-thread-states.html
Matthew Kolb

4
また、MySQLが99%のCPUを使用し、ディスクI / Oが非常に少ない状態で「データを送信」し​​ている場合はどうなりますか?
rustyx

@RustyX RAMのバッファにすでに存在しているデータはどうですか?それは100kまたは1Mの行をソートしていますか?
sjas 2017年

23

この状態では:

スレッドはSELECTステートメントの行を読み取って処理し、データをクライアントに送信しています。

この状態で発生する操作は、大量のディスクアクセス(読み取り)を実行する傾向があるため です。

そのため、完了までに時間がかかり、指定されたクエリの存続期間全体で最も長く実行されている状態になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.