Paràmetres de rendiment de MySQL
Generals
key_buffer_size
Molt important per MyISAM, recomanable posar-lo al 30-40% de la memòria disponible si només s'usa MyISAM. També depèn del número i tamany d'indexs que s'usi, una bona mesura sinó és un 25% de la memòria. Cal tenir en compte que MyISAM usa la cache del sistema per a les dades.
table_cache
Nombre de taules que un thread pot mantenir obertes. Evidentment com més millor, però tenint en compte que consumeix recursos de sistema. Incrementar més com ḿes taules o més conexions es facin. Un mínim seria 512, es poden posar valors alts de fins a 100000 per exemple
threads_cache
Crear/destruïr threads té un cost elevat, aquí s'especifica quants threads es volen mantenir en reserva (actius) per reaprofitar-los per a les conexions. Un mínim recomanable serien 16, convé augmentar-ho si veiem que Threads_created augmenta molt ràpid.
Query Cache
query_cache_size
Tamany de cache destinat a guardar resultats de queries. Si es fan lectures intensives millora molt la velocitat, però té un cost de manteniment. Valors de 32Mb a 512Mb tenen sentit.
query_cache_limit
Especifica el tamany màxim d'una query per permetre que es guardi en cache. S'aprofita l'espai amb un tamany petit (més consultes petites).
sort_buffer_size
Buffer que s'utilitza per fer ordenacions i agrupacions. Si les dades no hi caben es fa a disc, però tampoc convé fer-lo mol gran ja que s'en crea un per cada thread i pot consumir fàcilment molta memòria.
tmp_table_size
Espai per taules temporals (també usat per ordenacions i agrupaments). Si no hi cap és crea un fitxer temporal a disc.
InnoDB
innodb_buffer_pool_size
Idem al keybuffersize de MyISAM però importantíssim per InnoDB. InnoDB no usa la cache de sistema per això aquest valor a vegades es posa al 70-80% de la memòria del sistema (si només s'usa InnoDB).
innodb_flush_log_at_trx_commit
InnoDB pot ser 100 vegades més lent que MyISAM. El valor per defecte (1) indica que cada transacció fa flush de dades a disc, amb 2 només fa flush a la cache de sistema. Amb 0 va un pèl més ràpid encara al cost del risc de perdre alguna transacció en cas de fallada del MySQL.
Servidor
Log Binari
Si no fem copies dels logs transaccionals i no fem rèplica, deshabilitar-lo suposa menys accés a disc i més velocitat (1%)
wait_timeout
Temps d'espera per tancar un conexión inactiva. Simple, però el valor per defecte (60 minuts) és exagerat per la majoria d'aplicacions.
--skip-name-resolve
Evita la resolució de noms DNS de les conexions, senzill però té efectes sobre l'autorització d'usuaris.
Referències
- Tuning LAMP systems, Part 3: Tuning your MySQL server (col·lecció de 3 articles molt bons)
- Sundry MySQL Scripts i el tuning-primer.sh