Es importante poder conocer el tamaño que ocupan nuestras base de datos y tablas para poder definir donde hay gran cantidad de datos y por ende hay que realizar optimizacion
Sintaxis
SELECT table_schema AS "Base de datos",
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Tamaño (MB)"
FROM information_schema.TABLES
GROUP BY table_schema;
Saber el peso de una tablas
Sintaxis
SELECT table_name AS "Tabla",
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Tamaño (MB)"
FROM information_schema.TABLES
WHERE table_schema = "base_de_datos"
ORDER BY (data_length + index_length) DESC;
Lo estandar es guardar campos que guardar uuid en varchar de 32 o incluso en char de 32 pero por alguna razon cuando se guarda en campos de tipo binario el rendimiento mejora considerablemente y si ademas indexamos el campos el rendimiento es hasta 160% mas rapido que si lo guardamos en tipo texto.
Para Permitirnos ver las querys que estan tomando mucho tiempo en realizarse en el servidor y que por ende nos estan causando problemas de rendimiento lo podremos activar en el archivo de configuracion my.cnf, pero tambien podremos activarlo desde una consulta.
Sintaxis
SET GLOBAL slow_query_log = 'ON';
Por defaul cualqueir consulta que dure mas de 10 segunos sera registrada, podemos cambiar ese tiempo usando la siguiente instrucción.
Sintaxis
SET GLOBAL long_query_time = TIEMPO;
Para desactivarlo solo tendremos que hacer esta consulta. Cuando
Sintaxis
SET GLOBAL slow_query_log = 'OFF';
Mysql tiene basicamente dos motores de base de datos MyISAM e InnoDB por desgracia la forma de repararlas no es la misma asi que listo rapidamente las dos maneras de realizar estas tareas
Tendras que detener el servicio de base de datos dependiedo de la distribucion de SO que tengas.
En esta parte recomiendo en sacar un respaldo de los archivos data de tu base de datos, esto tambien dependera del SO anfitrion de tu servidor de base de datos.
Si quieres verificar toda una base de datos usaras el siguiente comando.
mysqlcheck base_de_datos
Si solo quieres verificar una tabla seria el siguiente:
mysqlcheck base_de_datos tabla
En ambos casos indicara si la tabla contiene algun error si no mostrara ok alado de la tabla.
En caso de requerir reparacion el mismo comando que usaste pero con el parametro -r hara la reparacion quedando d ela siguiente manera:
mysqlcheck -r base_de_datos tabla
Para una repacaion mas especializada podras en caso de usar este motor usar la herramienta myisamchk la cual trabbaja con archivos asi que tendras que indicar el archivo con extencion .MYI de la tabla que quieres reparar tambien puedes indicarle *.MYI para que lo haga en todas las tablas.
Si el comando logra encontrar alguna tabla con fallo ejecutarias el siguiente comando para repararla.
myisamchk --recover tabla
Para el caso de InnoDB se tiene que hacer un cmabio en el archivo de configuración, por supuesto con el servicio de la base de datos apagado.
innodb_force_recovery=4
dentro del archivo de configuracion my.cnf
luego usando mysqldump habria que respaldar las base de datos
mysqldump --all-databases --add-drop-database --add-drop-table > bases_de_datos.sql
Despues abria que borra la base de datos y restaurar el respaldo que hicimos, para finalizar comentando de nuevo la configuracion hecha en el archivo my.cnf
mysql < bases_de_datos.sql
#innodb_force_recovery=4
para mas informacion el link de la documentación oficial