greenplum 压缩表

简介: 问题: 11-30,压缩程度不同,压缩后的空间大小是否空间空间不同 11-30,压缩后,空间与压缩前的空间大小是否不同 不同的压缩率,数据空间一样 ...
问题:

11-30,压缩程度不同,压缩后的空间大小是否空间空间不同

11-30,压缩后,空间与压缩前的空间大小是否不同



不同的压缩率,数据空间一样

tutorial=> select pg_size_pretty(pg_total_relation_size('test_appendonly'));
pg_size_pretty
----------------
324 kB
(1 row)

tutorial=> select pg_size_pretty(pg_total_relation_size('test_appendonly_1'));
pg_size_pretty
----------------
324 kB
(1 row)

问题:为什么压缩了,空间反而变大了

tutorial=> create table t_ab as select generate_series(0,1000) a,'helloworld'::varchar(50) b distri
buted by (a);

tutorial=> select pg_size_pretty(pg_total_relation_size('t_ab'));
pg_size_pretty
----------------
160 kB
(1 row)



正题

对于数据仓库应用来说,由于数据量大,而且每次分析都是全表扫描,引入压缩表

压缩表 Appendonly表

1)压缩表的应用场景

业务上不需要对表进行更新和删除操作,用truncate+insert就可以实现业务逻辑

访问表基本上是全表扫描,不需要再表上建立索引

不能经常对表进行加字段或修改字段类型,对appendonly表添加字段比普通表慢

2)语法介绍

建表加上 with (appendonly=true)就可以指定为appendonly表,如果需要建立压缩表,则要加上(appendonly = true,compresslevel=5),其中compresslevel是压缩率,取值为1~9,一般选择5就足够了 


appendonly 表特性

tutorial=> create table test_appendonly with (appendonly = true,compresslevel =5) as              
select generate_series(0,1000) a,'helloworld'::varchar(50) b distributed by (a);SELECT 1001

tutorial=> create table test_appendonly_1 with (appendonly = true,compresslevel =1) as              
select generate_series(0,1000) a,'helloworld'::varchar(50) b distributed by (a);SELECT 1001 

tutorial=> select oid,oid::regclass from pg_class where relname ='test_appendonly' or relname like
'%87096%';  oid  |              oid             
-------+-------------------------------
87098 | pg_toast.pg_toast_87096
87099 | pg_toast.pg_toast_87096_index
87096 | test_appendonly
87101 | pg_aoseg.pg_aoseg_87096
87102 | pg_aoseg.pg_aoseg_87096_index
(5 rows)



tutorial=> \d pg_toast.pg_toast_87096;
TOAST table "pg_toast.pg_toast_87096"
   Column   |  Type  
------------+---------
chunk_id   | oid
chunk_seq  | integer
chunk_data | bytea

tutorial=> \d pg_toast.pg_toast_87096_index;
Index "pg_toast.pg_toast_87096_index"
  Column   |  Type   | Definition
-----------+---------+------------
chunk_id  | oid     | chunk_id
chunk_seq | integer | chunk_seq
primary key, btree, for table "pg_toast.pg_toast_87096"
Tablespace: "ts_gh"

tutorial=> \d pg_toast.pg_aoseg.pg_aoseg_87096;
   ?o? "pg_aoseg.pg_aoseg_87096"
     Column      |       Type      
-----------------+------------------
segno           | integer
eof             | double precision
tupcount        | double precision
varblockcount   | double precision
eofuncompressed | double precision

tutorial=> \d pg_toast.pg_aoseg.pg_aoseg_87096_index;
Index "pg_aoseg.pg_aoseg_87096_index"
Column |  Type   | Definition
--------+---------+------------
segno  | integer | segno
primary key, btree, for table "pg_aoseg.pg_aoseg_87096"
Tablespace: "ts_gh"

gp_dist_random查询子节点信息

get_ao_compression_ration:查询表的压缩率与gp_dist_random查询底层pg_aoseg前缀表一样
tutorial=# select get_ao_compression_ratio('test_appendonly');
get_ao_compression_ratio
--------------------------
                     6.28
(1 row)
tutorial=#  select sum(eofuncompressed)/sum(eof) from gp_dist_random('pg_aoseg.pg_aoseg_87096')   
;     ?column?    
------------------
6.28131021194605
(1 row)

get_ao_distribution:查询每个节点的数据量
tutorial=# select * from get_ao_distribution('test_appendonly') order by segmentid;
segmentid | tupcount
-----------+----------
         0 |      501
         1 |      500
(2 rows)


目录
相关文章
|
数据可视化 中间件 API
FreeRTOS记录(一、熟悉开发环境以及CubeMX下FreeRTOS配置)
熟悉 在 STM32 CubeMX 下面的 FreeRTOS 使用
6388 1
FreeRTOS记录(一、熟悉开发环境以及CubeMX下FreeRTOS配置)
|
网络协议
使用网络调试助手时,踩坑
使用网络调试助手时,踩坑
1158 0
|
存储 Java Spring
Spring之国际化:i18n
【1月更文挑战第17天】 一、i18n概述 二、Java国际化 三、Spring6国际化 1、MessageSource接口 2、使用Spring6国际化
588 1
|
存储 数据处理 对象存储
云端问道方案教学4期—多媒体数据存储与分发
本文整理自阿里云存储服务产品团队关于多媒体数据存储与分发的分享,涵盖以下四部分内容:1)行业痛点及背景:分析Web 2.0到AIGC时代下多媒体行业的存储挑战;2)方案优势介绍:结合对象存储(OSS)、智能媒体管理(IMM)和内容分发网络(CDN),提供高效、低成本的解决方案;3)典型场景应用:包括音视频、在线教育、网站/APP/小程序、游戏下载等场景的具体应用;4)选型推荐:根据业务需求选择合适的产品配置。该方案通过动静分离、智能处理和全球加速,帮助企业在数据存储与分发中实现降本增效。
582 2
|
域名解析 网络协议 应用服务中间件
阿里云服务器公网IP怎么绑定域名?
阿里云服务器公网IP怎么绑定域名?
4360 0
阿里云服务器公网IP怎么绑定域名?
|
负载均衡 监控 安全
DDoS 攻击:如何运作及防范之道
【8月更文挑战第31天】
3424 2
|
安全 API 开发者
深入理解Qt定时器:QTimer的魅力与挑战(二)
深入理解Qt定时器:QTimer的魅力与挑战
997 0
|
SQL 存储 Oracle
Oracle 代码异常查询(七)
Oracle 代码异常查询
1601 0
|
存储 SQL 关系型数据库
PolarDB-x 比mysql查询性能怎么样?速度快吗
PolarDB-x 比mysql查询性能怎么样?速度快吗
1097 0
|
Linux iOS开发 Docker
Docker配置教程:实战指南与易错点盘点
Docker配置教程:实战指南与易错点盘点
1197 0