me voi a dar la paja de comentar y poner mi opinión sobre cada una, que los años de experiencia sirvan de algo xD:
- Enable InnoDB file-per-table: útil, muy útil, pero dependiendo del caso tb puede ser más lento que "file per database".
- Store MySQL Database Data on Separate Partition: Obviamente si pones tus datos en un SSD todas las operaciones que requieren disco van a ser más rápido. A pesar de que el artículo dice que no funciona en MariaDB, debo decir que sí funciona, de hecho tengo funcionando un server con esta configuración
- Optimizing InnoDB buffer pool Usage: Setting delicado. Tiene harta influencia en la rapidez de la db, pero no hay que irse al chancho ya que tb hay otras cosas que requieren memoria. Mi consejo? Incrementen este valor hasta que cachen que ya no pueden más. Ojo que si lo dejan por ejemplo en 1GB, el proceso MySQL les tomará 1.5GB más menos, y no será instantáneo, pero irá ocupando lo que necesite. Tb ojo con indexes demasiado grandes.
- Avoid Swappiness in MySQL: dooh ! Aunque no recomiendo desactivarlo por completo, si corren kernel 3.5+, lo recomiendo dejar en 1, sino en 10.
- Set MySQL Max Connections: Cada conexión requiere su pedazo de memoria, tengan cuidado con este setting! Bajo condiciones ideales, el número de conexiones hacia la db debería ser igual (en el mundo real un poco más alto si tenemos en cuenta sistemas de monitoreo, procesos CLI, etc) al número de conexiones a su webserver (u otra aplicación si la hay). Por el otro lado, si su aplicación no se puede conectar a la db, están sonados. Recomiendo herramientas de monitoreo (con log) para ver cuál es el valor ideal.
- Configure MySQL thread_cache_size: Tb importante para que no ocupe tanta memoria, la inicialización inicial además es más lenta.
- Disable MySQL Reverse DNS Lookups: Sólo es importante si se conectan desde TCP/IP y no desde socket (que sería el caso ideal). Para sshd siempre activo este setting dado que siempre me conecto via TCP/IP hacia SSH. Dato rosa: si se conectan a "localhost" se ocupará el socket, si se conectan a "127.0.0.1" se ocupará TCP/IP. Adicionalmente, me gusta desactivarlo por completo, cerrando toda posibilidad de conectarse remotamente.
- Configure MySQL query_cache_size: uff este... bajo ciertas condiciones, teniendo suficiente buffer pool, ocupar query_cache_size es de hecho más lento. Además hay un montón de otros requerimientos chicos, y al final uno se encuentra con miles de queries que no es necesario meter en cache, ya que obviamente hay que preferir aquellas que sí valen la pena. Mi consejo personal? Desactívenlo a menos que sepan muy bien la estructura de su base de datos y cada query que pasa por ella.
- Configure tmp_table_size and max_heap_table_size: También hay que diagnosticar este con herramientas de monitoreo. La idea detrás de esto es reducir la cantidad de tablas temporales que se tengan que escribir en disco. (Hay de dos tipos, una en RAM, la otra en disco). Hay un montón de cosas que uno le puede preguntar a la db en vivo y en directo, pero como dije, lo importante es establecer el límite de cosas que MySQL escribirá a disco. Ojo que cualquier ORDER BY, JOIN, GROUP BY, DISTINCT y otras producirá una tabla temporal, así que habrán queries gigantes que no podrán evitar mandar a disco.
- Enable MySQL Slow query Logs: Arma de doble filo. Útil pero costoso.
- Check for MySQL idle Connections: Importante, si no se pueden conectar a la db por falta de conexiones máximas, se acabó el cuento.
- Choosing Right MySQL Filesystem: Yo me iría por XFS, pq btrFS no es más rápido con archivos grandes (sí con muchos archivos chicos!) y ext4 está en retirada y será reemplazado por btrFS de todas formas.
- Set MySQL max_allowed_packet: Y por eso es que es una pésima idea de crear un BLOB en la DB. Si tienen problemas con guardar grandes datos (8MB+) en la db, este será su setting preferido.
- Check MySQL Performance Tuning: Útil, aunque prefiero las herramientas de monitoreo ya que con ellas puedo mirar en el pasado y comparar. Aunque MySQL guarda estadísticas de todo, hay algunas que son cumulativas y no se puede mirar un momento determinado en el tiempo.
- Optimize and Repair MySQL Databases: Ojalá fuera así de fantástico
Saludos.