Greenplum-最佳实践小结
注:本文翻译自https://docs.vmware.com/en/VMware-Greenplum/7/greenplum-database/best_practices-logfiles.html
数据模型
- Greenplum数据库是一个分析型MPP无共享数据库。该模型与高度规范化/事务性的SMP数据库明显不同。
- Greenplum数据库使用适合MPP分析处理的非规范化模式设计(例如Star或Snowflake模式)表现最佳,使用大型事实表和较小的维度表。
- 对表间连接中使用的列使用相同的数据类型。
堆表还是AO存储
- 对于将接收迭代批处理和单条UPDATE、DELETE和INSERT操作的表和分区,使用堆存储。
- 对将接收并发UPDATE、DELETE和INSERT操作的表和分区使用堆存储。
- 对于在初始加载之后不经常更新的表和分区,以及只在大型批处理操作中执行后续插入的表和分区,使用追加优化的存储。
- 避免对追加优化的表执行单条INSERT、UPDATE或DELETE操作。
- 避免对追加优化的表执行并发批处理UPDATE或DELETE操作。并发批处理INSERT操作是可以接受的。
行存还是列存
- 对于需要更新和频繁插入的迭代事务的工作负载,使用面向行的存储。
- 当对表的选择很宽时,使用面向行的存储。
- 将面向行的存储用于一般用途或混合工作负载。
- 使用面向列的存储,其中选择范围很窄,并且在少量列上计算数据聚合。
- 对于具有定期更新的单列而不修改行中其他列的表,使用面向列的存储。
压缩
- 对大型追加优化表和分区表使用压缩,以改善整个系统的I/O。
- 在数据所在的级别设置列压缩设置。
- 在更高级别的压缩与压缩和解压缩数据所需的时间和CPU周期之间取得平衡。
分布
- 为所有表显式定义分布列或随机分布。不要使用默认值。
- 使用单个列将数据均匀地分布在所有段上。
- 不要在将在查询的WHERE子句中使用的列上进行分发。
- 不要分布在日期或时间戳。
- 永远不要在同一列上分布和分区表。
- 对于通常连接在一起的大型表,通过分布在同一列上实现本地连接,可以显著提高性能。
- 要确保没有数据倾斜,请验证数据在初始负载和增量负载之后均匀分布。
资源队列内存管理
- 将vm.overcommit_memory设置为2。
- 不要将操作系统配置为使用大页面。
- 使用gp_vmem_protect_limit设置实例可以为每个segment中正在完成的所有工作分配的最大内存。
- gp_vmem_protect_limit的使用方法如下:
gp_vmem—Greenplum数据库可用的总内存
如果系统总内存小于256GB,使用如下公式:
gp_vmem = ((SWAP + RAM) – (7.5GB + 0.05 * RAM)) / 1.7
当系统总内存大于等于256GB时,使用如下公式:
gp_vmem = ((SWAP + RAM) – (7.5GB + 0.05 * RAM)) / 1.17
其中SWAP为主机的交换空间,单位为GB; RAM为主机的RAM,单位为GB。
max_acting_primary_segments—由于主机或段故障而激活镜像段时,主机上可能运行的主段的最大数量。
gp_vmem_protect_limit
gp_vmem_protect_limit = gp_vmem / acting_primary_segments - 不要将gp_vmem_protect_limit设置得过高或大于系统上的物理RAM。
- 根据计算出的gp_vmem值,计算出虚拟机的设置值。Overcommit_ratio操作系统参数:
vm.overcommit_ratio = (RAM - 0.026 * gp_vmem) / RAM - 使用statement_mem为每个段db分配用于查询的内存。
- 使用资源队列设置活动查询的数量(ACTIVE_STATEMENTS)和队列中查询可以使用的内存量(MEMORY_LIMIT)。
- 将所有用户与资源队列关联。不要使用默认队列。
- 设置PRIORITY,以匹配工作负载和时间对队列的实际需求。避免使用MAX优先级。
- 确保资源队列内存分配不超过gp_vmem_protect_limit的设置。
- 动态更新资源队列设置以匹配日常操作流。
分区
- 仅对大型表进行分区。不要对小表进行分区。
- 只有在可以根据查询条件实现分区消除(分区剪枝)时才使用分区。
- 选择范围分区而不是列表分区。
- 根据常用的列(如日期列)对表进行分区。
- 不要在同一列上对表进行分区和分布。
- 不要使用默认分区。
- 不要使用多级分区;创建更少的分区,每个分区中有更多的数据。
- 通过检查查询EXPLAIN计划,验证查询是否有选择地扫描分区表(正在消除分区)。
- 不要用面向列的存储创建太多分区,因为每个segment上的物理文件总数:物理文件=segment个数x列x分区
索引
- 一般来说,在Greenplum数据库中不需要索引。
- 在列表的单列上创建索引,用于钻取需要高选择性查询的高基数表。
- 不要对经常更新的列建立索引。
- 考虑在将数据加载到表中之前删除索引。加载完成后,为表重新创建索引。
- 创建选择性b树索引。
- 不要在已更新的列上创建位图索引。
- 避免对唯一列、基数非常高或基数非常低的数据使用位图索引。当列的基数较低(100到100,000个不同的值)时,位图索引的性能最好。
- 不要对事务性工作负载使用位图索引。
- 一般情况下,不要对分区表建立索引。如果需要索引,索引列必须不同于分区列。
资源队列
- 使用资源队列管理集群上的工作负载。
- 将所有角色与用户定义的资源队列关联。
- 使用ACTIVE_STATEMENTS参数限制特定队列成员可以并发运行的活动查询的数量。
- 使用MEMORY_LIMIT参数来控制通过队列运行的查询可以利用的内存总量。
- 动态更改资源队列以匹配工作负载和时间。
监控与维护
- 执行Greenplum数据库管理员指南中的“推荐的监控和维护任务”。
- 在安装时运行gpcheckperf,并在安装后定期运行,保存输出以比较一段时间内的系统性能。
- 使用您可以使用的所有工具来了解系统在不同负载下的行为。
- 检查任何异常事件以确定原因。
- 通过定期运行explain计划来监视系统上的查询活动,以确保查询以最佳方式运行。
- 检查计划,以确定是否正在使用索引,分区消除是否按预期进行。
- 了解系统日志文件的位置和内容,并定期监视它们,而不仅仅是在出现问题时进行监视。
analyze
- 确定是否确实需要分析数据库。如果gp_autostats_mode设置为on_no_stats(默认值),并且表没有分区,则不需要进行分析。
- 在处理大型表集时,优先使用analyzedb而不是ANALYZE,因为它不需要分析整个数据库。- analyzedb实用程序以增量和并发方式更新指定表的统计数据。对于追加优化的表,只有在统计信息不是当前的情况下,analyzedb才会增量更新统计信息。对于堆表,统计信息总是更新的。- ANALYZE不更新analyzedb实用程序用来确定表统计信息是否为最新的表元数据。
需要时,在表级别选择性地运行ANALYZE。 - 总是在INSERT、UPDATE之后运行ANALYZE。以及对底层数据进行重大修改的DELETE操作。
- 总是在CREATE INDEX操作之后运行ANALYZE。
- 如果在非常大的表上执行ANALYZE需要很长时间,那么只在连接条件、WHERE子句、SORT、GROUP BY或HAVING子句中使用的列上运行ANALYZE。
- 当处理大型表集时,使用analyzedb而不是ANALYZE。
- 在向分区表添加新分区时,在根分区上运行analyzedb。该操作同时分析子叶子分区,并将任何更新的统计信息合并到根分区中。
vacuum
- 在大的UPDATE和DELETE操作后运行VACUUM。
- 不要运行vacuum full。相反,运行CREATE TABLE…AS操作,然后重命名并删除原始表。
- 经常在系统catalog上运行VACUUM,以避免catalog膨胀,并且需要在catalog表上运行VACUUM FULL。
- 永远不要对catalog表上的VACUUM发出kill命令。
加载
- 随着segment数量的增加,并行度最大化。
- 将数据均匀地分布在尽可能多的ETL节点上。
- 将非常大的数据文件分成相等的部分,并将数据分散到尽可能多的文件系统中。
- 为每个文件系统运行两个gpfdist实例。
- 在尽可能多的接口上运行gpfdist。
- 使用gp_external_max_segs来控制将从gpfdist进程请求数据的segment的数量。
- 始终将gp_external_max_segs和gpfdist进程的数量保持为一个均匀因子。
- 总是在加载到现有表之前删除索引,并在加载后重新创建索引。
- 加载错误后执行VACUUM命令恢复空间。
安全
- 保护gpadmin用户id,只允许必要的系统管理员访问它。
- 管理员仅在执行某些系统维护任务(如升级、扩容)时使用gpadmin帐号登录Greenplum。
- 限制具有SUPERUSER角色属性的用户。超级用户角色绕过Greenplum数据库中的所有访问权限检查,以及资源排队。只有系统管理员才应该拥有超级用户权限。请参见《Greenplum数据库管理员指南》中的“修改角色属性”。
- 数据库用户不应该以gpadmin身份登录,ETL或生产工作负载也不应该以gpadmin身份运行。
- 为每个登录的用户、应用程序或服务分配一个不同的Greenplum Database角色。
- 对于应用程序或web服务,请考虑为每个应用程序或服务创建不同的角色。
- 使用组来管理访问权限。
- 保护root密码。
- 对操作系统密码实施强密码策略。
- 确保重要的操作系统文件受到保护。
加密
- 加密和解密数据有性能成本;只加密需要加密的数据。
- 在生产系统中实现任何加密解决方案之前进行性能测试。
- 生产环境Greenplum Database系统中的服务器证书应该由证书颁发机构(CA)签名,以便客户端- 可以对服务器进行身份验证。如果所有客户端对于组织来说都是本地的,那么CA可能是本地的。
- 只要连接通过不安全的链接,到Greenplum Database的客户端连接就应该使用SSL加密。
- 对称加密方案(使用相同的密钥进行加密和解密)比非对称加密方案具有更好的性能,应该在密钥可以安全共享的情况下使用。
- 使用加密函数对磁盘中的数据进行加密。数据在数据库进程中进行加密和解密,因此使用SSL保护客户端连接以避免传输未加密的数据非常重要。
- 在将ETL数据加载到数据库或从数据库卸载时,使用gpfdists协议来保护ETL数据。
高可用
- 建议使用8盘~ 24盘的硬件RAID存储方案。
- 请使用RAID 1、RAID 5或RAID 6来允许硬盘故障。
- 在磁盘阵列中配置热备,以便在检测到磁盘故障时自动开始重建。
- 通过镜像RAID卷,防止整个磁盘阵列的故障和重构过程中的降级。
- 定期监控磁盘利用率,并在需要时添加额外的空间。
- 监控segment倾斜以确保数据均匀分布,并且在所有段上均匀使用存储。
- 设置备用协调器实例,以便在主协调器发生故障时接管。
- 计划如何在发生故障时将客户端切换到新的协调器实例,例如,通过更新DNS中的协调器地址。
- 设置监视,以便在系统监视应用程序中发送通知,或者在主服务器发生故障时通过电子邮件发送通知。
- 为所有segment设置镜像。
- 在不同的主机上定位主segment及其镜像,防止主机故障。
- 使用gprecoverseg实用程序迅速恢复故障段,以恢复冗余并使系统恢复到最佳平衡。
- 考虑双集群配置,以提供额外级别的冗余和额外的查询处理吞吐量。
- 定期备份Greenplum数据库,除非数据很容易从数据源恢复。
- 如果备份保存到本地集群存储,则在备份完成后将文件移动到安全的集群外位置。
- 如果备份保存到NFS挂载,请使用横向扩展NFS解决方案(如Dell EMC Isilon)来防止IO瓶颈。
- 考虑使用Greenplum集成将备份流传输到Dell EMC Data Domain企业备份平台。
相关文章:

Greenplum-最佳实践小结
注:本文翻译自https://docs.vmware.com/en/VMware-Greenplum/7/greenplum-database/best_practices-logfiles.html 数据模型 Greenplum数据库是一个分析型MPP无共享数据库。该模型与高度规范化/事务性的SMP数据库明显不同。Greenplum数据库使用适合MPP分析处理的非…...

从Gamma空间改为Linear空间会导致性能下降吗
1)从Gamma空间改为Linear空间会导致性能下降吗 2)如何处理没有使用Unity Ads却收到了GooglePlay平台的警告 3)C#端如何处理xLua在执行DoString时候死循环 4)Texture2DArray相关 这是第350篇UWA技术知识分享的推送,精选…...

双轨制的发展,弊端和前景
双轨制是一种经济体制,指两种不同的规则或机制并行运行,以适应不同的市场或客户需求。双轨制最早出现在中国的改革开放中,是从计划经济向市场经济过渡的一种渐进式改革方式。 双轨制的发展可以分为三个阶段: 第一阶段(…...

生成对抗网络(GAN):在图像生成和修复中的应用
文章目录 什么是生成对抗网络(GAN)?GAN在图像生成中的应用图像生成风格迁移 GAN在图像修复中的应用图像修复 拓展应用领域总结 🎉欢迎来到AIGC人工智能专栏~生成对抗网络(GAN):在图像生成和修复…...

扬杰科技携手企企通,召开SRM采购供应链协同系统项目启动会
近日,中国功率半导体领先企业扬州扬杰电子科技股份有限公司(以下简称“扬杰科技”)与企企通召开SRM采购供应链协同系统项目启动会,双方项目团队成员一同出席本次会议。 会上,双方就扬杰科技采购供应链管理平台项目的目…...
AtCoder Beginner Contest 318
目录 A - Full Moon B - Overlapping sheets C - Blue Spring D - General Weighted Max Matching E - Sandwiches F - Octopus A - Full Moon #include<bits/stdc.h> using namespace std; const int N1e65; typedef long long ll ; const int maxv4e65; typedef …...

《Python魔法大冒险》003 两个神奇的魔法工具
魔法师:小鱼,要开始编写魔法般的Python程序,我们首先需要两个神奇的工具:Python解释器和代码编辑器。 小鱼:这两个工具是做什么的? 魔法师:你可以把Python解释器看作是一个魔法棒,只要你向它说出正确的咒语,它就会为你施展魔法。 小鱼:那这个解释器和我之前用的电…...

每日一题-动态规划(从不同类型的物品中各挑选一个,使得最后花费总和等于1000)
四种类型的物品,每一种类型物品数量都是n,先要从每种类型的物品中挑选一件,使得最后花费总和等于1000 暴力做法10000^4 看到花费总和是1000,很小且固定的数字,肯定有玄机,从这里想应该是用dp,不…...

2023-9-3 试除法判定质数
题目链接:试除法判定质数 #include <iostream>using namespace std;bool is_prime(int n) {if(n < 2) return false;for(int i 2; i < n / i; i){if(n % i 0) return false;}return true; }int main() {int n;cin >> n;while(n--){int x;cin &g…...

【Apollo学习笔记】——规划模块TASK之RULE_BASED_STOP_DECIDER
文章目录 前言RULE_BASED_STOP_DECIDER相关配置RULE_BASED_STOP_DECIDER总体流程StopOnSidePassCheckClearDoneCheckSidePassStopIsPerceptionBlockedIsClearToChangeLaneCheckSidePassStopBuildStopDecisionELSE:涉及到的一些其他函数NormalizeAngleSelfRotate CheckLaneChang…...

【SpringBoot】最基础的项目架构(SpringBoot+Mybatis-plus+lombok+knife4j+hutool)
汝之观览,吾之幸也! 从本文开始讲下项目中用到的一些框架和技术,最基本的框架使用的是SpringBoot(2.5.10)Mybatis-plus(3.5.3.2)lombok(1.18.28)knife4j(3.0.3)hutool(5.8.21),可以做到代码自动生成,满足最基本的增删查改。 一、新…...

RNN 单元:分析 GRU 方程与 LSTM,以及何时选择 RNN 而不是变压器
一、说明 深度学习往往感觉像是在雪山上找到自己的道路。拥有坚实的原则会让你对做出决定更有信心。我们都去过那里 在上一篇文章中,我们彻底介绍并检查了 LSTM 单元的各个方面。有人可能会争辩说,RNN方法已经过时了,研究它们是没有意义的。的…...

Linux音频了解
ALPHA I.MX6U 开发板支持音频,板上搭载了音频编解码芯片 WM8960,支持播放以及录音功能! 本章将会讨论如下主题内容。 ⚫ Linux 下 ALSA 框架概述; ⚫ alsa-lib 库介绍; ⚫ alsa-lib 库移植; ⚫ alsa-l…...

精心整理了优秀的GitHub开源项目,包含前端、后端、AI人工智能、游戏、黑客工具、网络工具、AI医疗等等,空闲的时候方便看看提高自己的视野
精心整理了优秀的GitHub开源项目,包含前端、后端、AI人工智能、游戏、黑客工具、网络工具、AI医疗等等,空闲的时候方便看看提高自己的视野。 刚开源就变成新星的 igl,不仅获得了 2k star,也能提高你开发游戏的效率,摆…...

Leetcode54螺旋矩阵
思路:用set记录走过的地方,记下走的方向,根据方向碰壁变换 class Solution:def spiralOrder(self, matrix: list[list[int]]) -> list[int]:max_rows len(matrix)max_cols len(matrix[0])block_nums max_cols * max_rowscount 1i 0j…...

element-plus 表格-方法、事件、属性的使用
记录element-plus 表格的使用。方法、事件、属性的使用。因为是vue3的方式用到了const install getCurrentInstance();才能获取表格的相关信息 没解决怎么获取选中的行的行号,采用自己记的方式实习的。 利用row-class-name"setRowClass"实现样式的简单…...

NVME Linux的查询命令-继续更新
NVME Linux的查询命令 查看NVMe设备 # nvme list 查看nvme controller 支持的一些特性 # nvme id-ctrl /dev/nvme0 查看设备smart log信息 # nvme smart-log /dev/nvme0 查看设备error 信息 # nvme error-log /dev/nvme0 设备的所有命名空间 # nvme list-ns /dev/nvmeX 检…...

pyqt5-自定义文本域1
快捷键支持: CTRL鼠标滚轮实现字体大小调整 支持复制当前行 剪切当前行 # 多行文本框 class TextEdit(QTextEdit):def __init__(self, parentNone):super().__init__(parent)self.setStyleSheet("background-color: #262626;color: #d0d0d0;")self.setFon…...

Go实现LogCollect:海量日志收集系统【上篇——LogAgent实现】
Go实现LogCollect:海量日志收集系统【上篇——LogAgent实现】 下篇:Go实现LogCollect:海量日志收集系统【下篇——开发LogTransfer】 项目架构图: 0 项目背景与方案选择 背景 当公司发展的越来越大,业务越来越复杂…...

MySQL (1)
目录 操作须知 数据类型 1 DDL 1.1 操作库 1.2 操作表 1.3 操作字段(ALTER TABLE 表名) 2 DML 3 DQL(见下章) 操作须知 ※ MySQL在windows环境不区分大小写,但在Linux环境严格区分大小写 ※ 不同的数据库可能存在同名的表,可以给表前加"数据库前缀" //例:…...

MR混合现实汽车维修情景实训教学演示
MR混合现实技术应用于汽车维修课堂中,能够赋予学生更加真实,逼真地学习环境,让学生在情景体验中不断提高自己的专业能力。 MR混合现实汽车维修情景实训教学演示具体体现在: 1. 虚拟维修指导:利用MR技术,可…...

ChatGPT在航空航天工程和太空探索中的潜在应用如何?
ChatGPT在航空航天工程和太空探索领域具有广泛的潜在应用。这些应用可以涵盖从设计和模拟到任务控制和数据分析的多个方面。本文将探讨ChatGPT在航空航天和太空探索中的各种可能应用,包括设计优化、任务规划、智能导航、卫星通信、数据分析和太空探测器运行。 ### …...

算法基础第三章
算法基础第三章 1、dfs(深度搜索)1.1、 递归回溯1.2、递归剪枝(剪枝就是判断接下来的递归都不会满足条件,直接回溯,不再继续往下无意义的递归) 2、bfs(广度搜索)2.1、最优路径(只适合于边权都相等的题) 3、…...

ElementUI浅尝辄止20:Pagination 分页
分页组件常见于管理系统的列表查询页面,数据量巨大时需要分页的操作。 当数据量过多时,使用分页分解数据。 1.如何使用? /*设置layout,表示需要显示的内容,用逗号分隔,布局元素会依次显示。prev表示上一页…...

Docker从认识到实践再到底层原理(二-1)|容器技术发展史+虚拟化容器概念和简介
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…...

什么是大模型?1750亿、700GB的GPT大模型大在哪?
文章目录 什么是大模型?1750亿、700GB的GPT大模型大在哪? 什么是大模型? 在人工智能领域,模型是指一种对数据进行处理和分析的数学结构。模型越复杂,能够处理的数据量和处理的准确性都会得到提高。 随着人工智能技术…...

剑指 Offer 10- II. 青蛙跳台阶问题
剑指 Offer 10- II. 青蛙跳台阶问题 和 剑指 Offer 10- I. 斐波那契数列 很像,改一下初始值就行了。 方法一 class Solution {int mod (int) 1e9 7;public int numWays(int n) {if(n < 1) return 1;int[] dp new int[n 1];dp[1] 1;dp[2] 2;for(int i 3…...

oracle10和11功能说明比较
Oracle 10g/11g的特点和优势 首先,Oracle 10g/11g具有以下几个特点: 1. 可靠性和稳定性:Oracle 10g采用了多种技术来确保数据的可靠性和稳定性,如ACID事务处理和数据备份与恢复机制。它还提供了高可用性的解决方案,如…...

golang-bufio 缓冲写
1. 缓冲写 在阅读这篇博客之前,请先阅读上一篇:golang-bufio 缓冲读 // buffered output// Writer implements buffering for an io.Writer object. // If an error occurs writing to a Writer, no more data will be // accepted and all subsequent…...

Windows修改电脑DNS
访问浏览器出现无法访问此页面,找不到DNS地址,则可以通过如下方式修改DNS 按下windows键R键(两个键一起按) 出现下面窗口 输入control按回车键(Enter键)就会出现下面的窗口 DNS可以填下面这些: 114.114.114.114 和 114.114.115.115 阿里DNS&a…...