2012-08-30 14 views
53

Quando eseguo SHOW PROCESSLIST nel database MySQL, ottengo questo output:SHOW PROCESSLIST al comando di MySQL: il sonno

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 | 
+--------+------+-----------+-------+---------+-------+-------+------------------------+ 

Vorrei conoscere il processo "Sleep" che si trova sotto comando. Cosa significa? Perché è in funzione da molto tempo e mostra NULL? Sta rendendo il database lento e quando cancello il processo, allora funziona normalmente. Mi aiuti per favore.

+0

non fa nulla, si limita a sedersi e "aspetta" una connessione. – Rufinus

+1

possiamo trovare quale query è in attesa di connessione? il mio que ha un senso? E perché rallenta il mio database? – gthm

+0

È davvero * rallentando il database? non sta facendo niente. È fondamentalmente una connessione che non sta facendo nulla - ad esempio, forse è stato collegato su un altro terminale qualche tempo fa, e non si è scollegato, ecc. – BugFinder

risposta

41

Non è una query in attesa per la connessione, si tratta di un puntatore di collegamento in attesa di il timeout per terminare.

Non ha alcun impatto sulle prestazioni. L'unica cosa che sta usando è pochi byte come ogni connessione.

Nel caso peggiore si utilizza una connessione del pool, se ci si connette più volte tramite il client della console e si chiude il client senza chiudere la connessione è possibile utilizzare tutte le connessioni e attendere il timeout per essere in grado di connettersi di nuovo ... ma questo è altamente improbabile :-)

Vedere MySql Proccesslist filled with "Sleep" Entries leading to "Too many Connections"? e https://dba.stackexchange.com/questions/1558/how-long-is-too-long-for-mysql-connections-to-sleep per ulteriori informazioni.

+0

Il problema può essere se hai delle connessioni limitate al database. Perché anche quelle connessioni non hanno un impatto sulle prestazioni, ma contano ancora come una connessione. – mrded

14

Le connessioni di stato di "sospensione" vengono spesso create dal codice che mantiene connessioni permanenti al database.

Questo potrebbe includere i pool di connessioni creati dai framework dell'applicazione o gli strumenti di amministrazione del database sul lato client.

Come menzionato sopra nei commenti, non c'è davvero alcun motivo per preoccuparsi di queste connessioni ... a meno che, naturalmente, non si abbia idea di dove provenga la connessione.

(avvertimento: Se tu avessi una lunga lista di questi tipi di connessioni, ci potrebbe essere il rischio di rimanere a corto di connessioni simultanee.)

0

Sonno che significa che il thread non fa nulla. Il tempo è troppo grande per query thread anthor, ma non disconnettere server, default wait_timeout = 28800; in questo modo è possibile impostare valori più piccoli, ad esempio 10. inoltre è possibile interrompere il thread.

Problemi correlati