Oggi il sito è di nuovo bloccato e si trova un gran numero di persone che dormino
Cause del sonno:
1 Il programma client non ha chiamato mysql_close() prima di uscire.
2 Il client era stato in sospensione per più di wait_timeout o interactive_timeout secondi senza emettere richieste al server.
3 Il programma client terminò bruscamente nel mezzo di un trasferimento dati
Se il numero di processi in sospensione nello stesso periodo è troppo alto e il numero totale di connessioni in altri stati supera il valore max_connection, MySQL non può più elaborare richieste tranne l'utente root, non può stabilire una connessione con alcuna richiesta o si blocca direttamente
Soluzione:
1. Innanzitutto, verifica se il tuo programma utilizza il metodo pconnect e, in secondo luogo, verifica se il mysql_close() viene chiamato in tempo prima che la pagina venga eseguita. Cerca di non usare il metodo pconnect, cioè usa mysql_connect. Quando il programma viene eseguito, il mysql_close deve essere evocato esplicitamente
2. Aggiungi wait_timeout e interactive_timeout a my.cnf, imposta il valore più piccolo, di default il valore wait_timeout è 8 ore, puoi cambiarlo in 1 ora o mezz'ora. In questo modo mysql ucciderà le connessioni morte più velocemente. Impedire che il numero totale di connessioni superi il valore max_connection.
wait_timeout troppo grande farà sì che un gran numero di processi SLEEP in MySQL vengano rilasciati nel tempo, rallentando le prestazioni del sistema, ma se le impostazioni sono troppo piccole potresti incontrare problemi come "MySQL è sparito"
Imposta il valore max_connection a un valore più alto, ma ovviamente non è appropriato: più connessioni hai, più stress metti sul server. In realtà, questi collegamenti sono ridondanti, e ucciderli il prima possibile è la politica migliore.
3. Analizzare passo dopo passo la query SQL del sistema, trovare l'SQL troppo lento e ottimizzarlo
1)interactive_timeout: Significato del parametro: Il numero di secondi in cui il server aspetta un'attività prima di spegnere la connessione interattiva. Un client interattivo è definito come un client che utilizza CLIENT_INTERACTIVE opzione in mysql_real_connect(). Parametro predefinito: 28800 secondi (8 ore)
(2)wait_timeout: Significato del parametro: Il numero di secondi in cui il server attende l'attività prima di chiudere la connessione non interattiva. Quando il thread inizia, il valore della sessione wait_timeout viene inizializzato in base al valore globale wait_timeout o globale interactive_timeout, a seconda del tipo di client (definito CLIENT_INTERACTIVE le opzioni di connessione di mysql_real_connect()). Parametro predefinito: 28800 secondi (8 ore)
Esiste un limite massimo al numero massimo di connessioni che MySQL Server può supportare, poiché ogni connessione viene stabilita e consuma memoria, quindi ci aspettiamo che i clienti si disconnettano e liberino la memoria occupata dopo essersi collegati a MySQL Server per gestire l'operazione corrispondente. Se il tuo MySQL Server ha un gran numero di connessioni inattive, non solo consumerà memoria inutilmente, ma se le connessioni continuano ad accumularsi e aprirsi, raggiungeranno infine il numero massimo di connessioni in MySQL Server, il che riporterà l'errore 'troppe connessioni'. L'impostazione dei valori del wait_timeout dovrebbe essere giudicata in base al funzionamento del sistema. Dopo che il sistema è stato in esecuzione per un certo periodo, puoi controllare lo stato della connessione del sistema corrente tramite il comando show processlist; se trovi un gran numero di processi connessi in stato di sospensione, significa che l'impostazione dei parametri è troppo grande e puoi effettuare le aggiustamenti appropriati per fare piccoli aggiustamenti.
Comando SQL:
Questo metodo di modifica è inDopo aver riavviato il servizio mysql, sarà invalido, quindi è meglio configurare queste due proprietà nel file di configurazione MySQL.
Modifica il file my.cnf sotto Linux:
|