host: shell $ hawq stop cluster
$ hawq stop cluster -M fast $ hawq stop cluster -M immediate
$ hawq stop master -M fast $ hawq stop master -M immediate
$ hawq stop segment $ hawq stop allsegments
活动 | 过程 | 改进措施 |
列出当前宕掉的segment。如果返回行,应该生成一个警告或警报。 推荐频率:每隔5到1-分钟运行一次 重要性:重要 | 在postgres数据库中运行下面的查询: SELECT * FROM gp_segment_configuration WHERE status <> ‘u‘; | 如果查询返回行,执行下面这些步骤修改问题: 1. 核实宕掉segment的主机有响应。 2. 如果主机没问题,在pg_log文件中检查宕掉的segment,找到该segment宕掉的根本原因。 |
活动 | 过程 | 改进措施 |
维护需求或硬件系统故障的底层平台检查。 推荐频率:如果可能,实时,或者每15分钟 重要性:非常重要 | 构建用于硬件和操作系统错误的系统检查。 | 如果有必要,从HAWQ集群中移除机器,解决硬件和操作系统问题,问题解决后再加回集群中。 |
检查用于HAWQ数据存储和操作系统的磁盘空间使用量。 推荐频率:每5到30分钟 重要性:非常重要 | 建立磁盘空间检查。 . 设置阈值,当磁盘到达一个容量百分比时发出警告。推荐的阈值为总容量的75% . 不推荐在接近容量100%的系统上运行系统。 | 删除数据或文件释放系统空间。 |
检查丢包等网络问题。 推荐频率:每小时 重要性:重要 | 建立网络检查。 | 与网络或系统管理团队一起解决问题。 |
检查RAID错误或RAID性能下降。 推荐频率:每5分钟 重要性:非常重要 | 建立RAID检查。 | . 尽快替换失效磁盘。 . 尽快与系统管理团队一起解决其它RAID或控制器问题。 |
检查I/O带宽是否充足和I/O倾斜。 推荐频率:创建集群或怀疑有硬件问题时 | 运行HAWQ的hawq checkperf应用。 | 如果数据传输速率与下面的不相似,集群可能I/O带宽不足: . 每秒2GB磁盘读 . 每秒1GB磁盘读 . 每秒10Gb网络读写 如果传输率低于预期,与你的数据架构师协商期望的性能。 如果集群中的机器显示出不平衡的性能表现,与系统管理员团队一起修复有故障的机器。 |
活动 | 过程 | 改进措施 |
检查缺少统计信息的表。 | 检查每个数据库的hawq_stats_missing视图: SELECT * FROM hawq_toolkit.hawq_stats_missing; | 在缺少统计的表上运行ANALYZE。 |
活动 | 过程 | 改进措施 | ||||||||||||||||||
标记HAWQ系统目录里(pg_catalog模式下的表)删除的行,以重用它们占用的空间。 推荐频率:每天 重要性:非常重要 | 清理每个系统目录: VACUUM
(5)补丁与升级
三、HAWQ安全最佳实践(原文地址:http://hawq.incubator.apache.org/docs/userguide/2.1.0.0-incubating/bestpractices/secure_bestpractices.html) 为了安全部署你的HAWQ,参考本主题所列的建议。
本节描述HAWQ中的资源管理最佳实践。 1. 资源管理配置最佳实践配置资源管理时,你可以应用某些最佳实践保证高效管理资源和最好的系统性能。下面是优化资源管理的高级最佳实践列表:
2. 资源队列使用最佳实践资源队列的设计和配置依赖于你部署的业务需要。本节描述不同业务场景中创建和修改资源队列的最佳实践。(1)为过载HDFS修改资源队列 高并发HAWQ查询可能造成HDFS过载,尤其是在查询分区表时。使用资源队列的ACTIVE_STATEMENTS属性限制并发语句数。例如,如果一个外部应用执行多于100的并发查询,那么在你的资源队列中限制活跃语句数量,将指示HAWQ资源管理器限制HAWQ里的实际并发语句数。你可能希望如下修改一个已有的资源队列: ALTER RESOURCE QUEUE sampleque1 WITH (ACTIVE_STATEMENTS=20);在该场景下,当这个DDL应用到sampleque1队列,使用该队列的角色必须等到正在运行的语句不多于20个时再执行他们的查询。因此,队列里的80个查询将等待以后执行。限制活跃语句数量有助于控制和保护HDFS的资源使用。你甚至能够在资源队列忙碌时修改其并发数。例如,如果一个队列已经有40个并行的语句,此时你使用DDL语句指定ACTIVE_STATEMENTS=20,则该资源队列暂停为查询分配资源,直到多于20个语句已经返还它们的资源。 (2)隔离并保护生产环境工作负载 另一个最佳实践是使用资源队列隔离你的工作负载。工作负载隔离防止你的生产环境资源匮乏。为了建立这种隔离,通过为特定目的创建角色来划分工作负载。例如,你可以为线上生产验证环境创建一个角色,而为正常运行的生产过程建立另一个角色。 在这种场景中,让我们为正式线上工作负载赋予role1,线上软件验证服务role2。我们可以定义以下资源队列,它们有同一个为整个部门定义的父队列dept1que。 CREATE RESOURCE QUEUE dept1product WITH (PARENT=‘dept1que‘, MEMORY_LIMIT_CLUSTER=90%, CORE_LIMIT_CLUSTER=90%, RESOURCE_OVERCOMMIT_FACTOR=2); CREATE RESOURCE QUEUE dept1verification WITH (PARENT=‘dept1que‘, MEMORY_LIMIT_CLUSTER=10%, CORE_LIMIT_CLUSTER=10%, RESOURCE_OVERCOMMIT_FACTOR=10); ALTER ROLE role1 RESOURCE QUEUE dept1product; ALTER ROLE role2 RESOURCE QUEUE dept1verification;用这些资源队列定义,工作负载通过资源队列划分如下:
另外,你可以使用资源队列隔离不同部门或不同应用的工作负载。例如,我们能使用下面的DDL语句定义三个部门,管理员也可以随意重新分配各部门之间的资源分配。 ALTER RESOURCE QUEUE pg_default WITH (MEMORY_LIMIT_CLUSTER=10%, CORE_LIMIT_CLUSTER=10%); CREATE RESOURCE QUEUE dept1 WITH (PARENT=‘pg_root‘, MEMORY_LIMIT_CLUSTER=30%, CORE_LIMIT_CLUSTER=30%); CREATE RESOURCE QUEUE dept2 WITH (PARENT=‘pg_root‘, MEMORY_LIMIT_CLUSTER=30%, CORE_LIMIT_CLUSTER=30%); CREATE RESOURCE QUEUE dept3 WITH (PARENT=‘pg_root‘, MEMORY_LIMIT_CLUSTER=30%, CORE_LIMIT_CLUSTER=30%); CREATE RESOURCE QUEUE dept11 WITH (PARENT=‘dept1‘, MEMORY_LIMIT_CLUSTER=50%,CORE_LIMIT_CLUSTER=50%); CREATE RESOURCE QUEUE dept12 WITH (PARENT=‘dept1‘, MEMORY_LIMIT_CLUSTER=50%, CORE_LIMIT_CLUSTER=50%); (3)用大内存查询Parquet表 你可以使用大内存的资源队列提升Parquet表的查询性能。此类查询需要给虚拟段大的内存限额。因此,如果一个角色主要使用大内存查询Parquet表,修改角色相关的资源队列增加它的虚拟段资源限额。例如: ALTER RESOURCE queue1 WITH (VSEG_RESOURCE_QUOTA=‘mem:2gb‘);如果只是偶尔用大内存查询Parquet表,使用语句级指定代替修改资源队列。例如: SET HAWQ_RM_STMT_NVSEG=10; SET HAWQ_RM_STMT_VSEG_MEMORY=‘2gb‘; query1; SET HAWQ_RM_STMT_NVSEG=0; (4)限制特定查询的资源消耗 通常,HAWQ资源管理器试图给当前查询提供尽可能多的资源,以获得高性能查询。然而,与一个复杂大查询相关的资源队列可能使用很多虚拟段,造成其它资源队列和查询资源不足。这种情况下,你应该启用与大查询相关资源队列的nvseg限制。例如,你可以指定所有查询都不能使用多于200的虚拟段。为实现此限制,如下修改资源队列: ALTER RESOURCE QUEUE queue1 WITH (NVSEG_UPPER_LIMIT=200);如果我们希望根据不同的集群大小动态设置此限制,我们也以使用下面的语句。 ALTER RESOURCE QUEUE queue1 WITH (NVSEG_UPPER_LIMIT_PERSEG=10);这样设置后,入股你有一个10节点的集群,实际限制是100。如果集群扩展到20个节点,限制自动增加到200。 (5)确保个别语句的资源分配 一般而言,给一条语句分配的最少虚拟段数量由资源队列的实际配额及其并行度设置所决定。例如,如果集群有10个节点,总的资源配额是640GB和160核,那么一个有20%配额的资源队列拥有128GB(640 * 0.2)和32核(160 * 0.2)。如果虚拟段限额设置为256MB,则此队列将分配512个虚拟段(128GB/256MB=512)。如果该队列的ACTIVE_STATEMENTS并行度设置为20,则为每个查询分配的最少虚拟段数量是25(trunc(512/20)=25)。但这个最少虚拟段数是一个软限制。如果查询语句只需要5个虚拟段,那么这个25的最少数量被忽略,因为没必要为这个语句分配25个虚拟段。 为了增加一个查询语句的虚拟段最少数量,有两个选项:
本节描述在HAWQ中建立数据库、装载数据、数据分区以及数据恢复的最佳实践。 1. 数据装载最佳实践由于NameNodes和DataNodes上能够为写入而同时打开文件的数量限制,向HDFS中装载数据是个挑战。为了获得数据装载时的最佳性能,遵守以下最佳实践:
2. 数据分区最佳实践并不是所有表都适合分区。如果以下问题的所有或大部分答案是yes,分区表对于提高查询性能是可行的数据库设计。如果下面问题的回答大部分是no,分区表不是正确的解决方案。测试你的设计策略以保证预期的查询性能提升。
除非查询优化器能够基于查询谓词消除分区,否则分区不能提升查询性能。扫描每个分区的查询比非分区表更慢,因此当只有很少的查询满足分区消除时,要避免进行分区。检查查询的解释计划确认分区被消除。更多分区消除信息参见Query Profiling。 多级分区要非常仔细,因为分区文件数量会快速增长。例如,如果一个表通过日期和城市分区,有1000和日期数据和1000个城市,则总的分区数是一百万。面向列的表每列存储在一个物理表中,因此如果该表有100列,系统需要管理一亿个表文件。 六、数据查询最佳实践(原文地址:http://hawq.incubator.apache.org/docs/userguide/2.1.0.0-incubating/bestpractices/querying_data_bestpractices.html) 为在HAWQ中查询数据时获得最好的性能,回顾本节描述的最佳实践。 1. 影响查询性能的因素查询使用的虚拟段数量直接影响查询性能。以下因素可能影响查询的并行度:
更多细节参见Query Performance。 2. 检查查询计划解决问题如果查询性能差,查看它的执行计划问下列问题:
用HAWQ轻松取代传统数据仓库(十七) —— 最佳实践 写下你的评论吧 !
推荐阅读
|