Dovrei preoccuparmi del processo di stato del sonno mysql in processlist


Risposte:


17

Anche i più potenti di noi hanno bisogno di dormire a volte. Senza dormire si diventa ansiosi e l'insonnia può portare a tutti i tipi di sintomi gravi.

Più seriamente: lo stato di sospensione indica che il processo MySQL ha completato la sua query, ma il lato client non è ancora uscito. Molte applicazioni Web non puliscono le connessioni in seguito, il che porta a processi MySQL inattivi. Non preoccuparti se ce ne sono solo una manciata; MySQL li pulirà dopo un periodo di timeout configurabile (wait_timeout).

O se la tua applicazione web utilizza connessioni persistenti e pool di connessioni, allora è perfettamente normale avere anche molti processi inattivi: in tal caso la tua applicazione apre ad esempio 100 connessioni SQL e le mantiene aperte. Ciò riduce le spese generali di apertura / chiusura della connessione. A meno che l'applicazione non sia molto impegnata, è normale che non quasi tutti i processi SQL abbiano qualcosa da fare, quindi dormono.


5

No, non preoccuparti per loro se non ne hai migliaia. Di solito indicano una connessione al database che al momento non sta facendo nulla, ma che è comunque ancora attiva.

Molti siti Web sono costruiti in modo tale che all'inizio dell'elaborazione di una pagina venga aperta una connessione al database, quindi utilizzata per tutta la generazione della pagina e infine scartata alla fine. Se lo scarto viene eseguito correttamente, la connessione al database viene chiusa e il server ucciderà quindi il thread pertinente, il che significa che questa connessione scompare dall'elenco dei processi.

Se la connessione non viene chiusa, potrebbe rimanere nello stato "SLEEP" fino al timeout. In tal caso potresti finire con molti processi di sonno. ma a meno che non si verifichino problemi di memoria sul server db, anche questo non è un grosso problema.


3

Prima di aumentare la variabile max_connections, è necessario verificare quante connessioni non interattive sono disponibili eseguendo il comando show processlist.

Se si dispone di molte connessioni di sospensione, è necessario ridurre il valore della variabile "wait_timeout" per chiudere la connessione non interattiva dopo aver atteso alcune volte.

  • Per mostrare il valore wait_timeout:
VISUALIZZA VARIABILI SESSIONE COME 'wait_timeout';

+ --------------- + ------- +
| Nome variabile | Valore |
+ --------------- + ------- +
| wait_timeout | 28800 |
+ --------------- + ------- +

il valore è in secondo, significa che la connessione non interattiva è ancora fino a 8 ore.

  • Per modificare il valore della variabile "wait_timeout":
Sessione SET wait_timeout = 600;
Query OK, 0 righe interessate (0.00 sec)

Dopo 10 minuti se la connessione sleep è ancora inattiva, mysql o MariaDB interrompono tale connessione.

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.