Greenplum 数据库最佳实践 (一).pdf
❖介绍
本文介绍PivotalGreenplumDatabase数据库(以下简称:Greenplum
数据库,或GPDB)的最佳实践。
最佳实践是指能持续产生比其他法更好结果的法或者技术,它来自于
实战阅历,并被证明了遵循这些法可以获得牢靠的预期结果。本最佳实
践旨在通过利用全部可能的学问和技术为正确运用GPDB供应有效参考。
本文不是在教您如何运用Grccnplum数据库的功能,而是帮助您在设计、
实现和运用Greenplum数据库时了解须要遵循哪些最佳实践。关于如何
运用和实现具体的Greenplum数据库特性,请参考上的Greenplum
数据库帮助文档以与上的Sandbox和实践指南。
本文H的不是要涵盖整个产品或者产品特性,而是概述GPDB实践中最
重要的因素。本文不涉与依靠于GPDB具体特性的边缘用例,后者须要
精通数据库特性和您的环境,包括SQL访问、查询执行、并发、负载和
其他因素。
通过驾驭这些最佳实践学问,会增加GPDB集群在维护、支持、性能和
可扩展性等面的胜利率。
第一章最佳实践概述
本部分概述了Greenplum数据库最佳实践所涉与的概念与要点。
数据模型
GPDB是一个基于大规模并行处理(MPP)和无共享架构的分析型数据库。
这种数据库的数据模式与高度规范化的事务性SMP数据库显著不同。通
过运用非规范化数据库模式,例如具有大事实表和小维度表的星型或者雪
花模式,GPDB在处理MPP分析型业务时表现优异。
跨表关联(JOI)时字段运用相同的数据类型。
详见数据库模式设计(后续章节)
堆存储和追加优化存储(Append-Optimized,下称AO)
若表和分区表须要进行迭代式的批处理或者频繁执行单个UPDATE、
DELETE或ISERT操作,运用堆存储。
若表和分区表须要并发执行UPDATE、DELETE或ISERT操作,运用
堆存储。
若表和分区表在数据初始加载后更新不频繁,且仅以批处理式插入数据,
则运用AO存储。
不要又寸AO表执行单个ISERT、UPDATE或DELETE操作。
不要对AO表执行并发批量UPDATE或DELETE操作,但可以并发执行
批量ISERT操作。
详见堆存储和AO存储后(续章忖
行存储和列存储
若数据须要常常更新或者插入,则运用行存储。
若须要同时访问一个表的许多字段,则运用行存储。
对于通用或者混合型业务,建议运用行存储。
若查询访问的字段数目较少,或者仅在少量字段上进行聚合操作,则运用
列存储。
若仅常常修改表的某一字段而不修改其他字段,则运用列存储。
详见行存储和列存储后(续章节)
压缩
对于大AO表和分区表运用压缩,以提高系统I/O。
在字段级别配置压缩。
考虑压缩比和压缩性能之间平衡。
详见压缩后(续章节)
分布
为全部表定义分布策略:要么定义分布键,要么运用随机分布。不要运用
缺省分布方式。
优先选择可匀称分布数据单个字段做分布键。
不要选择常常用于WHERE子句字段做分布键。
不要运用日期或时间字段做分布键。
分布键和分区键不要运用同一字段。
对常常执行JOI操作大表,优先考虑运用关联字段做分布键,尽量做
到本地关联,以提高性能。
数据初始加载后或者每次增量加载后,检查数据分布是否匀称。
尽可能避开数据倾斜。
详见分布后(续章节)
内存管理
设置vm.overcommit_memory为2
不要为操作系统页设置过大值
运用gp_vmem_protectjimit设置单个节点数据库(Segment
Database)可以为全部查询安排最大内存量。
不要设置过高gp_vmem