You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Greenplum PostgreSQL订单表压缩应用位置排查求助

Greenplum order表大小异常排查(压缩位置确认)

1. 确认表的基础存储与压缩配置

先查询表的核心存储参数,明确是否启用压缩及压缩类型:

SELECT relname, relstorage, reloptions 
FROM pg_class 
WHERE relname = 'order';
  • relstorage字段:h代表堆表(堆表不支持压缩),a代表AO表,c代表CO表(AO/CO支持压缩)
  • reloptions字段:若包含compresstype=zlib/zstd/quicklz、compresslevel等参数,说明表级已配置压缩;若有appendonly=true,则是AO/CO存储类型

2. 排查是否为分区表

如果是分区表,\dt+ order仅显示主表(空表)的大小,实际数据存储在子分区中:

先确认分区结构:

SELECT schemaname, tablename, partitiontype, partitionkey 
FROM pg_partitions 
WHERE tablename = 'order';

再查询所有子分区的实际大小:

SELECT 
  quote_ident(schemaname) || '.' || quote_ident(tablename) AS partition_fullname,
  pg_size_pretty(pg_total_relation_size(quote_ident(schemaname) || '.' || quote_ident(tablename))) AS total_size,
  pg_size_pretty(pg_relation_size(quote_ident(schemaname) || '.' || quote_ident(tablename))) AS data_size
FROM pg_tables 
WHERE tablename LIKE 'order_%'; -- 假设分区命名以order_前缀开头,可根据实际调整

3. 检查列级压缩配置(少数场景)

Greenplum主要支持表/分区级压缩,但部分版本支持列级压缩,可查询列的参数:

SELECT 
  attname AS column_name,
  attoptions AS column_options
FROM pg_attribute 
WHERE 
  attrelid = (SELECT oid FROM pg_class WHERE relname = 'order') 
  AND attnum > 0; -- 排除系统列

若某列的column_options包含压缩相关参数,说明该列单独配置了压缩

4. 验证数据分布与segment存储情况

由于表按order_id分布,需确认是否存在数据倾斜,或部分segment上无数据:

SELECT 
  gp_segment_id,
  count(*) AS row_count,
  pg_size_pretty(pg_relation_size(relid)) AS segment_local_size
FROM gp_dist_random('pg_class') 
WHERE relname = 'order'
GROUP BY gp_segment_id, relid
ORDER BY gp_segment_id;

该命令会展示每个segment上该表的本地数据量与大小,若大部分segment无数据,需检查分布键order_id的取值是否过于集中

内容的提问来源于stack exchange,提问作者msr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 02:42:45