Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Migliorare le prestazioni di MySQL

Quali sono le configurazioni post-installazione di MySQL che possono migliorare le prestazioni del database. Analisi delle prestazioni e definizione dei colli di bottiglia
Quali sono le configurazioni post-installazione di MySQL che possono migliorare le prestazioni del database. Analisi delle prestazioni e definizione dei colli di bottiglia
Link copiato negli appunti

Le prestazioni fornite da un Database server come MySQL dipendono in particolare da tre elementi:

  1. le caratteristiche della macchina ospitante come per esempio l'hardware disponibile, il sistema operativo utilizzato e le altre applicazioni che girano sulla stessa postazione;
  2. il carico di lavoro a cui è sottoposto il programma, cioè il traffico di dati prodotto dalle richieste da parte dei client e dalle conseguenti risposte fornite per soddisfare le interrogazioni;
  3. la configurazione associata al Database server, come per esempio le direttive e le funzionalità abilitate o meno per il DBMS.

Naturalmente, esistono altre variabili che influiscono sulle prestazioni di un'applicazione per la gestione delle basi di dati, come per esempio la versione utilizzata del programma stesso, l'utilizzo o meno di un sistema di caching per le queries e molto altro.

In questa breve trattazione vedremo quali siano le caratteristiche che possono rendere un DBMS più performante e quindi più efficace nella gestione delle chiamate e delle risposte da e verso i client.

Come il sistema influisce sulle prestazioni

In linea generale, è possibile affermare che una macchina ospitante mal configurata a livello di sistema e dotata di scarse risorse hardware, difficilmente garantirà prestazioni ottimali per un DBMS che dovrà gestire alti carichi di lavoro.

Viene introdotto così il discorso relativo ai "colli di bottiglia" (anche "col d'oca" o bottleneck), cioè quei fenomeni che si verificano quando le prestazioni e le capacità di un sistema o di un'applicazione sono fortemente limitate dalla presenza un singolo componente o da un numero limitato di componenti o risorse.

Un'applicazione (ma anche una semplice pagina Web), può essere in grado di produrre numerose query, un carico di lavoro che si traduce in informazioni lette dalla base di dati mentre altrettante vengono scritte nel medesimo database; in una situazione del genere è possibile che entrino in gioco dei colli di bottiglia, essi determinano rallentamenti anche prolungati a carico del Database manager.

In informatica, la procedura preposta all'esame dei colli di bottiglia è chiamata "analisi delle prestazioni" e può essere applicata a qualsiasi settore, compreso quello dei Database manager; applicando l'analisi delle prestazioni a MySQL è possibile individuare i seguenti colli di bottiglia a livello di sistema:

  • tempo di ricerca (seek time): definisce il tempo necessario alla testina di un disco rigido per posizionarsi sulla traccia successiva per la lettura e la scrittura dei dati; per evitare rallentamenti e rendere più semplici le procedure di ricerca è possibile suddividere i dati in più di un disco;
  • lettura e scrittura del disco: il tempo di ricerca riguarda la velocità di reperimento di un'informazione all'interno di un disco, in questo caso invece si parla del momento in cui la ricerca viene conclusa e un dato è disponibile per essere letto o scritto; eventuali decrementi nelle prestazioni possono essere evitati grazie alla lettura in parallelo da più dischi;
  • cicli della CPU: lo stato di un processore viene modificato ogni volta che esso riceve un impulso da un segnale chiamato clock, esso ne determina l'operatività ("velocità di clock"), di conseguenza, il tempo per l'esecuzione di un'istruzione viene misurata in cicli di clock, cioè il numero di impulsi necessari per il completamento di un'istruzione; nella scelta di una macchina ospitante (come di un hosting o di un server dedicato), sarà quindi importante poter conoscere le caratteristiche della relativa CPU tanto quanto la quantità di spazio e di banda disponibile;
  • disponibilità di memoria: quando la CPU necessita di una quantità di dati maggiore rispetto a quelli allocabili tramite la propria cache, la memoria stessa della CPU può rappresentare un limite per le prestazioni; si tratta di una situazione che si verifica di rado ma che può essere una spiegazione per eventuali rallentamenti.

Direttive per la configurazione

Se le problematiche relative alle caratteristiche hardware e software relative alla macchina ospitante di un Database manager, così come i rallentamenti dovuti al carico di lavoro, possono essere risolti "esternamente" al DBMS, lo stesso non si può dire per quanto riguarda la configurazione dell'applicazione che andrà a gestire i dati.

A questo proposito MySQL mette a disposizione alcune direttive che possono influire positivamente sul livello delle prestazioni e di conseguenza limitare quanto più possibile gli effetti derivanti dai colli di bottiglia:

skip-name-resolve: quando questa direttiva è abilitata, il DBMS non risolve i nomi di host, ciò vuol dire che tutti i valori presenti nella colonna "Host" della tabella dei privilegi corrisponderanno ad un identificativo sotto forma di IP o più semplicemente a "localhost"; la risoluzione degli hostname necessita infatti di tempo e influisce sulle prestazioni generali dell'applicazione.

skip-networking: nel caso in cui questa direttiva sia abilitata, il DBMS non si porrà in ascolto delle connessioni attraverso TCP/IP risparmiando tempo e risorse per le esecuzioni; non si tratta di una configurazione applicabile universalmente, ma può essere impostata quando un'installazione del Database manager risiede nella stessa macchina da cui vengono inizializzate le connessioni.

max_connections: questa direttiva determina il numero massimo di connessioni simultanee verso un database (si esprime infatti attraverso un valore numerico intero); la possibilità di stabilire un numero arbitrario di connessioni per volta dipende naturalmente dal contesto in cui il DBMS si trova ad operare, ma è sempre bene tenere conto del fatto che MySQL è stato concepito per allocare un certa quantità di memoria per ogni connessione aperta, quindi, più saranno le connessioni simultanee consentite, più sarà la memoria dedicata ad esse e minore sarà la quantità di memoria da destinare alle esecuzione delle query.

max_allowed_packet: per MySQL un packet si configura come un'istruzione MySQL presa singolarmente o come un singolo record restituito, in generale questa direttiva dovrebbe essere impostata con un valore pari alla quantità di memoria RAM disponibile nella macchina ospitante, si tratta però di una direttiva che ritorna utile soltanto nel caso in cui si preveda di gestire dati di grandi dimensioni come per esempio quelli contenuti in campi che prevedono il tipo di dato BLOB.

log-slow-queries: si tratta di una direttiva che ha il compito di definire il percorso al file in cui verranno notificate tutte le interrogazioni il cui periodo di esecuzione supera il valore associato al parametro "long_query_time" del Database manager; si tratta di una configurazione opzionale, se questa non viene impostata, le query eseguite più lentamente andranno a popolare la tabella denominata "slow_log" del database MySQL, analizzando il contenuto di questa tabella sarà possibile rilevare le caratteristiche delle interrogazioni che corrispondono ai livelli di prestazione meno elevati.

default-storage-engine: come è noto, MySQL mette a disposizione il supporto per diverse tipologie di engine (tipi) per le tabelle, ciascun tipo di tabella integra attributi e caratteristiche diverse e la loro scelta porta con sé implicazioni differenti a livello di prestazioni; un tipo da associare alle tabelle dovrà essere scelto sulla base dei dati che si desidera manipolare, il tipo che si utilizza più spesso potrà essere impostato come storage engine predefinito. InnoDB può per esempio essere per esempio ritenuto preferibile a MyISAM in quanto presenta un propria gestione della cache rendendo la modifica dei dati più veloce, d'altra parte MyISAM potrebbe essere preferito in quanto InnoDB richiede una maggiore quantità di memoria e di spazio su disco e non supporta le ricerche FULL TEXT.

back_log: un Database server MySQL ben configurato dovrebbe essere in grado di gestire simultaneamente un numero anche molto alto di connessioni; ciascuna connessione viene delegata dal processo principale del DBMS ad un processo apposito, grazie alla direttiva back_log sarà possibile definire il numero di connessioni consentite nel momento in cui il processo principale gestisce una richiesta per una nuova connessione.

datadir: si tratta di una direttiva definibile manualmente attraverso l'indicazione di un percorso interno al sistema, si utilizza per la separazione dei dati nelle diverse partizioni di un disco e può essere utile per ottimizzare le esecuzioni e incrementare il livello delle prestazioni.

Conclusioni

È possibile condizionare il livello delle prestazioni di un Database manager MySQL grazie all'abilitazione o meno di determinate direttive; queste, insieme alle caratteristiche generali della macchina ospitante, permettono di rendere più efficiente il Database manager nel momento in cui deve gestire il carico di lavoro relativo alle chiamate da parte dei client, sotto forma di interrogazioni, e agli output prodotti per fornire ad essere delle risposte sotto forma di risultati.

Ti consigliamo anche