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: 用于将结果四舍五入到小数点后两位。
  • 占比 (%): 计算每个表的大小占数据库总大小的百分比。

注意事项

  1. 确保你有权限访问 information_schema 数据库。
  2. 在大型数据库中,查询可能会稍慢,因为它需要遍历所有表的信息。
本作品采用《CC 协议》,转载必须注明作者和本文链接
每天一点小知识,到那都是大佬,哈哈
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!