Mysql磁盘告警-快速查询分布情况
在 MySQL 中,如果你想查询某些表的存储占用情况,可以使用 information_schema
数据库中的 TABLES
表。这个表包含了数据库中每个表的详细信息,包括其占用的空间。
以下是一个示例查询,展示如何获取特定数据库中所有表的存储占用情况:
SELECT
TABLE_NAME AS `Table`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS `Size (MB)`,
ROUND(DATA_LENGTH / 1024 / 1024, 2) AS `Data Size (MB)`,
ROUND(INDEX_LENGTH / 1024 / 1024, 2) AS `Index Size (MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = 'your_database_name' -- 替换为你的数据库名
ORDER BY
(DATA_LENGTH + INDEX_LENGTH) DESC;
查询说明:
- TABLE_NAME: 表的名称。
- DATA_LENGTH: 表中数据的字节大小。
- INDEX_LENGTH: 表中索引的字节大小。
- TABLE_SCHEMA: 数据库的名称。
- ROUND: 用于将结果四舍五入到小数点后两位。
- ORDER BY: 按照表的总大小降序排列。
查询特定表的占用情况
如果你只想查询特定的表,可以在 WHERE
子句中添加相应的条件,例如:
SELECT
TABLE_NAME AS `Table`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS `Size (MB)`,
ROUND(DATA_LENGTH / 1024 / 1024, 2) AS `Data Size (MB)`,
ROUND(INDEX_LENGTH / 1024 / 1024, 2) AS `Index Size (MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = 'your_database_name' -- 替换为你的数据库名
AND TABLE_NAME IN ('table1', 'table2') -- 替换为你要查询的表名
ORDER BY
(DATA_LENGTH + INDEX_LENGTH) DESC;
查询示例
SELECT
TABLE_NAME AS `表名`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS `大小 (MB)`,
ROUND(DATA_LENGTH / 1024 / 1024, 2) AS `数据大小 (MB)`,
ROUND(INDEX_LENGTH / 1024 / 1024, 2) AS `索引大小 (MB)`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / (SELECT SUM(DATA_LENGTH + INDEX_LENGTH) FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'your_database_name') * 100, 2) AS `占比 (%)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = 'your_database_name' -- 替换为你的数据库名
ORDER BY
(DATA_LENGTH + INDEX_LENGTH) DESC;
查询说明:
- TABLE_NAME: 表的名称。
- DATA_LENGTH: 表中数据的字节大小。
- INDEX_LENGTH: 表中索引的字节大小。
- ROUND: 用于将结果四舍五入到小数点后两位。
- 占比 (%): 计算每个表的大小占数据库总大小的百分比。
注意事项
- 确保你有权限访问
information_schema
数据库。 - 在大型数据库中,查询可能会稍慢,因为它需要遍历所有表的信息。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: