Cosa significa quando MySQL si trova nello stato "Invio dati"?


163

Cosa significa se la query Mysql:

SHOW PROCESSLIST;

restituisce "Invio dati" nella colonna Stato?

Immagino significhi che la query è stata eseguita e MySQL sta inviando i dati "risultato" al client, ma mi chiedo perché ci vuole così tanto tempo (fino a un'ora).

Grazie.


1
Significa che sta trasmettendo dati dal suo processo al client. Se stai vedendo Sending datacome un passaggio che richiede tempo dopo l'esecuzione, SHOW PROFILEil tempo impiegato appartiene effettivamente al passaggio precedente.
NB

Sfortunatamente prendo un messaggio, la funzione "MOSTRA PROFILO" è disabilitata, devo far costruire MySQL con "abilita il profilo". Ma grazie per la tua risposta.
user1345414,

Ed è una domanda aggiuntiva. La query è già terminata internamente, è una questione di risorse per la trasmissione come rete o bus?
user1345414,

3
No, non stai ascoltando ... il motivo che Sending datamostra come prendere tempo è perché è un bug di profilazione di MySQL, il tempo mostrato lì appartiene al passaggio precedente, che dovrebbe essere Executing queryo qualcosa di simile. Significa solo che l'esecuzione della query richiede tempo. Sending datail passaggio è in genere rapido, a meno che non si eseguano lo streaming di centinaia di megabyte di dati.
NB

3
Forse quella domanda potrebbe essere rinominata "Cosa significa lo stato 'Invio dati' in MySQL". Sarà più facile trovare la domanda.
antitossico

Risposte:


249

Questo è uno stato piuttosto fuorviante. Dovrebbe essere chiamato "lettura e filtro dei dati".

Ciò significa che MySQLalcuni dati sono memorizzati sul disco (o in memoria) che devono ancora essere letti e inviati. Può essere la tabella stessa, un indice, una tabella temporanea, un output ordinato ecc.

Se si dispone di una tabella di record 1M (senza indice) di cui è necessario un solo record, MySQLverrà comunque visualizzato lo stato come "invio di dati" durante la scansione della tabella, nonostante non abbia ancora inviato nulla.


12
La documentazione che spiega ulteriormente che il ragionamento è molto probabilmente dovuto al fatto che molto tempo fa l'accesso al disco: dev.mysql.com/doc/refman/5.0/en/general-thread-states.html
Matthew Kolb

4
E se MySQL "invii dati" mentre utilizza una CPU al 99%, con un I / O su disco molto ridotto?
Rustyx,

@RustyX Che ne dici dei dati già presenti nel buffer nella RAM e che sta ordinando circa 100.000 o 1 milione di righe?
sjas,

23

In questo stato:

Il thread sta leggendo ed elaborando le righe per un'istruzione SELECT e inviando i dati al client.

Poiché le operazioni che si verificano durante questo stato tendono ad eseguire grandi quantità di accesso al disco (letture) .

Ecco perché ci vuole più tempo per il completamento, così come lo stato di esecuzione più lunga per tutta la durata di una determinata query.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.