Greenplum数据库最佳实践

更新时间:2023-07-22 12:54:20 阅读: 评论:0

介绍
本文介绍Pivotal Greenplum Databa数据库以下简称:Greenplum数据库,或GPDB的最佳实践;
最佳实践是指能持续产生比其他方法更好结果的方法或者技术,它来自于实战经验,并被证实了遵循这些方法可以获得可靠的预期结果;本最佳实践旨在通过利用所有可能的知识和技术为正确使用GPDB提供有效参考;
本文目的不是要涵盖整个产品或者产品特性,而是概述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操作的大表,优先考虑使用关联字段做分布键,尽量做到本地关联,以提高性能;
数据初始加载后或者每次增量加载后,检查数据分布是否均匀;
尽可能避免数据倾斜;
详见分布后续章节
内存管理
设置为 2
不要为操作系统的页设置过大的值
使用gp_vmem_protect_limit设置单个节点数据库Segment Databa可以为所有查询分配的最大内存量;
不要设置过高的gp_vmem_protect_limit值,也不要大于系统的物理内存;
gp_vmem_protect_limit的建议值计算公式为: SWAP + RAM    / number_Segments_per_rver
使用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,安装后定期运行;保存输出结果,随着时间推移对系统性能进行比较;
使用所有您可用的工具,以了解系统不同负载下的表现;
检查任何不寻常的事件并确定原因;
通过定期运行解释计划监控系统查询活动,以确保查询处于最佳运行状态;
检查查询计划,以确定是否按预期使用了索引和进行了分区裁剪;
了解系统日志文件的位置和内容,定期监控日志文件,而不是在出现问题时才查看;
详见系统监控和维护以及监控GPDB日志文件;后续章节
ANALYZE
不要对整个数据库运行 ANALYZE,只对需要的表运行该命令;
建议数据加载后即刻运行 ANALYZE;
如果INSERT、UPDATE 和 DELETE 等操作修改大量数据,建议运行 ANALYZE;
执行 CREATE INDEX 操作后建议运行 ANALYZE;
如果对大表ANALYZE耗时很久,则只对JOIN字段、WHERE、SORT、GROUP BY 或 HAVING 字句的字段运行 ANALYZE;
详见使用ANALYZE更新统计信息;后续章节
Vaccum
批量 UPDATE 和 DELETE 操作后建议执行 VACUUM;
不建议使用 VACUUM FULL;建议使用 AS 操作,然后重命名表名,并删除原来的表;
对系统表定期运行 VACUUM,以避免系统表臃肿和在系统表上执行 VACUUM FULL 操作;
禁止杀死系统表的 VACUUM 任务;
不建议使用 VACUUM ANALYZE;
详见消除系统表臃肿;后续章节
加载
使用 gpfdist 进行数据的加载和导出;
随着段数据库个数的增加,并行性增加;
尽量将数据均匀地分布到多个 ETL 节点上;
将非常大的数据文件切分成相同大小的块,并放在尽量多的文件系统上;
一个文件系统运行两个 gpfdist 实例;
在尽可能多的网络接口上运行 gpfdsit;
使用gp_external_max_gs控制访问每个 gpfdist 服务器的段数据库的个数;
建议gp_external_max_gs的值 和 gpfdist 进程个数为偶数;
数据加载前删除索引;加载完后重建索引;
数据加载完成后运行 ANALYZE 操作;
数据加载过程中,设置gp_autostats_mode为 NONE,取消统计信息的自动收集;
若数据加载失败,使用 VACUUM 回收空间;
详见加载数据;后续章节
gptransfer
为了更好的性能,建议使用gptransfer迁移数据到相同大小或者更大的集群;
避免使用--full或者--schema-only选项;建议使用其他方法拷贝数据库模式到目标数据库,然后迁移数据;
迁移数据前删除索引,迁移完成后重建索引;
使用 SQL COPY 命令迁移小表到目标数据库;
使用 gptransfer 批量迁移大表;
在正式迁移生产环境前测试运行gptransfer;试验--batch-size和--sub-batch-size选项以获得
最大平行度;如果需要,迭代运行多次gptransfer来确定每次要迁移的表的批次;
仅使用完全限定的表名;表名字中若含有点、空格、单引号和双引号,可能会导致问题;
如果使用--validation选项在迁移后验证数据,则需要同时使用-x选项,以在源表上加排它锁;
尘封记忆确保在目标数据库上创建了相应的角色、函数和资源队列;gptransfer -t不会迁移这些对象;
从源数据库拷贝和到目标数据库集群;
大厅背景墙使用gppkg在目标数据库上安装需要的扩展;
详见使用 gptransfer 迁移数据后续章节
绩效奖安全
妥善保护gpadmin账号,只有在必要的时候才能允许系统管理员访问它;
仅当执行系统维护任务例如升级或扩容,管理员才能以gpadmin登录Greenplum集群;
限制具有 SUPERUSER 角色属性的用户数;GPDB中,身为超级用户的角色会跳过所有访问权限检查和资源队列限制;仅有系统管理员具有数据库超级用户权限;参考Greenplum数据库管理员指南中的“修改角色属性”;
严禁数据库用户以gpadmin身份登录,严禁以gpadmin身份执行ETL或者生产任务;
为有登录需求的每个用户都分配一个不同的角色;

本文发布于:2023-07-22 12:54:20,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1110810.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:使用   数据库   队列
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图