Extraer datos es solo la mitad del camino. Una vez que hemos analizado las métricas y cuellos de botella mediante Performance Schema y el esquema sys, nos enfrentamos a la etapa más crucial: tomar acciones. Veremos entonces cómo traducir los datos en estrategias sólidas de fine-tuning a nivel de servidor, optimización de índices y particionamiento de tablas.
El fine-tuning consiste en ajustar la configuración de memoria y procesamiento (my.cnf) basándonos en evidencia.
sys.io_global_by_file_by_bytes revelan una cantidad asfixiante de lecturas en disco (read waits altos) sobre tablas de datos .ibd, probablemente el caché de lectura principal es muy pequeño. La métrica te guía para aumentar innodb_buffer_pool_size a un nivel adecuado (idealmente entre el 50% y el 70% de la RAM en servidores dedicados a BBDD).Created_tmp_disk_tables o vemos muchos tiempos altos en la etapa de filesort, puede significar dos cosas: faltan índices estructurados u ocupan demasiado espacio. A nivel de servidor, podemos aumentar prudentemente sort_buffer_size o tmp_table_size, permitiendo que el cálculo se procese velozmente en memoria RAM en lugar de escribir a los lentos discos.Como vimos, el Performance Schema identifica sin piedad los Full Table Scans y los índices inútiles. La estrategia de índices debe ser quirúrgica:
sys.schema_unused_indexes es eliminar esos índices "basura". Un índice menos implica un paso menos para mantener actualizados los árboles B-Tree en cada INSERT o UPDATE, liberando recursos de disco, RAM y CPU instantáneamente.sys.statement_analysis), no te limites a crear un índice por cada columna que aparezca en el WHERE. Emplea índices compuestos considerando la selectividad y el orden:
WHERE estado = 'activo').fecha > '2023-01-01').ORDER BY, para evitar el doloroso filesort.A veces, añadir un índice no es suficiente. Si mediante Performance Schema detectamos tiempos altísimos en table_io_waits_summary_by_table sobre una tabla histórica (por ejemplo, pagos o logs de usuario) con cientos de millones de registros, un árbol de índice muy profundo también pasará su factura de penalización al consultar o insertar. Aquí llega el Particionamiento.
El particionamiento divide lógicamente una gran tabla física en varias "sub-tablas" invisibles para la aplicación. La estrategia al aplicar los datos de PS es la siguiente:
WHERE, el particionamiento logra su magia: el Partition Pruning (poda de particiones). El motor MySQL ignora físicamente las particiones que no encajan en las fechas, consultando solo una fracción mínima del disco y los índices de esa partición.data_locks). Al particionar por fecha, puedes usar ALTER TABLE ... DROP PARTITION en vez de un costoso DELETE, un proceso que libera decenas de gigas en milisegundos sin bloqueos de transacción.El rendimiento no es cuestión de suerte, tampoco se arregla ciegamente "comprando un servidor más potente". El flujo de un verdadero experto debe ser un ciclo continuo: Medir (mantener PS activo y recolectando), Analizar (interpretar métricas recurrentes detectando los dolores del sistema) y Actuar (aplicar estrategias de Índices, Tuning o Particiones). Solo así se garantiza una arquitectura a prueba de balas y escalable.