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

Vista: 15232|Risposta: 3

[Fonte] Soluzione al 100% high-up di CPU MySQL

[Copiato link]
Pubblicato su 11/10/2018 11:20:31 | | | |
Apri il task manager server e scopro che il processo CPU è sempre stato al 99%, e la visuale è occupata dal processo mysql, che era sempre alto.


L'output del comando della lista dei processi mostra quali thread sono in esecuzione e puoi controllare lo stato attuale del database.

1. Vai nella directory mysql/bin e inserisci la lista processi mysqladmin;
2. Avvia mysql e inserisci la lista dei processi.
Se hai il permesso SUPER, puoi vedere tutti i thread, altrimenti puoi vedere solo i thread del tuo account.





Il significato e lo scopo di ogni colonna

id: Un identificatore
user: visualizza l'utente corrente, se non è root, questo comando mostrerà solo le istruzioni SQL all'interno dei tuoi permessi.
host: mostra da quale IP proviene questa dichiarazione da quale porta
db: Visualizza il database a cui il processo è attualmente collegato.
comando: Visualizza i comandi eseguiti dalla connessione corrente, solitamente sospeso, interrogazione e connettenza.
tempo: Il tempo che dura questo stato, in secondi.
stato: Visualizza lo stato dell'istruzione SQL che utilizza la connessione corrente, ma solo un certo stato nell'esecuzione dell'istruzione, un comando sql, è stato interrogato; ad esempio, potrebbe dover passare attraverso la copia alla tabella tmp, l'ordinamento dei risultati, l'invio dei dati, ecc
info: Mostra questa istruzione SQL, perché la lunghezza è limitata, quindi la lunga istruzione SQL non è completamente visualizzata, ma è una base importante per giudicare la dichiarazione del problema.


Si scopre che ci sono due istruzioni query SQL che richiedono il tempo più lungo e non sono state eseguite per più di 1000 secondi, e le istruzioni SQL che abbiamo copiato dal campo info sono una query congiunta, come segue:

seleziona cast(count(*) come FIRMATO) come col_0_0_ da 'RatedPassenger' ratedpasse0_, 'BaseInfoCompany' baseinfoco1_, 'OrderMatch' ordermatch2_ dove baseinfoco1_. CompanyId=ratedpasse0_. Compagnia e ordermatch2_. OrderId=ratedpasse0_. OrderId

Blocchiamo il processo di queste due query statement

Dopo aver aspettato 10 secondi, ho scoperto che la CPU era calata molto, ma era comunque molto alta, e continuerò a interrogarmi sul motivo!



Per la dichiarazione joint inquiry, aggiungi un indice al campo associato o modifica il codice della query del programma.
Crea un'istruzione SQL indicizzata

Fine





Precedente:C# accedi a Wordpress
Prossimo:Modifica il metodo di mappatura delle porte per i container docker
 Padrone di casa| Pubblicato su 11/10/2018 13:03:02 |
Il più critico di questo comando è la colonna stato, e gli stati elencati in mysql sono principalmente i seguenti:

Tabella di controllo  
  Controllo il foglio tecnico (è automatico).  
  Tabelle di chiusura  
  I dati modificati nella tabella vengono scaricati sul disco, e la tabella che è stata consumata viene chiusa. Questa è un'operazione rapida, altrimenti dovresti controllare se lo spazio su disco è pieno o se il disco è sotto carico.  
  Connettiti  
  Il server schiavo di replicazione si sta collegando al server primario.  
  Copia su tabella tmp su disco  
  Poiché il set di risultati temporaneo è maggiore di tmp_table_size, la tabella temporanea viene convertita dalla memoria interna alla memoria su disco per risparmiare memoria.  
  Creazione della tabella tmp  
  Si sta creando una tabella temporanea per contenere alcuni dei risultati delle query.  
  Eliminazione dalla tabella principale  
  Il server sta eseguendo la prima parte di una cancellazione multi-tabella e ha appena cancellato la prima tabella.  
  Cancellazione dalle tabelle di riferimento  
  Il server sta eseguendo la seconda parte della cancellazione multi-tabella, ovvero l'eliminazione dei record da altre tabelle.  
  Tabelle di scarico  
  Fare le TABELLE FLUSH, aspettare che altri thread chiudano la datatable.  
  Ucciso  
  Se viene inviata una richiesta di uccisione a un thread, il thread controllerà la bandiera di kill e abbandonerà la richiesta successiva. MySQL controlla la presenza di kill flag in ogni ciclo principale, anche se in alcuni casi il thread può morire per un breve periodo di tempo. Se il thread viene bloccato da un altro thread, la richiesta di kill avrà effetto immediatamente quando il blocco viene rilasciato.  
  Chiuso a chiave  
  Bloccati da altre richieste.  
  Invio dei dati  
  Il record della query SELECT viene elaborato mentre i risultati vengono inviati al client.  
  Ordinamento per gruppo  
  Ordinando per GRUPPO PER.  
  Ordinamento per ordine  
  Lo smistamento viene fatto per ORDER BY.  
  Tabelle di apertura  
  Questo processo dovrebbe essere rapido a meno che altri fattori non vengano interferenti. Ad esempio, una tabella dati non può essere aperta da un altro thread finché non viene eseguita la sentenza ALTER TABLE o LOCK TABLE. Sto cercando di aprire un tavolo.  
  Rimozione dei duplicati  
  Viene eseguita una query SELECT DISTINCT, ma MySQL non riesce a ottimizzare i record duplicati nella fase precedente. Pertanto, MySQL deve rimuovere nuovamente i record duplicati prima di inviare i risultati al client.  
  Riapertura tabella  
  Si ottiene un lock su una tavola, ma deve essere modificato dopo che la struttura della tabella è stata modificata. Ho già rilasciato il blocco, chiuso il datasheet e sta cercando di riaprire il datatable.  
  Riparazione tramite smistamento  
  L'istruzione di correzione è l'ordinamento per creare un indice.  
  Riparazione con keycache  
  La direttiva fix utilizza la cache dell'indice per creare nuovi indici uno per uno. Sarà più lento di Riparazione tramite smistamento.  
  Ricerca di aggiornamenti nelle righe  
  I registri idonei vengono identificati per essere aggiornati. Deve essere fatto prima che l'AGGIORNAMENTO modifichi il record rilevante.  
  Dormire  
  Aspettare che il cliente invii una nuova richiesta.  
  Blocco di sistema  
  Aspettando di ottenere un blocco di sistema esterno. Se non ci sono server mysqld in esecuzione contemporaneamente che richiedono la stessa tabella, i blocchi di sistema esterni possono essere vietati aggiungendo il parametro –skip-external-locking.  
  Aggiornamento della chiusa  
  INSERT DELAYED sta cercando di far inserire un nuovo record a una tabella di serratura.  
  Aggiornamento  
  Cercano i registri corrispondenti e li modifichi.  
  Blocco utente  
  sta aspettando GET_LOCK().  
  Aspettare i tavoli  
  Il thread è stato notificato che la struttura del datasheet era stata modificata e doveva essere riaperta per poter ottenere la nuova struttura. Poi, per riaprire la tabella dati, devi aspettare che tutti gli altri thread chiudano la tabella. Questa notifica avviene nei seguenti casi: FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE o OPTIMIZE TABLE.  
  in attesa dell'inserimento del handler  
  INSERT DELAYED ha elaborato tutti gli inserti in sospeso ed è in attesa di una nuova richiesta.  
  La maggior parte degli stati corrisponde a operazioni rapide, finché un thread rimane nello stesso stato per qualche secondo, può esserci un problema da controllare.
 Padrone di casa| Pubblicato su 01/03/2019 10:26:49 |
 Padrone di casa| Pubblicato su 01/03/2019 10:34:13 |


Ci vogliono 10 secondi per interrogare un dato.
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