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)


目录
相关文章
|
8月前
|
存储 安全 关系型数据库
PostgreSQL物化视图增量更新扩展 -- pg_ivm
PostgreSQL不支持物化视图增量更新,需要定期执行REFRESH MATERIALIZED VIEW命令刷新物化视图。Incremental View Maintenance (IVM)是一种使物化视图保持最新的方法,其中只计算增量更改并将其应用于视图,而不是REFRESH MATERIALIZED VIEW那样从头开始重新计算内容。当只更改视图的一小部分时,IVM可以比重新计算更高效地更新物化视图。
588 0
|
8月前
|
SQL 监控 关系型数据库
PostgreSQL普通表转换成分区表
如何使用pg_rewrite扩展将普遍表转换成分区表
411 0
|
18天前
|
SQL HIVE
Hive全量表和增量表互相转换
Hive全量表和增量表互相转换
79 1
|
9月前
|
存储 运维 算法
GaussDB 技术解读系列:高级压缩之 OLTP 表压缩
这里我们也做了一个标准的 TPCC 的测试评估,基于 GaussDB 单机版本进行选择性压缩。根据 TPCC 的语义,所有已经配送完成的订单就不会再变更,但仍有一定的概率被访问到,这是非常贴近于真实业务场景的访问模型。所以,我们的压缩算法选择了压缩流水类数据,比如订单数据,而一些状态类的数据,比如库存、账户等没有去压缩,在流水数据里,我们也只压缩已经配送完成的订单,不压缩没有配送完成的订单。从最后的结果看,整个压缩之后对于业务的影响在 1.5% 左右。我们相信我们是业内第一个在 150 万 tpmC 性能峰值仍然能够开启压缩并且性能基本不下降的产品。
77 0
|
11月前
|
SQL 关系型数据库 MySQL
Mysql数据量统计:一条sql查询所有表的数据量、数据大小、索引大小
Mysql数据量统计:一条sql查询所有表的数据量、数据大小、索引大小
189 0
|
存储 索引
67.【clickhouse】ClickHouse从入门到放弃-对于分区、索引、标记和压缩数据的协同总结
【clickhouse】ClickHouse从入门到放弃-对于分区、索引、标记和压缩数据的协同总结
67.【clickhouse】ClickHouse从入门到放弃-对于分区、索引、标记和压缩数据的协同总结
|
SQL 存储 分布式计算
关于Presto对lzo压缩的表查询使用记录
关于Presto对lzo压缩的表查询使用记录
123 0
关于Presto对lzo压缩的表查询使用记录
|
存储 Oracle 关系型数据库
oracle数据库 修改表空间数据文件大小,优化存储
oracle数据库 修改表空间数据文件大小,优化存储
|
SQL 移动开发 Java
mysql全表抽取到MPP
代码实例 package com.epoint.com.mysql_mpp_full; import java.io.FileNotFoundException; import java.
1358 0
|
关系型数据库 测试技术 数据库