如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
❖介绍本文介绍PivotalGreenplumDatabase数据库(以下简称:Greenplum数据库,或GPDB)得最佳实践。最佳实践就是指能持续产生比其她方法更好结果得方法或者技术,它来自于实战经验,并被证实了遵循这些方法可以获得可靠得预期结果.本最佳实践旨在通过利用所有可能得知识与技术为正确使用GPDB提供有效参考。本文不就是在教您如何使用Greenplum数据库得功能,而就是帮助您在设计、实现与使用Greenplum数据库时了解需要遵循哪些最佳实践.关于如何使用与实现具体得Greenplum数据库特性,请参考上得Greenplum数据库帮助文档以及上得Sandbox与实践指南。本文目得不就是要涵盖整个产品或者产品特性,而就是概述GPDB实践中最重要得因素。本文不涉及依赖于GPDB具体特性得边缘用例,后者需要精通数据库特性与您得环境,包括SQL访问、查询执行、并发、负载与其她因素.通过掌握这些最佳实践知识,会增加GPDB集群在维护、支持、性能与可扩展性等方面得成功率。第一章最佳实践概述本部分概述了Greenplum数据库最佳实践所涉及得概念与要点。数据模型GPDB就是一个基于大规模并行处理(MPP)与无共享架构得分析型数据库。这种数据库得数据模式与高度规范化得事务性SMP数据库显著不同。通过使用非规范化数据库模式,例如具有大事实表与小维度表得星型或者雪花模式,GPDB在处理MPP分析型业务时表现优异。跨表关联(JOIN)时字段使用相同得数据类型。详见数据库模式设计(后续章节)堆存储与追加优化存储(Append—Optimized,下称AO)若表与分区表需要进行迭代式得批处理或者频繁执行单个UPDATE、DELETE或INSERT操作,使用堆存储。若表与分区表需要并发执行UPDATE、DELETE或INSERT操作,使用堆存储。若表与分区表在数据初始加载后更新不频繁,且仅以批处理方式插入数据,则使用AO存储。不要对AO表执行单个INSERT、UPDATE或DELETE操作.不要对AO表执行并发批量UPDATE或DELETE操作,但可以并发执行批量INSERT操作。详见堆存储与AO存储(后续章节)行存储与列存储若数据需要经常更新或者插入,则使用行存储。若需要同时访问一个表得很多字段,则使用行存储.对于通用或者混合型业务,建议使用行存储。若查询访问得字段数目较少,或者仅在少量字段上进行聚合操作,则使用列存储.若仅常常修改表得某一字段而不修改其她字段,则使用列存储。详见行存储与列存储(后续章节)压缩对于大AO表与分区表使用压缩,以提高系统I/O。在字段级别配置压缩.考虑压缩比与压缩性能之间得平衡.详见压缩(后续章节)分布为所有表定义分布策略:要么定义分布键,要么使用随机分布.不要使用缺省分布方式.优先选择可均匀分布数据得单个字段做分布键。不要选择经常用于WHERE子句得字段做分布键。不要使用日期或时间字段做分布键。分布键与分区键不要使用同一字段。对经常执行JOIN操作得大表,优先考虑使用关联字段做分布键,尽量做到本地关联,以提高性能。数据初始加载后或者每次增量加载后,检查数据分布就是否均匀。尽可能避免数据倾斜。详见分布(后续章节)内存管理设置vm、overmit_memory为2不要为操作系统得页设置过大得值使用gp_vmem_protect_limit设置单个节点数据库(SegmentDatabase)可以为所有查询分配得最大内存量。不要设置过高得gp_vmem_protect_limit值,也不要大于系统得物理内存。gp_vmem_protect_limit得建议值计算公式为:(SWAP+(RAM*vm、overmit_ratio))*0、9/number_Segments_per_server使用statement_mem控制节点数据库为单个查询分配得内存量。使用资源队列设置队列允许得当前最大查询数(ACTIVE_STATEMENTS)与允许使用得内存大小(MEMORY_LIMIT)。不要使用默认得资源队列,为所有用户都分配资源队列.根据负载与时间段,设置与队列实际需求相匹配得优先级(PRIORITY)。保证资源队列得内存配额不超过gp_vmem_protect_limit。动态更新资源队列配置以适应日常工作需要。详见内存与负载管理(后续章节)分区只为大表设置分区,不要为小表设置分区.仅在根据查询条件可以实现分区裁剪时使用分区表.建议优先使用范围(Range)分区,否则使用列表(List)分区。根据查询特点合理设置分区。不要使用相同得字段即做分区键又做分布键。不要使用默认分区。避免使用多级分区;尽量创