开发者学堂课程【PostgreSQL 云上开发实践:阿里云 PostgreSQL_开发实践_6】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/528/detail/7109
阿里云 PostgreSQL_ 开发实践_6
目录
一. 分级存储功能
二. 索引选择
三. 统计信息采集调度
四. 队列管理
五. metascan+sort Key+index 实践
六.大吞吐输出场景开发实践
七. 查看数据倾斜
八. 查看数据膨胀、清理膨胀
九.清理垃圾,行存、列存切换
十. 数值类型的选择
十一. 连接池
一. 分级存储功能
https://help.aliyun.com/document_detail/35457.html
l 热数据
-实例本地存储
l 访问频次较低数据
- OSS 外部表存储
-压缩格式选择
l 继承与分区约束
-每个 OSS 外部表负责一部分数据
-使用约束
-建立 OSS 外部表继承关系
二. 索引选择
l 自动索引选择
- https://github.com/digoal/blog/blob/master/201706/20170617_01.md
l
GiST
-空间数据
l B-Tree
-等值、区间、排序
l
Bitmap
- https://github.com/digoal/blog/blob/master/201705/20170512_01.m
d
-类似倒排
- value:所有行号对应的bitmap
-含100到1万个唯一值的列
三. 统计信息采集调度
l 专治 SQL 执行计划不准。
l gp_autostats_mode
- none:不收集
- on_no_stats:没有统计信息时,收集
- on_change:当写入、更新量超过阈值
(gp_autostats_on_change_threshold参数设置的行数,默认为2o亿)后,百动收集统计信息。l https://github.com/digoal/blog/blob/master/201712/20171211_03.md
四. 队列管理
l
CREATE RESOURCE QUEUE name WITH (queue_atribute=value [, ...])
l
where queue_attribute is:
l
ACTIVE_STATEMENTS=integer
l
[ MAX COST=float [COST_OVERCOMMIT={TRUE |FALSE}]]
l
[ MIN_COST=float ]
l
[PRIORITY={MIN| LOW|MEDIUM|HIGH | MAX} ]
l
[MEMORY_LIMIT='memory_units' ]
l
[MAX_COST=float [ COST_OVERCOMMIT={TRUE |FALSE}]
l
[ ACTIVE_STATEMENTS=integer ]
l
[MIN_COST=float ]
l
[ PRIORITY={MIN| LOW |MEDIUM|HIGH | MAX}]
l
[ MEMORY_LIMIT='memory_units' ]
l https://github.com/digoal/blog/blob/master/201708/20170821_01.md
资源使用、隔离、控制
五. metascan+sort Key+index 实践
这样的两个功能点其实是受到我们的一个时序数据的一个启发,也就是说,时序数据的这个字段,它的值,它的存储,以及它的这个存进来的这个值是具有一定的线性相关性的。
就比如说我们的时间,我们某一个字段,某一个字段表示的是我的数据的插入时间,那么就意味着说,我的每一条记录插进来的时候,我的时间就是在我们的一个方向上,是递增的这个方向上,是有这个线性相关性的,
那因此,我们要搜索某区间的数据的时候,比如我要搜2018年的2月19号一天的数据,那么一天的数据实际上是集中在某一些数据块里面的,,因为它是有一些线性相关性,因此它的数据存储是聚集的,是有一定的聚集性的。
六.大吞吐输出场景开发实践
https://github.com/digoal/blog/blob/master/201707/20170726_01.md
使用 Hybrid DB for PostgreSQL,同时实现了实时分析,准实时数据规整两个需求。
OSS 作为海量数据入口,HDB 作为 OSS 的计算引擎,实现海量数据实时分析。
同时 HDB 作为数据规整引擎,被规整的数据不需要在数据库本地落地,直接从 OSS 到 OSS ,只是用到了 HDB 的规整能力。
性能可以通过扩展 HDB 的计算节点线性扩展:
海量数据源,写入 OSS ,通过 HybridDB for PostgreSQL 的 oss_ext 插件,实时分析写入的数据。
OSS带宽指标:目前每个计算节点每个会话约30MB/s的读写速率。
对于列式存储格式,数值类型。1亿记录约381MB,压缩比5:1的话,约76.3MB。
按行换算的性能指标:2048个计算节点,读写吞吐约 805亿行/s。每天处理6900万亿行(当然,按多列进出打个折扣,万亿级别也是没有问题的)。
七. 查看数据倾斜
l 数据分布不均匀,导致性能差、存储空间受限、木桶效应。
- https://github.com/digoal/blog/708/20170821_02.md
八. 查看数据膨胀、清理膨胀
l 堆表膨胀检测-
https://github.com/digoal/blog/blob/master/201708/20170817_01.md
l AO 表膨胀检测https://github.com/digoal/blog/blob/master/201708/20170817_03.md
使用这个函数可以查看AO表的膨胀率
postgres=# \df+ gp_toolkit.__gp_aovisimap_compaction_info
List of functions
-[ RECORD 1 ]-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Schema | gp_toolkit
Name | __gp_aovisimap_compaction_info
Result data type | SETOF record
Argument data types | ao_oid oid, OUT content integer, OUT datafile integer, OUT compaction_possible boolean, OUT hidden_tupcount bigint, OUT total_tupcount bigint, OUT percent_hidden numeric
Type | normal
2 | 1 | f |21 | 208283 | 0.01
9 |1 | f25 |208303 | 0.01
九.清理垃圾,行存、列存切换
https://github.com/digoal/blog/blob/master/201712/20171208_04.md
十. 数值类型的选择
l 如果有除法,并且需要确保精度,建议 float8 或 numeric
l 海量数据处理,建议采用float8或int8
l 数值类型
-numeric 性能较低(内部实现的数据类型,有大量 memcpy )
- float4, float8, int, int8 性能较高
十一. 连接池
l
pgbouncer
- https://github.com/digoal/blog/blob/master/201801/20180128 04.md
- https://www.linkedin.com/pulse/scaling-greenplum-pgbouncer-sandeep-katta-/?articleld=6128769027482402816
- https://pgbouncer.github.io/
l pgpool-ll
- http://pgpool.net/mediawiki/index.php/Main_Page