Richiedi Informazioni

Come non ottimizzare query MySQL: attento ai select star!

Chiunque si trovi a lavorare con dei database, sa quanto sia importante ottimizzare le query – sia per ridurre l’I/O su disco che le performance del proprio applicativo/sito.

Una prima soluzione è affidare le query alla cache, ma non sempre è sufficiente. Vuoi saperne di più?

Il comando SELECT.
Escludiamo per un momento le operazioni di scrittura su database e consideriamo quelle di lettura, certamente più frequenti ed impattanti all’interno di un sito web dove, per definizione, le letture di pagina tendono ad essere più numerose delle scritture.

Le query di lettura si affidano al comando SELECT per interrogare database e disegnare la pagina. A seconda di cosa l’engine di CMS deve renderizzare, questo avrà bisogno di query essere più o meno complesse, e per questo sottopone a un carico alterno l’engine del database.

In questa fase, se un errore comune è quello di non usare gli indici, un altro, spesso sottovalutato dagli sviluppatori è scrivere query come SELECT * FROM ….

mytop ottimizzare query mysql

Ora, intendiamoci bene, il fatto che il linguaggio SQL consenta di effettuare una selezione su tutti i campi di una tabella, non vuol dire che questa sia automaticamente una buona idea.

Infatti, invocare un “SELECT * FROM” senza aver considerato natura e dimensioni della tabella stessa, comporterà:

  • che più grandi saranno le tabelle, maggiore sarà il tempo di esecuzione della query
  • che se avrai invocato il comando specificando una o più JOIN nel campo “FROM” il dataset crescerà esponenzialmente
  • chel la quantità di dati caricati da disco in memoria tenderà ad aumentare esponenzialmente, aumentando l’I/O complessivo
  • che le cache di MySQL si riempiranno più presto esaurendo la memoria allocabile a cache (se hai settato MySQL in modo da non mandare il sistema in memory overflow) oppure esaurendo la memoria allocabile dal sistema operativo (in questo caso non sei un sistemista, arrenditi e lasciati assimilare, ti conviene!).

E allora, a cosa serve il caching delle query?
Il caching serve a ridurre il numero di chiamate al disco per le query più ricorrenti, lasciando le risorse I/O disponibili per eseguire altre operazioni di lettura e diminuire il carico macchina, ma non certo a mettere una pezza ad una select star pensata male!

Per converso, puoi avere acquistato un sistema con quantità immense di RAM, ma se le tabelle sono sufficientemente ampie ed il codice scritto sufficientemente male, la cache risulterà inutile (e a volte dannosa).

C’è in Rete un articolo interessante su questo argomento, e che spiega l’impatto reale con una query di questo tipo: un rallentamento del 100% rispetto a una ricerca indicizzata, e il 5% in più di memoria utilizzata. E tutto questo (si tratta di dati generici, non indicativi per ogni database, quindi attenzione) semplicemente modificando una query da “fai una ricerca su tutte le tabelle” a “fai una ricerca su una o più tabelle specifiche”.

Può sembrare banale, ma non lo è affatto: un’attenzione in più nella sintassi delle tue query può portare nel breve/lungo periodo un miglioramento prestazionale, una consumo delle risorse più intelligente, così come un codice più pulito e ben scritto.

E perchè mi racconti tutto questo?
Lo faccio perchè costruisco piattaforme di hosting dedicato ad alta volumetria e (in determinate condizioni) ad elevata affidabilità. E siccome faccio questo mestiere so, per esperienza, che i problemi di performance non sono mai esclusivamente problemi di server, molte volte il problema è il software.

E quanto scrivo nel blog, peraltro, è ciò che mi aspetto da tutti i miei clienti: condividere con me la responsabilità di capire se il problema è nella base codice, modificare la base codice prima di modificare l’hardware che la esegue, effettuare test di carico, versionare il contenuto, automatizzare i deploy, etc etc.

La differenza fra me e gli altri provider è che in queste tematiche ci metto attenzione e ci metto la faccia (altrimenti, che ci starebbe a fare questo blog?).

Se poi ti piacerebbe avere al tuo fianco una ciurma di sistemisti skillati e capaci di far volare i tuoi siti web, se dovessi avere bisogno di migrare verso una piattaforma diversa e gestita per davvero, ma non sai quale scegliere, allora contattaci.

Sapremo aiutarti a costruire quella più adatta per le tue esigenze (e ti daremo anche qualche dritta nel caso le tue query non siano fatte proprio benissimo).