摘要:现网在使用动态负载管理的时候,经常出现很多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. 数仓1.4 |业务数仓搭建| 拉链表| Presto

    电商业务及数据结构 SKU库存量,剩余多少SPU商品聚集的最小单位,,,这类商品的抽象,提取公共的内容 订单表:周期性状态变化(order_info) id 订单编号 total_amount 订单金 ...

  2. 数仓1.1 分层| ODS& DWD层

    数仓分层 ODS:Operation Data Store原始数据 DWD(数据清洗/DWI) data warehouse detail数据明细详情,去除空值,脏数据,超过极限范围的明细解析具体表 ...

  3. 在HUE中将文本格式的数据导入hive数仓中

    今天有一个需求需要将一份文档形式的hft与fdd的城市关系关系的数据导入到hive数仓中,之前没有在hue中进行这项操作(上家都是通过xshell登录堡垒机直接连服务器进行操作的),特此记录一下. - ...

  4. 使用Oozie中workflow的定时任务重跑hive数仓表的历史分期调度

    在数仓和BI系统的开发和使用过程中会经常出现需要重跑数仓中某些或一段时间内的分区数据,原因可能是:1.数据统计和计算逻辑/口径调整,2.发现之前的埋点数据收集出现错误或者埋点出现错误,3.业务数据库出 ...

  5. Hive 数仓中常见的日期转换操作

    (1)Hive 数仓中一些常用的dt与日期的转换操作 下面总结了自己工作中经常用到的一些日期转换,这类日期转换经常用于报表的时间粒度和统计周期的控制中 日期变换: (1)dt转日期 to_date(f ...

  6. 【云+社区极客说】新一代大数据技术:构建PB级云端数仓实践

    本文来自腾讯云技术沙龙,本次沙龙主题为构建PB级云端数仓实践 在现代社会中,随着4G和光纤网络的普及.智能终端更清晰的摄像头和更灵敏的传感器.物联网设备入网等等而产生的数据,导致了PB级储存的需求加大 ...

  7. HAWQ取代传统数仓实践(十九)——OLAP

    一.OLAP简介 1. 概念 OLAP是英文是On-Line Analytical Processing的缩写,意为联机分析处理.此概念最早由关系数据库之父E.F.Codd于1993年提出.OLAP允 ...

  8. HAWQ取代传统数仓实践(十六)——事实表技术之迟到的事实

    一.迟到的事实简介 数据仓库通常建立于一种理想的假设情况下,这就是数据仓库的度量(事实记录)与度量的环境(维度记录)同时出现在数据仓库中.当同时拥有事实记录和正确的当前维度行时,就能够从容地首先维护维 ...

  9. HAWQ取代传统数仓实践(十三)——事实表技术之周期快照

    一.周期快照简介 周期快照事实表中的每行汇总了发生在某一标准周期,如一天.一周或一月的多个度量.其粒度是周期性的时间段,而不是单个事务.周期快照事实表通常包含许多数据的总计,因为任何与事实表时间范围一 ...

  10. CarbonData:大数据融合数仓新一代引擎

    [摘要] CarbonData将存储和计算逻辑分离,通过索引技术让存储和计算物理上更接近,提升CPU和IO效率,实现超高性能的大数据分析.以CarbonData为融合数仓的大数据解决方案,为金融转型打 ...

随机推荐

  1. LNOI 2023 游记

    Day -1 持续性的精神状态不太好,分明睡觉起床时间都没变,但白天就是非常非常困,为什么呢. 补不动任何题,脑子完全不转...... Day 0 13:30 才被家长叫醒,四点左右到了开发区还是好困 ...

  2. CF1854E Games Bundles 题解

    乱搞题 设个 \(dp[i]\) 表示和为 \(i\) 的子序列个数,那么转移是容易的, \(dp[j]+=dp[j-i]\) ,然后就判下 \(dp[60]+dp[60-i]\) 是否大于 \(m\ ...

  3. "拍牌神器"是怎样炼成的(二)--- 键鼠模拟之AutoIt

    不同于上一篇的WinAPI方法,这次让我们来看另一个更简单.有效的键鼠模拟方案,即通过COM组件AutoItX实现键鼠模拟. AutoIt AutoIt是一个免费软件,它使用一种类似BASIC的脚本语 ...

  4. mysql--基础管理

    1.docker环境登录mysql PS C:\WINDOWS\system32> docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS P ...

  5. Java八股面试整理(4)

    34.遇到过异常吗,如何处理? 在Java中,可以按照如下三个步骤处理异常: 捕获异常 将业务代码包裹在try块内部,当业务代码中发生任何异常时,系统都会为此异常创建一个异常对象.创建异常对象之后,J ...

  6. Java数组最常用操作方法(Arrays类)

    最近在写代码的过程中发现我们很多地方都会处理数组,有时只是模糊的记得有API可以调用,每次都查文档很是费事儿,适当的总结希望提高开发速度 一.申明数组 数组的申明十分简单也十分的基础,注意第三种申明方 ...

  7. 从0到1,手把手带你开发截图工具ScreenCap------003实现最小化程序到托盘运行

    ScreenCap---Version:003 说明 上一篇:实现默认位置设置 为了方便截图干净,实现最小化程序到托盘运行,简洁,勿扰 实现最小化程序到托盘运行 实现托盘菜单功能 实现回显主窗体 实现 ...

  8. Spring系列:基于Spring-AOP和Spring-Aspects实现AOP切面编程

    目录 一.概念及相关术语 概念 相关术语 ①横切关注点 ②通知(增强) ③切面 ④目标 ⑤代理 ⑥连接点 ⑦切入点 作用 二.基于注解的AOP 技术说明 准备工作 创建切面类并配置 各种通知 切入点表 ...

  9. Linux配置成代理服务器

    简介: 代理服务器(Proxy Server)是一种位于计算机网络中的中间服务器,它充当了客户端和目标服务器之间的中介,用于转发客户端请求并获取目标服务器的响应.代理服务器的主要功能包括以下几点: 什 ...

  10. EF Core助力信创国产数据库

    前言 国产数据库作为国产化替代的重要环节,在我国信创产业政策的指引下实现加速发展,我们国产数据库已进入百花齐放的快速发展期,相信接触到涉及到政府类等项目的童鞋尤为了解,与此同时我们有一部分也在使用各种 ...