带你走进数仓大集群内幕丨详解关于作业hang及残留问题定位
本文分享自华为云社区《【带你走进DWS大集群内幕】大集群通信:作业hang、残留问题定位》,作者: 雨落天穹丶。
前言:
测试过程中,我们会遇到这样一种情况,我的作业都执行很久了,为啥还不结束,是不是作业hang掉了? 或者说,明明看到CN上的作业都没了,为什么通过全局视图发现DN上还有作业在执行而没有退出,这是不是有问题啊?那么就带着这样的疑问点来阅读本篇分析问题的方式方法,给初学者一点定位思路。
【通信系统视图】
pgxc_comm_send_stream :展示所有DN上的通信库发送流状态。
pgxc_comm_recv_stream :展示所有DN上的通信库接收流状态。
pg_thread_wait_status :通过PG_THREAD_WAIT_STATUS视图可以检测当前实例中工作线程(backend thread)以及辅助线程(auxiliary thread)的阻塞等待情况。
pgxc_thread_wait_status :通过CN节点查看PGXC_THREAD_WAIT_STATUS视图,可以查看集群全局各个节点上所有SQL语句产生的线程之间的调用层次关系,以及各个线程的阻塞等待状态,从而更容易定位进程停止响应问题以及类似现象的原因。
pg_stat_activity :PG_STAT_ACTIVITY视图显示和当前用户查询相关的信息。若有管理员权限或预置角色权限可以显示和所有用户查询相关的信息。
pgxc_stat_activity :PGXC_STAT_ACTIVITY视图显示当前集群下所有CN的当前用户查询相关的信息。
select datname,usename,pid,query_id,query_start,query from pg_stat_activity where state='active' order by query_start;
select coorname,datname,usename,pid,query_id,query_start,query from pgxc_stat_activity where state='active' order by query_start;
【发现问题】1. 集群作业停止一段时间后,发现集群DN还存在比较高的压力CPU,查询活跃会话视图,观察是否存在未执行完的作业,或者只是主备DN数据同步(同步属于正常情况,但持续时间过长,就要分析DN HA catchup 机制是否正常)
例如,如下查询到的结果可以观察到,当前时间19:38,作业已经退出很久了,发现在linux0802集群的6606端口DN上还存在16:49分的作业还在执行,且通过作业分析发现,该作业是简单的 create table as select * 场景 ,正常测试返回结果在10s之内,那当前作业还存在于此DN上处于active执行状态,就显得很不正常。
那我们就针对这条存在的活跃会话进行分析。
【分析问题】通过全局会话等待视图观察这个作业当前的执行状态
获取上图中的执行query的 query_id 通过query_id查询作业执行状态:
select * from pgxc_thread_wait_status where query_id='219269006857675600' order by 1,2;
-- 通过上面查出query_id分析
查询结果发现所有的线程都是在获取stream连接状态,且已经不存在与CN的连接信息
那我们找一个DN节点查看堆栈:选取 dn_6007_6008 lwtid = 2238755
通过cm_ctl query -Cv 查找dn 6007 所在的物理节点环,观察当前主DN是 6007 还是 6008(一般业务连接都是主DN,如果发生主备切换,那么我们查看堆栈就要到6008节点[当前的主DN节点])
连接到到所在物理节点, 用gstack 2238755 (多执行几遍,如果栈内容一直不变,可能就是hang,需要分析位,如果栈一直在变可能是在工作,确实是sql执行慢,可联系开发帮忙确认分析是不是正常堆栈)
【问题初步结论】初步分析堆栈代码属于通信相关,找对应的责任田定位问题。
【发现问题】2. 集群作业停止一段时间后,发现集群CN上还存在未执行完的作业,但是DN上的作业连接已经全部退出
还是通过上面的例子中的查询活跃会话的语句,分析找到对应的query id。
通过线程等待视图查询当前作业执行情况。
select * from pgxc_thread_wait_status where query_id='237283405371509247' order by 1,2;
上图中当前只剩下CN线程,DN线程全部退出,那么这种情况就需要去分析CN对应等待状态中的dn 6301实例上的对应远端线程在干什么
通过通信pooler视图查询对应的remote node 线程号: select * from pg_pooler_status where pid=140069915589224;
然后用线程等待视图查询:select * from pgxc_thread_wait_status where pid = 140704341249976 order by 1,2;
可以按上面第一种类型的查询DN节点操作 访问dn_6301_6302 主DN 所在的物理机器节点 用 gstack 39625 观察堆栈。
【问题初步结论】
初步判断是DN在等主备同步呢,此时DN上的query id清0了,用query_id匹配不到,后续联系对应责任田分析。
带你走进数仓大集群内幕丨详解关于作业hang及残留问题定位的更多相关文章
- t持久化与集群部署开发详解
Quartz.net持久化与集群部署开发详解 序言 我前边有几篇文章有介绍过quartz的基本使用语法与类库.但是他的执行计划都是被写在本地的xml文件中.无法做集群部署,我让它看起来脆弱不堪,那是我 ...
- 深入浅出—Redis集群的相关详解
前言: 这篇文章主要介绍了Redis集群的相关,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值. 注意!要求使用的都是redis3.0以上的版本,因为3.0以上增加了red ...
- hadoop1.2.1+zk-3.4.5+hbase-0.94.1集群安装过程详解
hadoop1.2.1+zk-3.4.5+hbase-0.94.1集群安装过程详解 一,环境: 1,主机规划: 集群中包括3个节点:hadoop01为Master,其余为Salve,节点之间局域网连接 ...
- 高可用,多路冗余GFS2集群文件系统搭建详解
高可用,多路冗余GFS2集群文件系统搭建详解 2014.06 标签:GFS2 multipath 集群文件系统 cmirror 实验拓扑图: 实验原理: 实验目的:通过RHCS集群套件搭建GFS2集群 ...
- [转]Hadoop集群_WordCount运行详解--MapReduce编程模型
Hadoop集群_WordCount运行详解--MapReduce编程模型 下面这篇文章写得非常好,有利于初学mapreduce的入门 http://www.nosqldb.cn/1369099810 ...
- redis cluster 集群 安装 配置 详解
redis cluster 集群 安装 配置 详解 张映 发表于 2015-05-01 分类目录: nosql 标签:cluster, redis, 安装, 配置, 集群 Redis 集群是一个提供在 ...
- Kubernetes集群YAML文件详解
Kubernetes集群YAML文件详解 概述 k8s 集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也就是可以把需要对资源对象操作编辑到YAML 格式文件中,我们把这种 ...
- 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解
引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...
- Linux 高可用(HA)集群之keepalived详解
http://freeloda.blog.51cto.com/2033581/1280962 大纲 一.前言 二.Keepalived 详解 三.环境准备 四.LVS+Keepalived 实现高可用 ...
- Spark技术内幕: Shuffle详解(一)
通过上面一系列文章,我们知道在集群启动时,在Standalone模式下,Worker会向Master注册,使得Master可以感知进而管理整个集群:Master通过借助ZK,可以简单的实现HA:而应用 ...
随机推荐
- 2022-03-24:你被请来给一个要举办高尔夫比赛的树林砍树,树林由一个 m x n 的矩阵表示, 在这个矩阵中: 0 表示障碍,无法触碰 1 表示地面,可以行走 比 1 大的数 表示有树的单元格,
2022-03-24:你被请来给一个要举办高尔夫比赛的树林砍树,树林由一个 m x n 的矩阵表示, 在这个矩阵中: 0 表示障碍,无法触碰 1 表示地面,可以行走 比 1 大的数 表示有树的单元格, ...
- 2021-04-10:给定两个可能有环也可能无环的单链表,头节点head1和head2。请实现一个函数,如果两个链表相交,请返回相交的 第一个节点。如果不相交,返回null。【要求】如果两个链表长度之和为N,时间复杂度请达到O(N),额外空间复杂度 请达到O(1)。
2021-04-10:给定两个可能有环也可能无环的单链表,头节点head1和head2.请实现一个函数,如果两个链表相交,请返回相交的 第一个节点.如果不相交,返回null.[要求]如果两个链表长度之 ...
- SpringBoot限制接口访问频率 - 这些错误千万不能犯
最近在基于SpringBoot做一个面向普通用户的系统,为了保证系统的稳定性,防止被恶意攻击,我想控制用户访问每个接口的频率.为了实现这个功能,可以设计一个annotation,然后借助AOP在调用方 ...
- springboot 自动装配的原理
自动装配原理 问题就是为什么我们直接导入依赖就可以使用了,甚至不用配置web.xml,tomcat等,springboot内部是如何实现的? 主启动类上的注解@SpringBootApplicatio ...
- 代码随想录算法训练营Day14 二叉树
代码随想录算法训练营 代码随想录算法训练营Day14 二叉树|理论基础 递归遍历 基础知识 二叉树都是通过栈来实现的. 二叉树的种类 在我们解题过程中二叉树有两种主要的形式:满二叉树和完全二叉树. 满 ...
- 图灵丛书——GitHub入门
这是一篇关于我个人学习 GitHub 的笔记,主要是记录一些我认为比较重要的知识点,以及一些我认为比较好的学习资料. 学习书籍:GitHub 入门与实践(图灵程序设计丛书) 这本书的目录是这样的 第 ...
- 实用的windows快捷键
Alt+F4 关闭窗口 win+D 显示桌面 win+Tab 切换窗口 Alt+Tab 应用之间的切换 win+E 打开我的电脑 Ctrl+Shift+Esc 打开任务管理器 Home 回到行首 En ...
- 一分钟学一个 Linux 命令 - cat 和 tail
前言 大家好,我是 god23bin.今天我给大家带来的是 Linux 命令系列,每天只需一分钟,记住一个 Linux 命令不成问题.今天,需要你花费两分钟时间,因为我们要介绍的是两个常用的查看文件内 ...
- [ARM 汇编]进阶篇—异常处理与中断—2.4.2 ARM处理器的异常向量表
异常向量表简介 在ARM架构中,异常向量表是一组固定位置的内存地址,它们包含了处理器在遇到异常时需要跳转到的处理程序的入口地址.每个异常类型都有一个对应的向量地址.当异常发生时,处理器会自动跳转到对应 ...
- GPT3的应用领域:机器翻译、文本生成、文本摘要
目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2 核心模块实现 3.3 集成与测试 4. 应用示例与代码实现讲解 4.1 机器翻译 4.2 文 ...