阿里云HybridDB for PG 空间紧张的解法 - 冷热分离、空间锁定、分区、压缩

简介:

标签

PostgreSQL , Greenplum , HybridDB for PG


背景

数据库空间不够用怎么办?

HDB PG是分布式数据库,空间不够用,扩容呗。但是用户如果不想扩容呢?还有哪些处理方法?

例子

1 查看当前已使用空间

查看数据库空间使用,表的空间使用,索引的空间使用等。

postgres=# select datname,pg_size_pretty(pg_database_size(datname)) from pg_database order by pg_database_size(datname) desc;
  datname  | pg_size_pretty
-----------+----------------
 postgres  | 32 MB
 template1 | 31 MB
 template0 | 31 MB
(3 rows)
postgres=# select relname,relkind,pg_size_pretty(pg_relation_size(oid)) from pg_class order by pg_relation_size(oid) desc limit 20;
             relname             | relkind | pg_size_pretty
---------------------------------+---------+----------------
 pg_proc                         | r       | 1920 kB
 pg_rewrite                      | r       | 1824 kB
 pg_depend                       | r       | 1344 kB
 pg_attribute                    | r       | 1248 kB
 pg_depend_reference_index       | i       | 1248 kB
 pg_depend_depender_index        | i       | 1248 kB
 pg_proc_proname_args_nsp_index  | i       | 864 kB
 pg_attribute_relid_attnam_index | i       | 576 kB
 pg_statistic                    | r       | 576 kB
 pg_description                  | r       | 576 kB
 pg_description_o_c_o_index      | i       | 480 kB
 pg_proc_oid_index               | i       | 480 kB
 pg_operator                     | r       | 384 kB
 pg_attribute_relid_attnum_index | i       | 384 kB
 pg_type                         | r       | 288 kB
 gp_persistent_relation_node     | r       | 288 kB
 pg_class                        | r       | 288 kB
 pg_authid_oid_index             | i       | 192 kB
 pg_authid_rolname_index         | i       | 192 kB
 pg_amproc_oid_index             | i       | 192 kB
(20 rows)

2 配置云监控

通过配置云监控,用户可以随时掌握数据库的已使用空间,剩余空间的情况。

3 空间不够用的策略

提供三种建议:

1、drop table, truncate table , 最简单直接

2、DELETE ,版本被保留。所以需要delete+vacuum 。

如果是列AO表,delete后 可以用VACUUM收缩。

如果是HEAP表,delete后 VACUUM无法收缩, 需要VACUUM FULL,但是VACUUM FULL需要双倍空间,并且会堵塞所有读写该表的操作,请慎用。

3、查看是不是有膨胀,可以清理垃圾减少膨胀。

《Greenplum 列存表(AO表)的膨胀、垃圾检查与空间收缩(含修改分布键)》

《如何检测、清理Greenplum膨胀、垃圾(含修改分布键) - 阿里云HybridDB for PG最佳实践》

4、如果表有PARTITION,可以TRUNCATE分区

5、创建OSS外部表,将不经常访问的数据表(或分区)写入OSS外部表。然后删除HDB PG里面对应的TABLE与PARTITION

详见:

https://help.aliyun.com/document_detail/35457.html

注意HDB PG沿用了GPDB的外部表框架,读写外部表操作是分开的。

导出需要创建可写外部表,然后将本地表的数据写出。

如果需要读取OSS中大数据,需要创建可读外部表。

6、使用压缩表(列存,大BLOCK压缩效果好,还可以使用聚集提高压缩比)。

Command:     CREATE TABLE
Description: define a new table
Syntax:
CREATE [[GLOBAL | LOCAL] {TEMPORARY | TEMP}] TABLE table_name ( 
[ { column_name data_type [ DEFAULT default_expr ]     [column_constraint [ ... ]
[ ENCODING ( storage_directive [,...] ) ]
] 
   | table_constraint
   | LIKE other_table [{INCLUDING | EXCLUDING} 
                      {DEFAULTS | CONSTRAINTS}] ...}
   [, ... ] ]
   [column_reference_storage_directive [, ... ]
   )
   [ INHERITS ( parent_table [, ... ] ) ]
   [ WITH ( storage_parameter=value [, ... ] )
   [ ON COMMIT {PRESERVE ROWS | DELETE ROWS | DROP} ]
   [ TABLESPACE tablespace ]
   [ DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY ]
   [ PARTITION BY partition_type (column)
       [ SUBPARTITION BY partition_type (column) ] 
          [ SUBPARTITION TEMPLATE ( template_spec ) ]
       [...]
    ( partition_spec ) 
        | [ SUBPARTITION BY partition_type (column) ]
          [...]
    ( partition_spec 
      [ ( subpartition_spec 
           [(...)] 
         ) ] 
    )
where storage_parameter is:
   APPENDONLY={TRUE|FALSE}   // aO表,支持COLUMN存储
   BLOCKSIZE={8192-2097152}  // 块大小
   ORIENTATION={COLUMN|ROW}  // 列存压缩比高
   COMPRESSTYPE={ZLIB|QUICKLZ|RLE_TYPE|NONE}
   COMPRESSLEVEL={0-9}      // 选择压缩比
   CHECKSUM={TRUE|FALSE}
   FILLFACTOR={10-100}
   OIDS[=TRUE|FALSE]

《一个简单算法可以帮助物联网,金融 用户 节约98%的数据存储成本 (PostgreSQL,Greenplum帮你做到)》

7、查看是否是数据倾斜造成的磁盘满。

《分布式DB(Greenplum)中数据倾斜的原因和解法 - 阿里云HybridDB for PostgreSQL最佳实践》

8、如果是系统表膨胀,需要vacuum系统表,特别是大量使用临时表可能导致pg_attribute膨胀。

建议后台调度,在空闲时间vacuum pg_attribute .

vacuum  pg_attribute ; 
vacuum  pg_attribute_encoding ; 
vacuum  gp_relation_node ; 
vacuum  pg_class ; 

如果发现元数据表以及膨胀得很厉害,需要VACUUM FULL清理,(找空闲时间,因为会堵塞所有操作)。

vacuum full pg_attribute;
reindex table pg_attribute;
vacuum full pg_attribute_encoding ;
reindex table pg_attribute_encoding;
vacuum full gp_relation_node ;
reindex table gp_relation_node;
vacuum full pg_class ;  
reindex table pg_class;

《大量使用临时表带来的系统表如pg_attribute膨胀问题,替代方案,以及如何擦屁股 - Greenplum, PostgreSQL最佳实践》

9、如果以上都做不了,建议升级实例

参考

https://help.aliyun.com/document_detail/35457.html

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
自然语言处理 算法 测试技术
|
人工智能 供应链 决策智能
智能体来了:阿里云×黎跃春助力企业降本增效的实战案例
智能体正引领企业迈向智能化新时代。阿里云联合AI专家黎跃春推出“智能体赋能企业创新计划”,助力企业实现降本增效与智能决策。通过“三步法”落地智能体,推动人机协同,重构竞争力。
|
11月前
|
存储 缓存 Cloud Native
云原生数据库驱动企业架构革新:从架构设计到落地实践全指南
本文系统阐述基于云原生数据库的企业信息系统架构设计,涵盖核心认知、四大设计原则、主流组件选型及分层架构落地。结合可运行代码实例,深入解析从环境配置到高可用保障的全流程,并提供避坑指南与进阶优化方向,助力企业实现高性能、高可用、低成本的数字化架构升级。
923 2
|
11月前
|
机器学习/深度学习 人工智能 数据可视化
构建AI智能体:六十六、智能的边界:通过偏差-方差理论理解大模型的能力与局限
本文通过机器学习中的偏差-方差权衡理论,深入探讨了模型性能的优化方法。文章首先用学生类比解释了高偏差(死记硬背)、高方差(思维跳跃)和平衡状态(真正理解)三种学习模式,对应机器学习中的欠拟合、过拟合和理想状态。通过数学公式E[(y-ŷ)²]=Bias²+Variance+Noise,系统分析了误差来源。使用多项式回归案例展示了不同复杂度模型的表现:线性模型(高偏差)、15次多项式(高方差)、4次多项式(平衡)和正则化模型。最终指出,最佳模型应在理解本质(低偏差)和稳定发挥(适度方差)间取得平衡。。。
581 110
|
8月前
|
人工智能 安全 API
OpenClaw(Clawdbot)保姆级实战宝典:阿里云+本地部署流程+Coding Plan配置及8大应用场景测评
2026年开年以来,开源AI智能体项目OpenClaw(原名Clawdbot/Moltbot)在币圈与科技圈持续掀起热潮,GitHub星标一度飙升至18万+,其衍生的Moltbook AI论坛更是上演了十余万AI智能体自发组建“数字宗教”、推选43位AI先知的科幻场景。与传统聊天机器人不同,OpenClaw实现了从“建议者”到“执行者”的跨越,凭借高系统权限、24/7持续运行能力成为新一代“数字员工”,而2026年阿里云对其的深度适配,以及全平台本地部署方案的完善,更是让这款工具的应用边界进一步拓宽。本文将深度解析OpenClaw的核心能力与8大最佳应用场景,同时带来2026年阿里云部署、Ma
1500 3
|
机器学习/深度学习 人工智能 搜索推荐
AI实践应用
AI实践横跨网络安全、软件测试、深度学习、生物识别、日常生活、计算机网络及更多领域。例如,AI用于防御网络攻击、自动化测试、家务机器人、人脸识别、文本编辑、搜索引擎优化、聊天机器人、智能医疗、工业4.0和金融风控。随着技术进步,AI持续推动各行业的数字化与智能化变革。
731 2
|
10月前
|
数据采集 人工智能 监控
AI 应用软件的开发
AI应用开发遵循AI-SDLC,强调数据闭环与迭代实验:从问题定义、数据工程(占60%-80%)、模型实验,到集成部署与MLOps运营。融合敏捷AI与AI辅助开发,关键在数据质量、MVP验证及安全可解释性。(239字)
|
存储 机器学习/深度学习 API
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
2050 31
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
|
人工智能 算法 开发工具
快手封号一般封多久?
一、封禁时长梯度设计原理