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

Suggerimenti per fornire prestazioni del database MySQL - Parte prima

Il back-end del database influisce sull'applicazione, che può quindi influire sulle prestazioni dell'organizzazione. Quando ciò accade, i responsabili tendono a volere una soluzione rapida. Ci sono molte strade diverse per migliorare le prestazioni in MySQL. Essendo una scelta molto popolare per molte organizzazioni, è abbastanza comune trovare un'installazione MySQL con la configurazione predefinita. Tuttavia, questo potrebbe non essere appropriato per il tuo carico di lavoro e per le tue esigenze di configurazione.

In questo blog, ti aiuteremo a comprendere meglio il carico di lavoro del tuo database e le cose che potrebbero danneggiarlo. La conoscenza di come utilizzare risorse limitate è essenziale per chiunque gestisca il database, soprattutto se esegui il tuo sistema di produzione su MySQL DB.

Per garantire che il database funzioni come previsto, inizieremo con gli strumenti gratuiti di monitoraggio di MySQL. Esamineremo quindi i relativi parametri MySQL che puoi modificare per migliorare l'istanza del database. Daremo anche un'occhiata all'indicizzazione come fattore nella gestione delle prestazioni del database.

Per essere in grado di ottenere un utilizzo ottimale delle risorse hardware, daremo un'occhiata all'ottimizzazione del kernel e ad altre impostazioni cruciali del sistema operativo. Infine, esamineremo le configurazioni alla moda basate su MySQL Replication e come può essere esaminato in termini di ritardo delle prestazioni.

Identificazione dei problemi di prestazioni di MySQL

Questa analisi ti aiuta a comprendere meglio lo stato e le prestazioni del tuo database. Gli strumenti elencati di seguito possono aiutarti a catturare e comprendere ogni transazione, consentendoti di rimanere aggiornato sulle sue prestazioni e sul consumo di risorse.

PMM (Monitoraggio e Gestione Percona)

Lo strumento Percona Monitoring and Management è una raccolta open source di strumenti dedicati ai database MySQL, MongoDB e MariaDB (on-premise o nel cloud). PPM è gratuito ed è basato sulle note serie temporali di Grafana e Prometheus DB. Fornisce un'analisi completa basata sul tempo per MySQL. Offre dashboard preconfigurati che aiutano a comprendere il carico di lavoro del database.

PMM utilizza un modello client/server. Dovrai scaricare e installare sia il client che il server. Per il server, puoi utilizzare Docker Container. È facile come estrarre l'immagine della finestra mobile del server PMM, creare un contenitore e avviare PMM.

Estrarre l'immagine del server PMM

docker pull percona/pmm-server:2

2: Pulling from percona/pmm-server

ab5ef0e58194: Downloading  2.141MB/75.78MB

cbbdeab9a179: Downloading  2.668MB/400.5MB

Crea contenitore PMM

docker create \

   -v /srv \

   --name pmm-data \

   percona/pmm-server:2 /bin/true

Esegui contenitore

docker run -d \

   -p 80:80 \

   -p 443:443 \

   --volumes-from pmm-data \

   --name pmm-server \

   --restart always \

   percona/pmm-server:2

Puoi anche controllare come appare senza un'installazione. Una demo di PMM è disponibile qui.

Un altro strumento che fa parte del set di strumenti PMM è Query Analytics (QAN). Lo strumento QAN rimane aggiornato sul tempo di esecuzione delle query. Puoi persino ottenere i dettagli delle query SQL. Fornisce inoltre una vista storica dei diversi parametri critici per le prestazioni ottimali di un server di database MySQL. Questo spesso aiuta a capire se eventuali modifiche al codice potrebbero danneggiare le tue prestazioni. Ad esempio, è stato introdotto un nuovo codice a tua insaputa. Un semplice utilizzo sarebbe visualizzare le query SQL correnti ed evidenziare i problemi per aiutarti a migliorare le prestazioni del tuo database.

PMM offre visibilità puntuale e storica delle prestazioni del database MySQL. I dashboard possono essere personalizzati per soddisfare le tue esigenze specifiche. Puoi anche espandere un particolare pannello per trovare le informazioni che desideri su un evento passato.

Monitoraggio database gratuito con ClusterControl

ClusterControl fornisce il monitoraggio in tempo reale dell'intera infrastruttura del database. Supporta vari sistemi di database a partire da MySQL, MariaDB, PerconaDB, MySQL NDB Cluster, Galera Cluster (sia Percona che MariaDB), MongoDB, PostgreSQL e TimescaleDB. I moduli di monitoraggio e distribuzione sono gratuiti.

ClusterControl è costituito da diversi moduli. Nella ClusterControl Community Edition gratuita possiamo utilizzare:

I consulenti per le prestazioni offrono consigli specifici su come affrontare i problemi di database e server, ad esempio come prestazioni, sicurezza, gestione dei registri, configurazione e pianificazione della capacità. I report operativi possono essere utilizzati per garantire la conformità in centinaia di istanze. Tuttavia, il monitoraggio non è gestione. ClusterControl include funzionalità come la gestione del backup, il ripristino automatico/failover, l'implementazione/ridimensionamento, gli aggiornamenti in sequenza, la sicurezza/crittografia, la gestione del bilanciamento del carico e così via.

Monitoraggio e consulenti

La ClusterControl Community Edition offre il monitoraggio gratuito del database che fornisce una vista unificata di tutte le implementazioni nei data center e consente di approfondire i singoli nodi. Simile a PMM, possiamo trovare dashboard basati su dati in tempo reale. Serve per sapere cosa sta succedendo ora, con metriche ad alta risoluzione per una maggiore precisione, dashboard preconfigurati e un'ampia gamma di servizi di notifica di terze parti per gli avvisi.

I sistemi on-premise e cloud possono essere monitorati e gestiti da un unico punto . Controlli di integrità intelligenti sono implementati per topologie distribuite, ad esempio, il rilevamento del partizionamento di rete sfruttando la vista del sistema di bilanciamento del carico dei nodi del database.

ClusterControl Workload Analytics in uno dei componenti di monitoraggio che può aiutarti facilmente a tenere traccia delle attività del database. Fornisce chiarezza nelle transazioni/query dalle applicazioni. Le eccezioni di prestazioni non sono mai previste, ma si verificano e sono facili da perdere in un mare di dati. Il rilevamento anomalo otterrà tutte le query che iniziano improvvisamente a essere eseguite molto più lentamente del solito. Tiene traccia della media mobile e della deviazione standard per i tempi di esecuzione delle query e rileva/avvisa quando la differenza tra il valore supera la media di due deviazioni standard.

Come possiamo vedere dall'immagine qui sotto, siamo stati in grado di catturare alcune query che tra un giorno e l'altro tendono a cambiare il tempo di esecuzione in un momento specifico.

Per installare ClusterControl fare clic qui e scaricare lo script di installazione. Lo script di installazione si occuperà dei passaggi di installazione necessari.

Dovresti anche controllare ClusterControl Demo per vederlo in azione.

Puoi anche ottenere un'immagine Docker con ClusterControl.

$ docker pull severalnines/clustercontrol

Per ulteriori informazioni su questo, segui questo articolo.

Indicizzazione database MySQL

Senza un indice, l'esecuzione della stessa query comporta un'analisi di ogni riga per i dati necessari. La creazione di un indice su un campo in una tabella crea una struttura dati aggiuntiva, che è il valore del campo, e un puntatore al record a cui si riferisce. In altre parole, l'indicizzazione produce una scorciatoia, con tempi di query molto più rapidi su tabelle estese. Senza un indice, MySQL deve iniziare con la prima riga e quindi leggere l'intera tabella per trovare le righe pertinenti.

In generale, l'indicizzazione funziona meglio su quelle colonne che sono oggetto delle clausole WHERE nelle query eseguite di frequente.

Le tabelle possono avere più indici. La gestione degli indici richiederà inevitabilmente la possibilità di elencare gli indici esistenti su una tabella. La sintassi per visualizzare un indice è la seguente.

Per controllare gli indici sulla tabella MySQL esegui:

SHOW INDEX FROM table_name;

Dato che gli indici vengono utilizzati solo per velocizzare la ricerca di un campo corrispondente all'interno dei record, è ovvio che i campi di indicizzazione utilizzati solo per l'output sarebbero semplicemente uno spreco di spazio su disco. Un altro effetto collaterale è che gli indici possono estendere le operazioni di inserimento o eliminazione e quindi, quando non necessario, dovrebbero essere evitati.

Scambio database MySQL

Sui server in cui MySQL è l'unico servizio in esecuzione, è buona norma impostare vm.swapiness =1. L'impostazione predefinita è 60, che non è appropriata per un sistema di database.

vi /etc/sysctl.conf
vm.swappiness = 1

Pagine enormi trasparenti

Se stai eseguendo MySQL su RedHat, assicurati che Transparent Huge Pages sia disabilitato.

Questo può essere verificato con il comando:

cat /proc/sys/vm/nr_hugepages
0

(0 significa che le pagine enormi trasparenti sono disabilitate.)

Programmatore di I/O MySQL 

Nella maggior parte delle distribuzioni, gli schedulatori di I/O noop o con scadenza dovrebbero essere abilitati per impostazione predefinita. Per verificarlo esegui

cat /sys/block/sdb/queue/scheduler 

Opzioni del file system MySQL

Si consiglia di utilizzare file system journal come xfs, ext4 o btrfs. MySQL funziona bene con tutti loro e le differenze più probabilmente arriveranno con la dimensione massima del file supportata.

  • XFS (dimensione massima del filesystem 8EB, dimensione massima del file 8EB)
  • XT4 (dimensione massima del filesystem 8EB, dimensione massima del file 16TB)
  • BTRFS (dimensione massima del filesystem 16EB, dimensione massima del file 16EB)

Le impostazioni predefinite del file system dovrebbero essere valide.

Diamone NTP

È una buona pratica installare NTP time server demon sui server di database. Usa uno dei seguenti comandi di sistema.

#Red Hat
yum install ntp
#Debian
sudo apt-get install ntp

Conclusione

Questo è tutto per la prima parte. Nel prossimo articolo, continueremo con le impostazioni dei sistemi operativi delle variabili MySQL e le query utili per raccogliere lo stato delle prestazioni del database.