Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 33231|Risposta: 6

[Fonte] MySQL analizza l'elevato utilizzo della CPU in situazioni di concorrenza elevata

[Copiato link]
Pubblicato su 05/09/2017 20:23:59 | | | |


Recentemente, per qualche motivo, il numero di visite al sito web è aumentato notevolmente e, dalla cifra, si può vedere che il numero di connessioni concorrenti supera le 1.200

Poiché la configurazione del server è molto bassa, 1 core e memoria 2G, e poi il sito web è molto lento da raggiungere quando ci sono molte persone


Usiamo il comando top per controllare, mysql occupa molta CPU e memoria, e altri processi sono php-fpm che occupano CPU e memoria, che non sono molto elevati

Se mysql funziona normalmente, è che alcune istruzioni SQL in PHP causano problemi e l'utente root entra nella gestione MySQL
mysql -u root -p
Inserisci la password, poi inserisci il seguente comando




Con questo comando, possiamo vedere che il database esegue costantemente operazioni di cancellazione con condizioni where.



pre_k_spider questa tabella è una tabella che registra gli accessi spider, presumibilmente causati da un plugin installato

Possiamo vedere che pre_k_spider tabella ha più di 100.000 record e la query richiede 33 secondi



Svuota decisamente questa tabella e poi vai sullo sfondo della gestione per chiudere i plug-in rilevanti della tabella e riportarla alla normalità!









Precedente:Servizio di Riconoscimento dei Codici di Verifica del Marketplace Cloud di Alibaba Cloud Cloud
Prossimo:mysql 5.6.21 per visualizzare il file di configurazione my.cnf
 Padrone di casa| Pubblicato su 06/09/2017 09:32:56 |


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:




Pubblicato su 06/09/2017 11:15:15 |
Devo prendere un server master-slave
 Padrone di casa| Pubblicato su 06/09/2017 11:15:49 |
Vrchary ha pubblicato il 6-9-2017 alle 23:15
Devo prendere un server master-slave

Motivo della configurazione del server: la configurazione è bassa   
 Padrone di casa| Pubblicato su 06/09/2017 13:47:56 |
Risolto il problema di "mysql-bin.000001" che occupava molto spazio
http://www.itsvse.com/thread-2694-1-1.html
(Fonte: Architetto)

Dopo aver installato MySQL con le porte, dopo un po' ho scoperto che lo spazio /var era insufficiente, ho controllato e ho scoperto che mysql-bin.000001, mysql-bin.000002 e altri file occupavano spazio, quindi a cosa servono questi file? Questo è il registro operativo del database, come AGGIORNARE una tabella o DELETE alcuni dati; anche se l'istruzione non corrisponde ai dati, questo comando sarà memorizzato nel file di registro, incluso il tempo di esecuzione di ciascuna istruzione, che verrà anch'esso registrato.

Questo viene fatto principalmente per i seguenti due scopi:
1: Recupero dati
Se il tuo database ha un problema e hai già fatto un backup, puoi guardare il file di log per scoprire quale comando ha causato il problema nel database e trovare un modo per recuperare la perdita.
2: Sincronizzare i dati tra server master-slave
Tutte le operazioni sul server principale sono registrate in un log che il server slave può utilizzare per garantire che entrambi siano sincronizzati.

Chiudi semplicemente il registro


 Padrone di casa| Pubblicato su 09/10/2017 14:33:30 |
mysqld occupa troppo la CPU sotto Windows



Soluzione: Ottimizzare l'istruzione SQL
Pubblicato su 30/12/2021 23:15:36 |
Supportalo!!!!!!!!!!!!!!!!
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com