用HAWQ轻松取代传统数据仓库(十八) —— 问题排查

(原文地址:http://hawq.incubator.apache.org/docs/userguide/2.1.0.0-incubating/troubleshooting/Troubleshooting.html
        本章描述如何解决HAWQ系统中常见的错误和问题。

一、查询性能问题

问题:查询慢。
        原因:一个查询执行缓慢可能有多个原因。例如,数据分布的位置,虚拟段的数量,查询使用的主机数量等都可能影响查询性能。以下过程描述如何排查查询性能问题。

一个查询不像预期执行的那么快。以下是如何调查慢的可能原因。

  1. 检查集群健康状况:(1)是否有DataNode、segment或其它节点宕机?(2)是否有很多失效磁盘?
  2. 检查表统计。查询中的表是否已经分析过?
  3. 检查查询计划并运行EXPLAIN ANALYZE确定瓶颈。有时,对某些操作没有足够的内存,比如Hash Join,或使用了溢出文件。如果一个操作不能全部在分配给它的内存中执行,它将数据缓存到磁盘上的溢出文件中。相对于不使用溢出文件,查询会慢得多。
  4. 使用EXPLAIN ANALYZE检查数据本地化统计。或者检查日志文件。每个查询的数据本地化情况也可在HAWQ日志中找到。统计信息参见Data Locality Statistics
  5. 检查资源队列状态。你可以查询pg_resqueue_status视图,检查目标队列是否已经为查询分派了资源,或者目标队列缺少资源。参见Checking Existing Resource Queues
  6. 分析资源管理器状态的转储,查看更多资源队列状态。参见Analyzing Resource Manager Status

二、拒绝查询资源请求

问题:HAWQ资源管理器拒绝了查询的资源分配请求。
        原因:出现以下情况时,HAWQ资源管理器拒绝查询的资源分配请求:

  • 太多物理段不可用。

    
    

    HAWQ资源管理器期望$GPHOME/etc/slaves文件中列出的物理段均已注册,并可以从gp_segment_configuration表查询到。如果资源管理器确定未注册的或不可用的HAWQ物理段数量大于hawq_rm_rejectrequest_nseg_limit,那么资源管理器直接拒绝查询的资源请求。拒绝查询的目的是要保证查询运行在完整的集群中。这让查询性能问题的诊断更容易。hawq_rm_rejectrequest_nseg_limit的缺省值为0.25,就是说如果发现不可用或未注册的数量大于0.25 * $GPHOME/etc/slaves文件中所列的段数,资源管理器拒绝查询的资源请求。例如,如果slaves文件中有15个段,资源管理器计算不可用的段不能超过4(0.25 * 15)。大多数情况下,你不需要修改该此缺省值。

  • 为查询分配虚拟段的物理段中有未使用的。
    
    

    超过了hawq_rm_tolerate_nseg_limit中定义的限制。

  • 物理段之间分派的虚拟段太不均匀。
    
    

    为保证最佳查询性能,HAWQ资源管理器试图尽可能均匀地在物理段间为查询分配虚拟段。但是可能存在分配偏差。当偏差大于hawq_rm_nvseg_variance_amon_seg_limit设置的值,HAWQ拒绝查询的资源分配请求。例如,一个查询引起2个物理段分派9个虚拟段。假设一个段分配7个虚拟段,另一个分配2个虚拟段。段间偏差是5。如果hawq_rm_nvseg_variance_amon_seg_limit的设置为缺省值1,那么为此查询的资源分配被拒绝,并将在以后分配。但如果一个物理段分配5个虚拟段,另一个物理段是4个,则接收此资源分配。

解决方案:检查集群中节点的状态。如果有必要,重启或新增节点。修改hawq_rm_nvseg_variance_amon_seg_limit(尽管这会影响查询性能)。

三、VMEM使用超高引起的查询取消

问题:使用太多虚拟内存的特定查询被取消。实例错误消息:

ERROR: Canceling query because of high VMEM usage. Used: 1748MB, available 480MB, red zone: 9216MB (runaway_cleaner.c:135) (seg74 bcn-w3:5532 pid=33619) (dispatcher.c:1681)

原因:当一个段上虚拟内存的使用超过了由runaway_detector_activation_percent配置的虚拟内存百分比阈值,就会发生此错误。

如果一个物理段使用的虚拟内存总量超过计算阈值,HAWQ开始基于内存使用终止查询,从消耗最大内存量的查询开始。直到虚拟内存使用低于指定的百分比才停止对查询的终止。

解决方案:临时加大hawq_re_memory_overcommit_max的值,允许特性查询无误运行。

检查pg_log文件,得到会话和QE进程使用内存的更多细节。HAWQ记录查询终止信息,如内存分配历史、上下文信息,以及查询计划操作符的内存使用信息。这些信息被发送到master和segment实例的日志文件中。

四、segment没在gp_segment_configuration中出现

问题:段启动成功,但没有出现在gp_segment_configuration表中。
        原因:你的段可能分配了相同的IP地址。

有些软件和项目具有使用自动配置IP地址的虚拟网卡。这可能引起HAWQ的段获得相同的IP地址。资源管理器的容错服务组件只能识别具有相同IP地址的段中的一个。

解决方案:启动HAWQ集群前,修改网络配置,禁止IP地址相同。

五、调查标记为Down的segment

问题:HAWQ容错服务(fault tolerance service,FTS)在gp_segment_configuration目录表中标记一个段为down。
        原因:当段碰到严重错误时,FTS标记该段为down。例如,因为硬件问题导致段上的临时目录失效。其它原因可能包括网络或通信错误、资源管理器错误,或简单的心跳超时等。段通过心跳报告向主节点报告一个严重故障。
        解决方案:依赖于不同的原因,需要存取不同的恢复操作。有些情况下,段仅仅是被临时标记为down,直到心跳周期再次检查段的状态。为了调查段被标记为down的原因,从gp_configuration_history目录表查找对应的原因。容错服务将段标记为down的各种原因,参见Viewing the Current Status of a Segment的描述。

六、处理segment资源碎片

不同HAWQ资源队列的虚拟段资源限额可以不同,由此可能导致资源碎片。例如,一个HAWQ集群有4GB内存可用于当前排队的查询,但是资源队列被配置为在4个不同的段上分裂成四个512MB的内存块。它不可能分配两个1GB内存的虚拟段。

在独立资源模式中,所有段资源为HAWQ所独占。当段的配额不是虚拟段资源限额的倍数时,就可能出现资源碎片。例如,一个段有15GB的内存配额,但是虚拟段资源限额设置成2GB。一个段最多可以消耗14GB内存。因此,你应该配置段的资源配额为所有虚拟段资源限额的倍数。

YARN模式里,资源从YARN资源管理器分配。HAWQ资源管理器通过一个vcore获得一个YARN容器。例如,如果YARN报告一个段为YARN应用配置了64GB内存和16个vcore,HAWQ通过4GB内存和1个vcore请求YARN容器。照此方法,HAWQ资源管理器按需获取YARN容器。如果YARN容器的配额不是虚拟段资源限额的倍数,可能发生资源碎片。例如,YARN容器的资源配额为3GB内存和1个vcore,每个段可以有1个或3个YARN容器用于HAWQ执行查询。在这种情况下,如果虚拟段的资源限额为2GB内存,那么HAWQ总有1GB内存不能利用。因此,推荐仔细配置YARN模式的资源配额,使YARN容器资源限额是所有虚拟段资源限额的倍数。另外,确认你的CPU、内存比率是yarn.scheduler.minimum-allocation-mb配置的倍数。更多信息参见Setting HAWQ Segment Resource Capacity in YARN

如果出现资源碎片,排队的请求不被处理,直到一些运行的查询返还资源,或者全局资源管理器提供了更多的资源。如果你碰到资源碎片,你应该检查资源队列设置的配额,找到为任何错误的配置。例如,可能的一个错误是,全局资源容器的内存核数比率,不是虚拟段资源限额的倍数。

时间: 2024-08-10 06:14:09

用HAWQ轻松取代传统数据仓库(十八) —— 问题排查的相关文章

用HAWQ轻松取代传统数据仓库(八) —— 大表分区

一.HAWQ中的分区表        与大多数关系数据库一样,HAWQ也支持分区表.这里所说的分区表是指HAWQ的内部分区表,外部分区表在后面"外部数据"篇讨论.在数据仓库应用中,事实表通常有非常多的记录,分区可以将这样的大表在逻辑上分为小的.更易管理的数据片段.HAWQ的优化器支持分区消除以提高查询性能.只要查询条件中可以使用分区键作为过滤条件,那么HAWQ只需要扫描满足查询条件的分区,而不必进行全表扫描.        分区并不改变表数据在segment间的物理分布.表的分布是物理

用HAWQ轻松取代传统数据仓库(十一) —— 数据管理

一.基本操作1. INSERT        在常用的增删改查数据库操作中,HAWQ仅支持INSERT和SELECT两种,不支持UPDATE和DELETE,这主要是因为HDFS是一个只能追加数据而不能更新的文件系统.SELECT语句最熟悉不过,它应该是数据库中最常用的语句了,在下一篇"查询优化"时再进一步讨论.INSERT语句用于创建表行,该命令需要表名和表中每个列的值.在HAWQ中,该命令有四种用法,其中三种是SQL中的常规用法,另一种是对标准SQL的扩展.(1)指定列名与列值   

用HAWQ轻松取代传统数据仓库(十四) —— 高可用性

一.HAWQ高可用简介 HAWQ作为一个传统数仓在Hadoop上的替代品,其高可用性至关重要.通常硬件容错.HAWQ HA.HDFS HA是保持系统高可用时需要考虑并实施的三个层次.另外实时监控和定期维护,也是保证集群所有组件健康的必不可少的工作.        总的来说,HAWQ容错高可用的实现方式包括: 硬件冗余 master镜像 双集群 1. 硬件级别的冗余(RAID和JBOD) 硬件组件的正常磨损或意外情况最终会导致损坏,因此有必要提供备用的冗余硬件,当一个组件发生损坏时,不中断服务.某

用HAWQ轻松取代传统数据仓库(十二) —— 查询优化

即便对SELECT等数据库查询语句已经很熟悉了,但HAWQ里的查询有其自己的特点,还是需要研究一下. 一.HAWQ的查询处理流程        理解HAWQ的查询处理过程有助于写出更加优化的查询.与任何其它数据库管理系统类似,HAWQ也有如下的查询执行步骤: 用户使用客户端应用(如psql)连接到HAWQ master主机上的数据库实例,并向系统提交SQL语句. master接收到查询后,由查询编译器解析提交的SQL语句,并将生成的查询解析树递交给给查询优化器. 查询优化器根据查询的磁盘I/O.

用HAWQ轻松取代传统数据仓库(十七) —— 最佳实践

一.HAWQ参数配置最佳实践 (原文地址:http://hawq.incubator.apache.org/docs/userguide/2.1.0.0-incubating/bestpractices/config_hawq_bestpractices.html)        在$GPHOME/etc/hawq-site.xml文件中维护HAWQ的配置参数.该文件存在于所有HAWQ实例上,并可以通过Ambari或使用HAWQ命令行接口进行修改.使用一致的策略(Ambari或命令行接口)维护h

用HAWQ轻松取代传统数据仓库(二) —— 安装部署

一.安装规划1. 选择安装介质        HAWQ的安装介质有两种选择,一是下载源码手工编译,二是使用Pivotal公司提供的HDB安装包.源码的下载地址为http://apache.org/dyn/closer.cgi/incubator/hawq/2.0.0.0-incubating/apache-hawq-src-2.0.0.0-incubating.tar.gz,目前最新版本是2.0.0.源码编译和安装Apache官方文档地址为https://cwiki.apache.org/con

用HAWQ轻松取代传统数据仓库(七) —— 存储分布

在HAWQ中创建一个表时,应该预先对数据如何分布.表的存储选项.数据导入导出方式和其它HAWQ特性做出选择,这些都将对数据库性能有极大影响.理解有效选项 的含义以及如何在数据库中使用它们,将有助于做出正确的选择. 一.数据存储模型        create table的with子句用于设置表的存储选项.例如: db1=# create table t1 (a int) with db1-# (appendonly=true, db1(# blocksize=8192, db1(# orient

用HAWQ轻松取代传统数据仓库(十三) —— 资源管理

一.HAWQ如何管理资源 HAWQ使用多种机制管理CPU.内存.I/O.文件句柄等系统资源,包括全局资源管理.资源队列.强制资源使用限额等. 1. 全局资源管理 Hadoop通常使用YARN全局管理资源.YARN是一个通用的资源管理框架,为MapReduce作业或其它配置了YARN的应用提供资源.在YARN环境中,资源分配的单位被称为容器(container),YARN还能强制限制每个集群节点上的可用资源.图1展示了Hadoop YARN环境下的HAWQ集群布局. 图1 可以将HAWQ配置为一个

用HAWQ轻松取代传统数据仓库(四) —— 启动停止

前面已经完成了HAWQ的安装部署,也了解了HAWQ的系统架构与主要组件,下面开始使用它.HAWQ作为Hadoop上的一个服务提供给用户,与其它所有服务一样,最基本的操作就是启动.停止.重启服务.要完成这些操作,需要适当的环境设置.下面就HAWQ管理的一些基础概念.操作环境.启动停止及其推荐的操作进行讨论. 一.基础概念        如果组织中能够做到系统管理与开发分离,那这部分内容严格说应该是HAWQ系统管理员所关心的.要利用好HAWQ集群,应该有一些Linux/UNIX系统管理.数据库管理系