Mysql
 sql >> Database >  >> RDS >> Mysql

Prestazioni MySQL:identificazione di lunghe query

Ogni applicazione supportata da MySQL può trarre vantaggio da un server di database ottimizzato. Il team di supporto di Liquid Web Heroic ha riscontrato numerose situazioni nel corso degli anni in cui alcune piccole modifiche hanno fatto la differenza nelle prestazioni del sito Web e dell'applicazione. In questa serie di articoli, abbiamo delineato alcuni dei consigli più comuni che hanno avuto il maggiore impatto sulle prestazioni.

Verifica preliminare

Questo articolo si applica alla maggior parte dei server VPS MySQL basati su Linux. Ciò include, ma non è limitato a, server VPS tradizionali dedicati e cloud che eseguono una varietà di distribuzioni Linux comuni. L'articolo può essere utilizzato con i seguenti tipi di sistema Liquid Web:

  • CentOS 6x/7x con gestione principale
  • Ubuntu 14.04/16.04 con gestione principale
  • CPanel CentOS 6/7 completamente gestito
  • CentOS 7 Plesk Onyx 17 completamente gestito
  • Server Linux autogestiti
NotaI sistemi autogestiti, che hanno rinunciato al supporto diretto possono trarre vantaggio dalle tecniche discusse qui, tuttavia, il team di supporto di Liquid Web Heroic non può offrire un aiuto diretto su questi tipi di server.

Questa serie di articoli presuppone la familiarità con i seguenti concetti di base sull'amministrazione del sistema:

  • Connessioni SSH e navigazione di base dell'ambiente standard della shell della riga di comando di Linux.
  • Apertura, modifica e salvataggio di file in Vim o in un editor di sistema scelto.
  • Modalità interattiva MySQL e sintassi generale delle query MySQL.

Cos'è l'ottimizzazione MySQL?

Non esiste una definizione chiaramente definita per il termine Ottimizzazione MySQL. Può significare qualcosa di diverso a seconda della persona, dell'amministratore, del gruppo o dell'azienda. Per questa serie di articoli sull'ottimizzazione MySQL, definiremo l'ottimizzazione MySQL come: La configurazione di un server MySQL o MariaDB che è stato configurato per evitare i colli di bottiglia comunemente riscontrati discussi in questa serie di articoli.

Cos'è un collo di bottiglia?

Molto simile al collo di una bottiglia di soda, un collo di bottiglia come termine tecnico è un punto in un'applicazione o una configurazione del server in cui una piccola quantità di traffico o dati può passare senza problemi. Tuttavia, un volume maggiore dello stesso tipo di traffico o dati viene ostacolato o bloccato e non può funzionare correttamente così com'è. Vedi il seguente esempio di collo di bottiglia della configurazione:

In questo esempio, il server è in grado di gestire 10 connessioni contemporaneamente. Tuttavia, la configurazione accetta solo 5 connessioni. Questo problema non si manifesterebbe fintanto che ci fossero 5 o meno connessioni contemporaneamente. Tuttavia, quando il traffico aumenta fino a 10 connessioni, metà di esse inizia a non funzionare a causa delle risorse inutilizzate nella configurazione del server. Gli esempi precedenti illustrano la forma del collo di bottiglia da cui deriva il nome rispetto a una configurazione ottimizzata che corregge il collo di bottiglia.

Quando dovrei ottimizzare il mio database MySQL?

Idealmente, l'ottimizzazione delle prestazioni del database dovrebbe essere eseguita regolarmente e prima che la produttività ne risenta. È buona norma condurre audit settimanali o mensili delle prestazioni del database per evitare che i problemi influiscano negativamente sulle applicazioni. I sintomi più evidenti di problemi di prestazioni sono:

  • Le query si accumulano e non vengono mai completate nella tabella dei processi MySQL.
  • Le applicazioni oi siti Web che utilizzano il database diventano lenti.
  • Errori di timeout di connessione, soprattutto durante le ore di punta.

Sebbene sia normale che ci siano più query simultanee in esecuzione contemporaneamente su un sistema occupato, diventa un problema quando queste query impiegano troppo tempo per essere completate regolarmente. Sebbene la soglia specifica vari in base al sistema e all'applicazione, i tempi di query medi superiori a diversi secondi si manifesteranno come un rallentamento all'interno di siti Web e applicazioni collegati. Questi rallentamenti a volte possono iniziare in piccolo e passare inosservati fino a quando un forte aumento del traffico colpisce un collo di bottiglia particolare.

Identificazione dei problemi di rendimento

Sapere come esaminare la tabella dei processi MySQL è fondamentale per diagnosticare il collo di bottiglia specifico che si incontra. Esistono diversi modi per visualizzare la tabella dei processi a seconda del server e delle preferenze particolari. Per brevità questa serie si concentrerà sui metodi più comuni utilizzati tramite l'accesso Secure Shell (SSH):

Metodo 1. Utilizzo della tabella dei processi MySQL

Usa "mysqladmin ' strumento da riga di comando con il flag 'processlist ' o 'proc ' in breve. (Aggiungendo il flag "statistiche ' o 'statistica ' in breve mostrerà le statistiche in esecuzione per le query dall'ultimo riavvio di MySQL.)

Comando:

mysqladmin proc stat

Uscita:

 +-------+------+-----------+-----------+---------+------+-------+
 | Id    | User | Host      | db        | Command | Time | State | Info               | Progress |
 +-------+------+-----------+-----------+---------+------+-------+--------------------+----------+
 | 77255 | root | localhost | employees | Query   | 150  |       | call While_Loop2() | 0.000    |
 | 77285 | root | localhost |           | Query   | 0    | init  | show processlist   | 0.000    |
 +-------+------+-----------+-----------+---------+------+-------+--------------------+----------+
 Uptime: 861755  Threads: 2  Questions: 20961045  Slow queries: 0  Opens: 2976  Flush tables: 1  Open tables: 1011  Queries per second avg: 24.323
Nota:Pro :Utilizzato sull'interfaccia della shell, semplifica il piping dell'output su altri script e strumenti.Con :la colonna delle informazioni della tabella dei processi viene sempre troncata, quindi non fornisce la query completa su query più lunghe

Metodo 2:utilizzo della tabella dei processi MySQL

Esegui la query "show processlist;" dal prompt della modalità interattiva di MySQL. (Aaggiungendo il ' completo '  il modificatore al comando disabilita il troncamento di Informazioni colonna . Ciò è necessario quando si visualizzano query lunghe.)

Comando:

show processlist;

Uscita:

MariaDB [(none)]> show full processlist;
 +-------+------+-----------+-----------+---------+------+-------+-----------------------+----------+
 | Id    | User | Host      | db        | Command | Time | State | Info                  | Progress |
 +-------+------+-----------+-----------+---------+------+-------+-----------------------+----------+
 | 77006 | root | localhost | employees | Query   |  151 | NULL  | call While_Loop2()    |    0.000 |
 | 77021 | root | localhost | NULL      | Query   |    0 | init  | show full processlist |    0.000 |
 +-------+------+-----------+-----------+---------+------+-------+-----------------------+----------+
Professionista :l'utilizzo del modificatore completo consente di visualizzare la query completa su query più lunghe.Con :La modalità MySQL Interactive non può accedere a script e strumenti disponibili nell'interfaccia della shell.

Utilizzo del registro delle query lente

Un altro prezioso strumento in  MySQL è la funzionalità di registrazione delle query lente inclusa. Questa funzione è il metodo preferito per trovare regolarmente query di lunga durata. Sono disponibili diverse direttive per regolare questa funzione. Tuttavia, le impostazioni più comunemente necessarie sono:

slow_query_log abilita/disabilita il log delle query lente
file_log_query_lento nome e percorso del file di registro della query lenta
query_time_lunghe tempo in secondi/microsecondi che definisce una query lenta

Queste direttive sono impostate all'interno della sezione [mysqld] del file di configurazione MySQL che si trova in /etc/my.cnf e richiederanno un riavvio del servizio MySQL prima che abbiano effetto. Vedere l'esempio seguente per la formattazione:

Avviso:esiste un problema di spazio su disco di grandi dimensioni con il file di registro delle query lente, che deve essere controllato continuamente fino a quando la funzione di registro delle query lente non viene disabilitata. Tieni presente che più bassa è la tua direttiva long_query_time, più velocemente il registro della query lenta riempie una partizione del disco
[mysqld]
 log-error=/var/lib/mysql/mysql.err
 innodb_file_per_table=1
 default-storage-engine=innodb
 innodb_buffer_pool_size=128M
 innodb_log_file_size=128M
 max_connections=300
 key_buffer_size = 8M
 slow_query_log=1
 slow_query_log_file=/var/lib/mysql/slowquery.log
 long_query_time=5

Una volta abilitato il registro delle query lente, sarà necessario eseguirne periodicamente il follow-up per esaminare le query indisciplinate che devono essere modificate per prestazioni migliori. Per analizzare il file di registro della query lenta, puoi analizzarlo direttamente per esaminarne il contenuto. L'esempio seguente mostra le statistiche per la query di esempio che è stata eseguita per più dei 5 secondi configurati:

AttenzioneSi è verificato un calo delle prestazioni abilitando la funzionalità di registro delle query lente. Ciò è dovuto alle routine aggiuntive necessarie per analizzare ogni query, nonché all'I/O necessario per scrivere le query necessarie nel file di registro. Per questo motivo, è considerata best practice sui sistemi di produzione disabilitare il log delle query lente. Il registro delle query lente dovrebbe rimanere abilitato solo per una durata specifica quando si cercano attivamente query problematiche che potrebbero avere un impatto sull'applicazione o sul sito Web.
# Time: 180717  0:23:28
 # User@Host: root[root] @ localhost []
 # Thread_id: 32  Schema: employees  QC_hit: No
 # Query_time: 627.163085  Lock_time: 0.000021  Rows_sent: 0  Rows_examined: 0
 # Rows_affected: 0
 use employees;
 SET timestamp=1531801408;
 call While_Loop2();

Facoltativamente, puoi utilizzare lo strumento da riga di comando mysqldumpslow, che analizza il file di registro della query lenta e raggruppa insieme le query ad eccezione dei valori di numeri e dati di stringa:

~ $ mysqldumpslow -a /var/lib/mysql/slowquery.log
 Reading mysql slow query log from /var/lib/mysql/slowquery.log
 Count: 2  Time=316.67s (633s)  Lock=0.00s (0s)  Rows_sent=0.5 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost
 call While_Loop2()

(Per informazioni sull'utilizzo, visita la documentazione di MySQL qui - mysqldumpslow — Riepiloga i file di registro delle query lente)

Conclusione

Così conclude la prima parte della nostra serie sull'ottimizzazione del database e ci fornisce una solida base a cui fare riferimento per scopi di benchmark. Sebbene i problemi del database possano essere complicati, la nostra serie analizzerà questi concetti per fornire mezzi per ottimizzare il database attraverso la conversione del database, la conversione delle tabelle e l'indicizzazione.

Come possiamo aiutarti?

Siamo orgogliosi di essere gli esseri umani più utili nell'hosting™!

I nostri team di supporto sono pieni di tecnici Linux esperti e amministratori di sistema di talento che hanno una conoscenza approfondita di più tecnologie di hosting Web, in particolare quelle discusse in questo articolo.

In caso di domande relative a queste informazioni, siamo sempre disponibili a rispondere a qualsiasi domanda con problemi relativi a questo articolo, 24 ore al giorno, 7 giorni alla settimana 365 giorni all'anno.

Se sei un server VPS completamente gestito, dedicato al cloud, cloud privato VMWare, server padre privato, server cloud gestiti o proprietario di un server dedicato e ti senti a disagio nell'esecuzione di uno qualsiasi dei passaggi descritti, noi può essere raggiunto via telefono al numero @800.580.4985, una chat o un ticket di supporto per assisterti in questo processo.

Articolo successivo Navigazione serie>>