开发者社区 > 大数据与机器学习 > 实时数仓 Hologres > 正文

查询一个表具体占用的磁盘存储空间,包括表的索引

展开
收起
游客djuef5txu6klc 2023-06-05 18:50:48 97 0
4 条回答
写回答
取消 提交回答
  • 十分耕耘,一定会有一分收获!

    楼主你好,查询一个MySQL表占用的磁盘存储空间,可以通过以下SQL语句实现:

    SELECT 
        table_name AS `表名`,
        round(((data_length + index_length) / 1024 / 1024), 2) `总大小(MB)`,
        round((data_length / 1024 / 1024), 2) `数据大小(MB)`,
        round((index_length / 1024 / 1024), 2) `索引大小(MB)`,
        table_rows AS `记录行数`
    FROM 
        information_schema.TABLES 
    WHERE 
        table_schema = '数据库名' AND table_name = '表名';
    

    其中,table_schema 是数据库名,table_name 是表名。这个 SQL 查询会返回表的总大小、数据大小、索引大小和记录行数。

    如果需要查询其他数据库管理系统,查询方法可能会略微不同。

    2023-06-06 09:01:57
    赞同 展开评论 打赏
  • 您可以使用以下SQL语句查询一个表及其索引占用的磁盘存储空间:

    SELECT table_name AS 表名, pg_size_pretty(total_bytes) AS 总大小, pg_size_pretty(index_bytes) AS 索引大小, pg_size_pretty(toast_bytes) AS TOAST大小, pg_size_pretty(table_bytes) AS 表大小 FROM ( SELECT *, total_bytes-index_bytes-coalesce(toast_bytes,0) AS table_bytes FROM ( SELECT c.oid,nspname AS table_schema, relname AS table_name , c.reltuples AS row_estimate , pg_total_relation_size(c.oid) AS total_bytes , pg_indexes_size(c.oid) AS index_bytes , pg_total_relation_size(reltoastrelid) AS toast_bytes FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE relkind = 'r' ) a ) a; 这个查询语句将返回表名、总大小、索引大小、TOAST大小和表大小等信息。其中,总大小包括数据、索引和TOAST表的大小;索引大小是所有索引的大小之和;TOAST大小是表的所有 TOAST 列的大小之和,TOAST 列是指变长字段,如 TEXT、VARCHAR 和 BYTEA 类型;表大小是总大小减去索引大小和 TOAST 大小的剩余部分。

    请注意,该查询语句仅适用于 Postgres 数据库。如果您使用的是其他数据库系统,可能需要使用不同的查询语句。

    2023-06-06 08:59:52
    赞同 展开评论 打赏
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    您好,要查询一个表在 Hologres 中具体占用的磁盘存储空间,包括表的索引,可以使用如下 SQL 语句:

    SELECT
      relname AS table_name,
      pg_size_pretty(pg_total_relation_size(relid)) AS total_size,
      pg_size_pretty(pg_relation_size(relid)) AS relation_size,
      pg_size_pretty(pg_indexes_size(relid)) AS index_size,
      pg_size_pretty(pg_total_relation_size(relid) - pg_relation_size(relid) - pg_indexes_size(relid)) AS toast_size
    FROM 
      pg_catalog.pg_statio_user_tables 
    WHERE 
      schemaname = 'public' AND relname = 'your_table_name';
    

    需要将 your_table_name 替换为要查询的表名。

    该 SQL 语句会返回以下信息:

    • table_name:要查询的表名;
    • total_size:表的总大小;
    • relation_size:表本身的大小;
    • index_size:表的索引大小;
    • toast_size:表的 TOAST(The Oversized-Attribute Storage Technique) 大小。

    其中的 pg_size_pretty 函数用于将字节数转换为易于理解的单位,例如 MB、GB 等等。

    2023-06-05 21:24:59
    赞同 展开评论 打赏
  • 要查询一个表具体占用的磁盘存储空间,可以使用以下方法。

    使用 MySQL 自带的命令来查询

    可以使用 MySQL 自带的命令 SHOW TABLE STATUS 来查询表的详细状态,包括磁盘存储空间的大小以及索引大小等信息。具体查询语句如下: SHOW TABLE STATUS WHERE Name='your_table_name';

    其中,your_table_name 是你要查询的表的名称。上述语句将返回一个表格,其中包含了该表的详细状态信息,包括表的行数、大小、索引大小等信息。

    查询磁盘上该表所占用的空间大小

    可以使用操作系统自带的命令来查询磁盘上该表所占用的空间大小。具体查询语句如下: du -h /your/mysql/data/directory/your_database_name/your_table_name.*

    其中,your/mysql/data/directory/your_database_name 是你的 MySQL 数据库文件所在的路径,your_table_name.* 是你要查询的表文件名称,使用通配符 * 来查询该表所占用的所有文件的大小。上述命令将返回该表所占用的所有文件的大小。 总之,在查询一个表具体占用的磁盘存储空间时,可以结合以上两种方法进行查询,以获取更准确的信息,方便进行优化和管理。

    2023-06-05 19:12:39
    赞同 展开评论 打赏

本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载