开发者社区 > 数据库 > 数据仓库 > 正文

我的云原生数据仓库AnalyticDB PostgreSQL版表数据量只有300条,是什么原因?

我的云原生数据仓库AnalyticDB PostgreSQL版表数据量只有300条,导出后 也只有几十k,但是用 select pg_size_pretty(pg_relation_size('xxx'));命令看占用了5个G的空间,用vacuum full无法清理空间,能帮忙看看是什么原因吗?

展开
收起
真的很搞笑 2024-01-21 19:37:14 81 0
2 条回答
写回答
取消 提交回答
  • 问题是由于残留进程阻碍了vacuum回收数据,现在我将残留进程清除后,现在您再执行vacuum和vacuum full应该可以了 ,此回答整理自钉群“云原生数据仓库AnalyticDB PostgreSQL版交流群开源讨论群”

    2024-01-22 10:56:00
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在云原生数据仓库AnalyticDB PostgreSQL版中,表的实际占用空间与数据量大小不匹配的情况可能是由于以下原因导致的:

    1. 数据更新频繁:如果表中的数据经常发生更新操作,会导致大量的"dead tuples"(已删除但尚未回收的数据行)积累。这些dead tuples仍然占用存储空间,直到执行VACUUM命令进行清理。
    2. 大对象(LOBs):表中可能包含大对象字段,如BLOB或TEXT类型,这些字段会占用较大的存储空间。即使表中只有少量记录,大对象的存储也可能导致表的占用空间较大。
    3. 索引和TOAST表:除了主表之外,还可能存在相关的索引和TOAST表(用于存储大的文本或二进制数据的辅助表)。这些结构也会占用额外的存储空间。
    4. 分区表:如果表是分区表的一部分,需要考虑所有分区及其索引的存储空间。
    5. 系统表和临时表:系统表和临时表也可能占用一定的存储空间,但通常不会对整体空间占用产生显著影响。

    针对您的情况,可以尝试以下步骤来解决问题:

    1. 执行VACUUM命令:首先尝试执行普通的VACUUM命令,而不是VACUUM FULL。VACUUM命令可以回收dead tuples所占用的存储空间,而不需要像VACUUM FULL那样进行数据重组。

      VACUUM VERBOSE;
      

      这将显示详细的输出信息,帮助您了解VACUUM的执行情况。

    2. 检查大对象:如果表中包含大对象字段,可以考虑压缩或重新组织这些字段的数据,以减少存储占用。

    3. 分析表的存储情况:使用以下查询来分析表的存储情况,包括主表、索引和TOAST表的占用空间:

      SELECT
        relname AS "Relation",
        n_live_tup AS "Live Rows",
        n_dead_tup AS "Dead Rows",
        (pg_size_pretty(pg_total_relation_size(c.oid))) AS "Size"
      FROM
        pg_class c
        LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
      WHERE
        nspname NOT LIKE 'pg_toast%' AND
        nspname NOT IN ('pg_catalog', 'information_schema') AND
        nspname !~ '^pg_toast' AND
        pg_total_relation_size(c.oid) > 0
      ORDER BY pg_total_relation_size(c.oid) DESC;
      

      这将列出数据库中所有表的存储情况,按占用空间大小降序排列。通过分析结果,您可以确定哪些表占用了较多的存储空间,并采取相应的措施。

    4. 优化表结构:根据表的使用情况和数据特点,考虑是否需要调整表的结构,例如增加或删除索引、更改数据类型等,以提高存储效率。

    5. 联系技术支持:如果上述方法无法解决问题,建议联系云服务提供商或AnalyticDB PostgreSQL版的技术支持团队,寻求专业的帮助和指导。

    请注意,以上建议仅供参考,具体的解决方案可能需要根据您的具体情况进行调整。

    2024-01-21 19:54:35
    赞同 展开评论 打赏

阿里云自主研发的云原生数据仓库,具有高并发读写、低峰谷读写、弹性扩展、安全可靠等特性,可支持PB级别数据存储,可广泛应用于BI、机器学习、实时分析、数据挖掘等场景。包含AnalyticDB MySQL版、AnalyticDB PostgreSQL 版。

相关产品

  • 云原生数据仓库AnalyticDB MySQL版
  • 相关电子书

    更多
    基于阿里云MaxCompute构建企业云数据仓库CDW的最佳实践建议 立即下载
    PostgresChina2018_陶征霖_新一代数据仓库OushuDB架构剖析 立即下载
    MaxCompute数据仓库数据转换实践 立即下载

    相关镜像