MarcosBL

Aprendiz de todo, maestro de nada

Localizar las tablas MySQL más grandes de nuestro servidor

Sólo apto para MySQL 5:

[mysql]
SELECT
concat(table_schema,’.’,table_name),
concat(round(table_rows/1000000,2),’M’) rows,
concat(round(data_length/(1024*1024*1024),2),’G’) DATA,
concat(round(index_length/(1024*1024*1024),2),’G’) idx,
concat(round((data_length+index_length)/(1024*1024*1024),2),’G’) total_size,
round(index_length/data_length,2) idxfrac FROM information_schema.TABLES
ORDER BY data_length+index_length DESC LIMIT 10;
[/mysql]

Lo que hace, vulgarmente, viene siendo recopilar información de la tabla TABLES de la BD INFORMATION_SCHEMA, una nueva BD por defecto en las distribuciones 5 y posteriores, que almacena información acerca de todas las tablas de todas las bds del servidor. Muy práctico para saber cual es ese cliente de nuestro servidor que se está comiendo el disco duro a golpe de almacenar basura :)

El ejemplo de resultado se explica sólo:

[mysql]
+————————————-+——–+——–+——–+————+———+
| concat(table_schema,’.’,table_name) | rows | DATA | idx | total_size | idxfrac |
+————————————-+——–+——–+——–+————+———+
| art87.link_out87 | 37.25M | 14.83G | 14.17G | 29.00G | 0.96 |
| art87.article87 | 12.67M | 15.83G | 4.79G | 20.62G | 0.30 |
| art116.article116 | 10.49M | 12.52G | 3.65G | 16.18G | 0.29 |
| art84.article84 | 10.10M | 10.11G | 3.59G | 13.70G | 0.35 |
| art104.link_out104 | 23.66M | 6.63G | 6.55G | 13.18G | 0.99 |
| art118.article118 | 7.06M | 10.49G | 2.68G | 13.17G | 0.26 |
| art106.article106 | 9.86M | 10.19G | 2.76G | 12.95G | 0.27 |
| art85.article85 | 6.20M | 9.82G | 2.51G | 12.33G | 0.26 |
| art91.article91 | 8.66M | 9.17G | 2.66G | 11.83G | 0.29 |
| art94.article94 | 5.21M | 10.10G | 1.69G | 11.79G | 0.17 |
+————————————-+——–+——–+——–+————+———+
10 rows IN SET (2 min 29.19 sec)
[/mysql]

El creador original de la función es Peter Zaitsev, de MySQL Performance Blog, antiguo Responsable de Rendimiento en MySQL Inc.