Greenplum 数据库最佳实践
? 介绍
本文介绍Pivotal Greenplum Database数据库(以下简称:Greenplum数据库,或GPDB)的最佳实践。
最佳实践是指能持续产生比其他方法更好结果的方法或者技术,它来自于实战经验,并被证实了遵循这些方法可以获得可靠的预期结果。本最佳实践旨在通过利用所有可能的知识和技术为正确使用GPDB提供有效参考。
本文不是在教您如何使用Greenplum数据库的功能,而是帮助您在设计、实现和使用Greenplum数据库时了解需要遵循哪些最佳实践。关于如何使用和实现具体的Greenplum数据库特性,请参考 http://gpdb.docs.pivotal.io 上的Greenplum数据库帮助文档以及 http://greenplum.org 上的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.overcommit_memory 为 2 不要为操作系统的页设置过大的值
使用 gp_vmem_protect_limit 设置单个节点数据库(Segment Database)可以为所有查询分配的最大内存量。
不要设置过高的 gp_vmem_protect_limit 值,也不要大于系统的物理内存。
gp_vmem_protect_limit 的建议值计算公式为: (SWAP + (RAM * vm.overcommit_ratio)) * 0.9 / number_Segments_per_server
使用 statement_mem 控制节点数据库为单个查询分配的内存量。
使用资源队列设置队列允许的当前最大查询数(ACTIVE_STATEMENTS)和允许使用的内存大小(MEMORY_LIMIT)。
不要使用默认的资源队列,为所有用户都分配资源队列。
根据负载和时间段,设置和队列实际需求相匹配的优先级(PRIORITY)。 保证资源队列的内存配额不超过 gp_vmem_protect_limit。 动态更新资源队列配置以适应日常工作需要。 详见内存和负载管理(后续章节) 分区
只为大表设置分区,不要为小表设置分区。 仅在根据查询条件可以实现分区裁剪时使用分区表。
建议优先使用范围 (Range) 分区,否则使用列表 (List) 分区。 根据查询特点合理设置分区。
不要使用相同的字段即做分区键又做分布键。 不要使用默认分区。
避免使用多级分区;尽量创建少量的分区,每个分区的数据更多些。
通过查询计划的 EXPLAIN 结果来验证查询对分区表执行的是选择性扫描(分区裁剪)。 对于列存储的表,不要创建过多的分区,否则会造成物理文件过多: Physical files = Segments * Columns * Partitions。 详见分区(后续章节) 索引
一般来说GPDB中索引不是必需的。
对于高基数的列存储表,如果需要遍历且查询选择性较高,则创建单列索引。
频繁更新的列不要建立索引。
在加载大量数据之前删除索引,加载结束后再重新创建索引。 优先使用 B 树索引。
不要为需要频繁更新的字段创建位图索引。
不要为唯一性字段,基数非常高或者非常低的字段创建位图索引。 不要为事务性负载创建位图索引。
一般来说不要索引分区表。如果需要建立索引,则选择与分区键不同的字段。 详见索引(后续章节) 资源队列
使用资源队列管理集群的负载。 为所有角色定义适当的资源队列。
使用 ACTIVE_STATEMENTS 参数限制队列成员可以并发运行的查询总数。 使用 MEMORY_LIMIT 参数限制队列中查询可以使用的内存总量。 不要设置所有队列为 MEDIUM,这样起不到管理负载的作用。 根据负载和时间段动态调整资源队列。 详见配置资源队列(后续章节) 监控和维护
根据《Greenplum数据库管理员指南》实现该书推荐的监控和管理任务。
安装Greenplum数据库前建议运行 gpcheckperf,安装后定期运行。保存输出结果,随着时间推移对系统性能进行比较。
…… 此处隐藏:1138字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [实用模板]第八章:法国“新浪潮”与“左岸派”
- [实用模板]2021年北京上半年临床医学检验技师生物
- [实用模板]SAP GUI 7.10客户端安装配置文档
- [实用模板]2001年临床执业医师资格考试综合笔试试
- [实用模板]36机场工作实用英语词汇总结
- [实用模板](一)社会保险稽核通知书
- [实用模板]安全教育主题班会材料
- [实用模板]濉溪县春季呼吸道传染病防控应急演练方
- [实用模板]长沙房地产市场周报(1.30-2.3)
- [实用模板]六年级数学上册典中点 - 图文
- [实用模板]C程序设计(红皮书)习题官方参考答案
- [实用模板]中国证监会第一届创业板发行审核委员会
- [实用模板]桥梁工程复习题
- [实用模板]2011学而思数学及答案
- [实用模板]初中病句修改专项练习
- [实用模板]监理学习知识1 - 图文
- [实用模板]小机灵杯四年级试题
- [实用模板]国贸专业毕业论文模板
- [实用模板]教育学概论考试练习题-判断题4
- [实用模板]2015届高考英语一轮复习精品资料(译林
- 00Nkmhe_市场营销学工商管理_电子商务_
- 事业单位考试法律常识
- 诚信教育实施方案
- 吉大小天鹅食品安全检测箱方案(高中低
- 房地产销售培训资料
- 高一地理必修1复习提纲
- 新概念英语第二册lesson_1_练习题
- 证券公司内部培训资料
- 小学英语时间介词专项练习
- 新世纪英语专业综合教程(第二版)第1册U
- 【新课标】浙教版最新2018年八年级数学
- 工程建设管理纲要
- 外研版 必修一Module 4 A Social Surve
- Adobe认证考试 AE复习资料
- 基于H.264AVC与AVS标准的帧内预测技术
- 《食品检验机构资质认定管理办法》(质
- ABB变频器培训课件
- (完整版)小学说明文阅读练习题及答案
- 深思洛克(SenseLock) 深思IV,深思4,深
- 弟子规全文带拼音




