前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >HAWQ技术解析(十八) —— 问题排查

HAWQ技术解析(十八) —— 问题排查

作者头像
用户1148526
发布于 2018-01-03 07:50:34
发布于 2018-01-03 07:50:34
1.2K00
代码可运行
举报
文章被收录于专栏:Hadoop数据仓库Hadoop数据仓库
运行总次数:0
代码可运行

(原文地址: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使用超高引起的查询取消

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年04月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
各流派 React 状态管理对比和原理实现
在 React 诞生之初,Facebook 宣传这是一个用于前端开发的界面库。在大型应用中,如何处理好 React 组件通信和状态管理就显得非常重要。
尹光耀
2022/03/22
3.1K0
各流派 React 状态管理对比和原理实现
状态管理的概念,都是纸老虎
不管是Vue,还是 React,都需要管理状态(state),比如组件之间都有共享状态的需要。什么是共享状态?比如一个组件需要使用另一个组件的状态,或者一个组件需要改变另一个组件的状态,都是共享状态。
Nealyang
2021/04/20
5.4K0
手把手教你全家桶之React(二)
前言 上一篇已经讲了一些react的基本配置,本遍接着讲热更新以及react+redux的配置与使用。 热更新 我们在实际开发时,都有用到热更新,在修改代码后,不用每次都重启服务,而是自动更新。并而不
用户2145235
2018/05/18
1.7K0
useContext
Context是React提供的一种跨组件的通信方案,useContext与useReducer是在React 16.8之后提供的Hooks API,我们可以通过useContext与useReducer来完成全局状态管理例如Redux的轻量级替代方案。
WindRunnerMax
2022/09/29
1K0
用 Redux 做状态管理,真的很简单🦆!
作为一名前端工程师,不少小伙伴对于 Redux 的概念、使用可能还是比较模糊,上手使用的心智负担也比较重!
小东同学
2022/07/29
3.6K0
用 Redux 做状态管理,真的很简单🦆!
用动画和实战打开 React Hooks(三):useReducer 和 useContext
随着应用状态越来越复杂,我们迫切需要状态与数据流管理的解决方案。熟悉 React 开发的同学一定听说过 Redux,而在这篇文章中,我们将通过 useReducer + useContext 的组合实现一个简易版的 Redux。首先,我们将带你重新认识“老朋友”useState,并借此引出这篇文章的主角:Reducer 函数与 useReducer 钩子,并通过实战一步步带你理清数据流和状态管理的基本思想。
一只图雀
2020/05/08
1.6K0
Clean-State:新的React状态管理姿势
导语 | React从设计之初到最新的v17版本,已经经历了近百次迭代。围绕着单向数据流的设计哲学出现了以Flux思想为主的Redux状态管理和以响应式监听为主的Mobx,一个强调理念上的统一而另一个强调性能体验上的极致。但是通过唯物辩证法我们知道,对立和统一才是所有事物发展的最终形态。于是自React@v16.8.0后推出了Hooks函数,在不改变其心智模型的基础上补齐了对逻辑抽象的短板,借助这一能力我们就可以打开全新的状态管理视野。文章作者:freezeYe,腾讯前端研发工程师。 一、背景 在目前
腾讯云开发者
2021/01/26
1K0
react 的数据管理方案:redux 还是 mobx?
IMWeb前端团队
2018/01/08
2.1K0
react 的数据管理方案:redux 还是 mobx?
React引入Redux实现组件间共享状态
安装 npm install redux -s 在src目录下新建store文件夹,新增index.js文件 导入redux基本模块 import { createStore } from 'redux'; const store = createStore(); export default store; 再新增reducer.js文件,这里存放共享的变量 const defaultState = { countNum: 0 } export default (state = defaultSta
明知山
2021/06/21
9910
react+redux+webpack教程2
先弄个什么例子呢?如果是现代的MVVM框架,可能会用双向绑定来吸引你。那react有双向绑定吗? 没有。 也算是有吧,有插件。不过双向绑定跟react不是一个路子的。react强调的是单向数据流。 当然,即便是单向数据流也总要有个数据的来源,如果数据来源于页面自身上的用户输入,那效果也就等同于双向绑定了。 下面就展示一下如何达到这个效果。我们来设计一个登录的场景,用户输入用户名后,会在问候语的位置展示用户名,像下这样: ---- 早上好,Mark 用户名: 密 码: 登 录 ---- 预警一下先,我要用
前朝楚水
2018/04/03
1.4K0
React 全局状态管理的 3 种底层机制
现代前端框架都是基于组件的方式来开发页面。按照逻辑关系把页面划分为不同的组件,分别开发不同的组件,然后把它们一层层组装起来,把根组件传入 ReactDOM.render 或者 vue 的 $mount 方法中,就会遍历整个组件树渲染成对应的 dom。
神说要有光zxg
2021/09/28
1.8K0
react基础--2
react-redux需要配合 redux使用,react-redux可实现 redux与react的连接
切图仔
2022/09/08
1.3K0
React + Redux 组件化方案
React + Redux 组件化方案 在介绍组件化方案之前,先对 react 和 redux 做一个简单介绍。 Why React 理想中的组件化,第一步应该就是组件的标签化, 例如有一个 Head
IMWeb前端团队
2017/12/29
8170
React + Redux 组件化方案
谈谈 React 5种最流行的状态管理库
原文:sourl.cn/F95CrZ,代码仓库地址: https://github.com/dabit3/react-state-5-ways
秋风的笔记
2020/10/27
2.8K0
【React】211- 2019 React Redux 完全指南
https://juejin.im/post/5cac8ccd6fb9a068530111c7
pingan8787
2019/07/23
4.4K0
【React】211- 2019 React Redux 完全指南
06-React状态管理 Redux(工作流程, 核心概念, 求和案例, 异步Action, React-Redux, 多状态管理, 纯函数, 高阶函数, Redux开发者工具)
其实就是一个集中的状态管理技术, 类似于VueX, 以及后端的分布式配置中心, 在前端的文章里提后端,是不是不太好~, 但是能学习这个技术的人, 从简短的一句话中应该就已经简单的了解了这个技术,以及它的使用情况, 我就不过多写概念了, 主要写使用方式
彼岸舞
2022/08/24
2.1K0
06-React状态管理 Redux(工作流程, 核心概念, 求和案例, 异步Action, React-Redux, 多状态管理, 纯函数, 高阶函数, Redux开发者工具)
React/ReactNative 状态管理: redux 如何使用
有同学反馈开发 ReactNative 应用时状态管理不是很明白,接下来几篇文章我们来对比下 React 及 ReactNative 状态管理常用的几种框架的使用和优缺点。
张拭心 shixinzhang
2023/03/27
1.5K0
Redux 包教包会(一):解救 React 状态危机
前端应用的状态管理日益复杂。随着大前端时代的到来,前端愈来愈注重处理逻辑,而不只是专注 UI 层面的改进,而以 React 为代表的前端框架的出现,大大简化了我们编写 UI 界面的复杂度。虽然 React 提供了 State 机制实现状态管理,也有诸如“状态提升”等开发约定,但是这些方案只适用于小型应用,当你的前端应用有多达 10 个以上页面时,如何让应用状态可控、让协作开发高效成为了亟待解决的问题,而 Redux 的出现正是为了解决这些问题而生的!Redux 提出的“数据的唯一真相来源”、单向数据流、“纯函数 Reducers” 大大简化了前端逻辑,使得我们能够以高效、便于协作的方式编写任意复杂的前端应用。本篇教程致力于用简短的文字讲透 Redux,在实战中掌握 Redux 的概念和精髓。
一只图雀
2020/04/07
1.9K0
前端:从状态管理到有限状态机的思考
在使用类似Vue,React框架时,我们一定会使用状态管理吗?这个答案是肯定的。或许我不会主动去使用Vuex, Redux,但我们编写每一个组件的时候就已经在管理状态,Vuex, Redux只是更方便我们进行全局的状态管理。
coder_koala
2021/05/28
2.5K0
前端:从状态管理到有限状态机的思考
React-Redux 100行代码简易版探究原理。(面试热点,React Hook + TypeScript实现)
各位使用react技术栈的小伙伴都不可避免的接触过redux + react-redux的这套组合,众所周知redux是一个非常精简的库,它和react是没有做任何结合的,甚至可以在vue项目中使用。
ssh_晨曦时梦见兮
2020/04/11
2.2K0
React-Redux 100行代码简易版探究原理。(面试热点,React Hook + TypeScript实现)
推荐阅读
相关推荐
各流派 React 状态管理对比和原理实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验