Greenplum清理垃圾、修改存储模式(行存储改列存储)平滑方法
1.背景
- 在使用Greenplum的过程中,如果业务会经常对数据进行更新,删除,插入,可能导致数据出现膨胀。
- 用户在建表的时候,存储模式选择不当,但是业务已经运行了一段时间,表里面已经写入了大量的数据。
- 用户在建表的时候,分布键选得不对,但是业务已经运行了一段时间,表里面已经写入了大量的数据。
- 用户在建表的时候表分区做得不对,但是业务已经运行了一段时间,表里面已经写入了大量的数据。
- 数据分区在初期选择了行存储,为了提到明细查询的效率。但是到数据冷却后,明细查询的需求下降,更多的是统计查询的需求,那么需要将这样的冷分区的行存储转换成列存储,提高统计的效率。
- 数据在使用过程中,由于分布键的数据在业务层发生了一些变化,导致了数据存储的倾斜。
以上情况发生时,我们就有必要进行相应的行动:
清理垃圾、调整分布键、分区键、修改存储模式等。
那么,有什么方法可以让这些操作尽量的减少对业务的影响呢?
答案是 交换数据
、交换分区
。
2.知识点
2.1 查看存储格式、分布键
Greenplum 6版本变化很大,以前很多查询语句都不能用。
select n.nspname AS 模式名,
c.relname AS 表名,
case
when c.relstorage = 'c' then '列存储'
when c.relstorage = 'h' then '行存储'
when c.relstorage = 'a' then 'OA行存储'
end 存储类型,
case
when p.policytype = 'p' then '分区表'
when p.policytype = 'r' then '复制分布'
end 分布策略,
pg_get_table_distributedby(c.oid) 分布键,
c.reloptions 压缩类型
from pg_class c
left join gp_distribution_policy p on c.oid = p.localoid
left join pg_namespace n on c.relnamespace = n.oid
where n.nspname = 'public';
2.2 查看分区
select * from pg_partitions where tablename='tbl_order';
3.单表存储模式转换(行存转列存、列存转行存)
示例:对
tbl_order_h
表进行行存储转换为列存储。
-- 根据行表创建列表
CREATE TABLE tbl_order_c (LIKE tbl_order_h) WITH (appendonly=true,compresslevel=1, orientation=column);
-- 插入行表数据到列表
INSERT INTO tbl_order_c SELECT * FROM tbl_order_h;
-- 授权admin所有权限
GRANT ALL PRIVILEGES ON tbl_order_c TO admin;
-- 授权给guest查询权限
GRANT SELECT ON tbl_order_c TO guest;
4.交换分区
未完待续
Greenplum清理垃圾、修改存储模式(行存储改列存储)平滑方法
https://www.gmtgo.com/8029.html