数仓出现“wait in ccn queue”的时候,怎么迅速定位处理?
摘要:现网在使用动态负载管理的时候,经常出现很多wait in ccn的情况,大家处理起来就会认为是hung住或者怎么着了,很着急,但wait ccn其实就是一个等待资源的状态,在此总结一个ccn问题处理的博文,ccn的问题都可以通过此贴处理。
本文分享自华为云社区《GaussDB(DWS) wait in ccn queue的时候,怎么迅速定位处理?》,作者:Malick 。
前言
现网在使用动态负载管理的时候,经常出现很多wait in ccn的情况,大家处理起来就会认为是hung住或者怎么着了,很着急,但wait ccn其实就是一个等待资源的状态,在此总结一个ccn问题处理的博文,ccn的问题都可以通过此贴处理。
背景知识:
- 哪个是ccn:
连接环境,
source 环境变量
source /opt/huawei/Bigdata/mppdb/.mppdbgs_profile
执行:
cm_ctl query -Cv | grep Cen -A 4
结果如下:
5003就是集群的ccn。
ccn是什么:ccn作为集群并发控制大脑,所有复杂作业都会到ccn去申请资源,申请到资源的语句才能下发。复杂语句都会在ccn统一记录。
视图解释:
- pg_stat_get_workload_struct_info();
- totalsize代表ccn总体能分配的内存,totalsize:即最大动态内存;freesize_limit即最大可用于ccn分配的内存,为最大动态内存的80%。freesize代表当前剩余内存。
- 只需要关注图中的central waiting/running number(global的可以不用关注,属于另一个数据结构,和central waiting是重复信息。)。每一行代表一个语句。running代表语句正在运行,waiting代表语句正在排队。queryId代表语句的线程号,对应pg/pgxc_thread_wait_status中的lwtid、pg_sessiion_wlmstat中的processid。
- pg_session_wlmstat/pgxc_session_wlmstat();
步骤一、判断问题场景
- 连接ccn查询以下语句, 判断问题场景:
第一步,查询pgxc_stat_activity,判断是否语句大量在wait ccn。或者某个资源池的语句都在wait ccn。
- 查询pg/pgxc_session_wlmstat,判断是否所有复杂语句都在排队。或者同一队列的语句都在排队。
第一步,连接 ccn节点,查询
select * from pg_stat_get_workload_struct_info();
第二步,查询pgxc_session_wlmstat();
select threadid,processid,usename,attribute,status,enqueue,statement_mem,active_points,control_group,resource_pool,substring(query,position('explain' in query),20) as subquery from pg_session_wlmstat order by status,attribute,usename,subquery,resource_pool;
根据以下场景判断使用后续哪种处理办法:
1)如果workload视图中有个别语句处于Running状态,并且running的语句占用内存很大, 占据freesize,大量语句处于waiting状态,那么基本可以确定走问题处理场景一。
2)如果是有workload视图中有running状态的语句,但是实际上pgxc_stat_activity或者pg_session_wlmstat视图中只有waiting状态的语句,并且workload视图中,存在两条或者多条语句的qid.queryId的值相同。那么基本确定走问题处理场景二。
3)如果所有语句都在waiting状态,没有running状态的语句,那么基本确定走处理场景三。
处理场景一 大内存语句导致问题
第一步 找到workload视图中占用内存过大的语句。
如上图:总共可用内存为1638MB,目前正在运行的一个语句占用内存为1048MB,剩余内存freesize=590MB
此时,其余语句内存估算大小都是600MB,因此内存不足全都无法下发下去,只有等到该1048的语句结束,内存释放才能恢复正常。
第二步 根据语句对应的qid.queryId,找到语句的pid。如上图为9145
select coorname,pid,usename,substr(query,0,30) from pgxc_stat_activity a,pgxc_thread_wait_status b where a.pid = b.tid and b.lwtid = $qid.query_id;
第三步 根据pid和cn,查杀大内存语句。释放内存后即可恢复。
处理场景二 hash残留或者其他语句残留问题
第一步 确认有问题的资源池上的并发配置:
select * from pg_resource_pool;
第二步 如果只是达到了资源池并发上限,例如,资源池并发设置为10,残留的running语句数量是10,因为并发达到上限,语句都处于等待状态,那么调整队列并发为-1,不限制之后,等待并发的语句即可下发下去。
修改办法,以son_pool为例:
alter resource pool son_pool with(active_statements=-1);
第三步 清理掉问题语句(连接不断开,线程不释放,残留信息不会自动清理)
备注:清理已经失效的语句信息,是根据/proc/processed是否还存在进行判断,如不存在,则清理,如一直占有该连接,则不会释放线程。残留也不会自动清理。
- 问题语句的判定:
在workload视图中qid.queryId重复的语句便是问题语句,问题线程,重复两条,可能其中一条是正常的,另一条是残留的。也可能都是有问题的,但是终究实际上只有一个活跃的语句在排队或者执行。
2)清理问题语句方法,根据上述1)中提到的重复的qid.queryId,找到问题语句:
select coorname,pid,usename,substr(query,0,30) from pgxc_stat_activity a,pgxc_thread_wait_status b where a.pid = b.tid and b.lwtid = $qid.query_id;
第三步 根据pid和cn,使用pg_terminate_backend(pid)查杀残留语句。释放并发以及内存资源之后恢复。
处理场景三 长跳转锁问题
第一步 确认问题
打堆栈
gstack $ccn_pid > ccnStack.log
grep grep pthread_mutex_lock ccnStack.log
如有类似如下结果,则确认该问题
第二步 应急处理
处理方法:
kill -9 ccn_pid
数仓出现“wait in ccn queue”的时候,怎么迅速定位处理?的更多相关文章
- 数仓1.4 |业务数仓搭建| 拉链表| Presto
电商业务及数据结构 SKU库存量,剩余多少SPU商品聚集的最小单位,,,这类商品的抽象,提取公共的内容 订单表:周期性状态变化(order_info) id 订单编号 total_amount 订单金 ...
- 数仓1.1 分层| ODS& DWD层
数仓分层 ODS:Operation Data Store原始数据 DWD(数据清洗/DWI) data warehouse detail数据明细详情,去除空值,脏数据,超过极限范围的明细解析具体表 ...
- 在HUE中将文本格式的数据导入hive数仓中
今天有一个需求需要将一份文档形式的hft与fdd的城市关系关系的数据导入到hive数仓中,之前没有在hue中进行这项操作(上家都是通过xshell登录堡垒机直接连服务器进行操作的),特此记录一下. - ...
- 使用Oozie中workflow的定时任务重跑hive数仓表的历史分期调度
在数仓和BI系统的开发和使用过程中会经常出现需要重跑数仓中某些或一段时间内的分区数据,原因可能是:1.数据统计和计算逻辑/口径调整,2.发现之前的埋点数据收集出现错误或者埋点出现错误,3.业务数据库出 ...
- Hive 数仓中常见的日期转换操作
(1)Hive 数仓中一些常用的dt与日期的转换操作 下面总结了自己工作中经常用到的一些日期转换,这类日期转换经常用于报表的时间粒度和统计周期的控制中 日期变换: (1)dt转日期 to_date(f ...
- 【云+社区极客说】新一代大数据技术:构建PB级云端数仓实践
本文来自腾讯云技术沙龙,本次沙龙主题为构建PB级云端数仓实践 在现代社会中,随着4G和光纤网络的普及.智能终端更清晰的摄像头和更灵敏的传感器.物联网设备入网等等而产生的数据,导致了PB级储存的需求加大 ...
- HAWQ取代传统数仓实践(十九)——OLAP
一.OLAP简介 1. 概念 OLAP是英文是On-Line Analytical Processing的缩写,意为联机分析处理.此概念最早由关系数据库之父E.F.Codd于1993年提出.OLAP允 ...
- HAWQ取代传统数仓实践(十六)——事实表技术之迟到的事实
一.迟到的事实简介 数据仓库通常建立于一种理想的假设情况下,这就是数据仓库的度量(事实记录)与度量的环境(维度记录)同时出现在数据仓库中.当同时拥有事实记录和正确的当前维度行时,就能够从容地首先维护维 ...
- HAWQ取代传统数仓实践(十三)——事实表技术之周期快照
一.周期快照简介 周期快照事实表中的每行汇总了发生在某一标准周期,如一天.一周或一月的多个度量.其粒度是周期性的时间段,而不是单个事务.周期快照事实表通常包含许多数据的总计,因为任何与事实表时间范围一 ...
- CarbonData:大数据融合数仓新一代引擎
[摘要] CarbonData将存储和计算逻辑分离,通过索引技术让存储和计算物理上更接近,提升CPU和IO效率,实现超高性能的大数据分析.以CarbonData为融合数仓的大数据解决方案,为金融转型打 ...
随机推荐
- U盘插入过手机后再拔出来,windows无法识别的解决办法
win键+X,设备管理器. 找到"通用串行总线控制器",大容量USB设备,右键,卸载设备. 拔出U盘,再插入U盘. 就好了. 很明显,U盘插入手机,然后设置里点弹出后再拔,这是很规 ...
- 再见,Spring!你好,Solon!
Solon 是什么框架? Java 生态级应用开发框架.从零开始构建,有自己的标准规范与开放生态(历时五年,具备全球第二级别的生态规模).与其他框架相比,解决了两个重要的痛点:启动慢,费内存. 解决痛 ...
- JUC并发编程学习笔记(四)8锁现象
8锁现象 八锁->就是关于锁的八个问题 锁是什么,如何判断锁的是谁 对象.class模板 深刻理解锁 锁的东西无外乎就两样:1.同步方法的调用者,2.Class模板. 同一个锁中,只有当前线程资 ...
- JUC并发编程学习笔记(九)阻塞队列
阻塞队列 阻塞 队列 队列的特性:FIFO(fist inpupt fist output)先进先出 不得不阻塞的情况 什么情况下会使用阻塞队列:多线程并发处理.线程池 学会使用队列 添加.移除 四组 ...
- Kubernetes 漫游:理解 ConfigMap
安装说明 通过 docker desktop 可以安装适用于单机和开发环境单机版的 K8S,如果 docker desktop 无法启动 Kubernates 通过以下方式解决: 一:添加国内镜像源 ...
- 2023-11-18:用go语言,如果一个正方形矩阵上下对称并且左右对称,对称的意思是互为镜像, 那么称这个正方形矩阵叫做神奇矩阵。 比如 : 1 5 5 1 6 3 3 6 6 3 3 6 1 5
2023-11-18:用go语言,如果一个正方形矩阵上下对称并且左右对称,对称的意思是互为镜像, 那么称这个正方形矩阵叫做神奇矩阵. 比如 : 1 5 5 1 6 3 3 6 6 3 3 6 1 5 ...
- nmap命令说明
目录 主机发现 扫描技术 端口规格和扫描顺序 服务/版本检测 脚本扫描 操作系统检测 时间和性能: 防火墙/IDS的逃避和欺骗 输出 杂项 平时看到别人的nmap命令都是一大串,根本看不懂为什么,自己 ...
- 主界面(零基础适合小白)基础javaweb前端项目实战【包含增删改查,mysql】三
首先编写sp文件(index.jsp) <%@ page contentType="text/html;charset=UTF-8" language="java& ...
- 接收json数据
1.导入坐标: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId& ...
- C#设计模式之享元模式(Flyweight)
using System; using System.Collections; public class Client { public static void Main(string[] args) ...