MySQL 5.x e stored procedures "slow as hell"

Per diverso tempo questo messaggio è rimasto semplicemente una bozza, con la convinzione di non aver colto qualcosa o di sbagliare da qualche parte ho preferito attendere per esprimere la mia perplessità riguardante la resa in termini prestazionali delle stored procedures in MySQL 5. Tuttavia le versioni della 5.0 passano ma il problema che ho incontrato fin dall'inizio rimane sempre lo stesso anche con le recenti beta della 5.1, per cui a questo punto ho deciso di rendere pubblico il mio disappunto sperando però che qualcuno possa quantomeno darmi una spiegazione di questo comportamento. Nel mio caso reale su una base di dati "live" di un'applicazione in produzione ho una query di SELECT che prende in causa 7 tabelle differenti nella clausola FROM e con 2 LEFT JOIN su altre due tabelle, in base all'EXPLAIN direi che la query in questione è il più ottimizzata possibile relativamente al contesto e al tipo di selezione che deve effettuare. Eseguendo questa query con una bella clausola SQL_NO_CACHE per evitare la cache di MySQL vengono resituite 87 righe in 0 secondi netti (87 rows in set (0.00 sec)). Prendendo la stessa query e inglobandola in una stored procedure, l'esecuzione restituisce le medesime 87 righe ma questa volta impiegando più di 13 secondi (87 rows in set (13.52 sec)) e occupando il 100% del processore durante l'operazione: non si può nemmeno parlare di forte degrado delle performance, si tratta di un risultato disastroso. La cosa ancora più strana è che le performance sembrano degradare in maniera esponenziale all'aumentare del set di righe risultatanti, per cui escluderei che la colpa sia da imputare alla mancata memorizzazione della stessa stored procedure in formato compilato. Posso riprodurre lo stesso problema anche attraverso una semplicissima tabella di due campi (per esempio id e descrizione) con una banale SELECT sulla stessa, quello che cambia è solamente il grado di abbassamento delle prestazioni, probabilmente per la complessità ridottissima della query, però il comportamento in generale è uguale. Qualcuno è in grado di darmi una spiegazione?


Puoi scrivere un commento oppure inviare un trackback dal tuo sito.

1 commento a “MySQL 5.x e stored procedures "slow as hell"”

  1. Come si comporta la tua Stored Procedure con MySQL 5.6? Purtroppo le Stored Procedure sono lente, su questo non c'è dubbio. Però un rallentamento come quello che descrivi mi sembra esagerato. Potrebbe esserci qualche problema difficile da diagnosticare. Ad esempio potresti controllare che i parametri che passi alla procedura usino il character set e la collation giusti, perché in caso contrario può darsi che non possa utilizzare gli indici. Per controllare questa cosa, puoi eseguire un SHOW PROCESSLIST mentre la query incriminata è in esecuzione.

Lascia un commento

Puoi utilizzare i seguenti tag XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>