GaussDB WDR报告分析

标题

  • 问题描述
  • 问题现象
  • 告警
  • 业务影响
  • 原因分析
  • 处理方法
    • 步骤 1
    • 步骤 2
    • 步骤 3
    • 步骤 4
    • 步骤 6
    • 步骤 7
    • 步骤 8
    • 步骤9
    • 步骤 10
    • 步骤 11
    • 步骤 12

问题描述

CPU使用率高。

问题现象

出现CPU使用率超过阈值,CPU使用率快速上涨或短时间持续较高水平等现象。

告警

CPU使用率告警。

业务影响

CPU使用率高集群响应变慢。

原因分析

  1. 期间业务压力增大导致。
  2. 出现CPU耗时较多的SQL。

处理方法

步骤 1

查看监控是某个节点的CPU高还是集群整体CPU高,如果是整体CPU高生成集群级别wdr报告,如果是某个节点则生成节点级wdr报告。

步骤 2

首先查看当前已有的wdr报告快照。

select * from snapshot.snapshot order by start_ts desc;

步骤 3

生成wdr报告需要两个snapshot_id,根据需要对比的两个时间段选取对应的snapshot_id,调整输出格式,gsql界面输入:
\a \t \o + 生成文件名(html文件)

步骤 4

如果是要生成节点级的报告则执行:

select generate_wdr_report(snapshot_id1, snapshot_id2,all, ‘node’, 节点名称)

如果要生成集群级别报告则执行

select generate_wdr_report(snapshot_id1, snapshot_id2,all, ‘cluster’)

其中snapshot_id1和snapshot_id2按照时间从小到大的顺序写入上面分析出来的要生成报告的两个id,节点名称可以通过登录到问题节点执行show pgxc_node_name获取。
对应节点级别报告主要关注Top 10 Events by Total Wait Time和SQL ordered by CPU Time部分,集群级别主要关注SQL ordered by CPU Time部分,在wdr报告中搜索即可。
在这里插入图片描述
在这里插入图片描述

步骤 6

CPU使用率较低期间的wdr报告和较高期间的wdr报告个一份,这里已节点级别为例,集群级别只需要按照SQL ordered by CPU Time部分分析,分析方式一样。

步骤 7

Top 10 Events by Total Wait Time部分包含两个快照期间的主要等待事件,可以进行大致分析是否存在大量CPU耗时较高的等待事件例如文件数据读取,快照期间主要等待事件,如果通过对比发现CPU高期间的文件读事件明显变多,则说明此期间SQL执行读取数据上上涨导致的CPU耗时上涨。如果是各项等待事件都有一定幅度上涨则可能是集群压力上涨导致,具体是那一部分SQL则需要分析SQL ordered by CPU Time部分。

步骤 8

对比两份报告SQL ordered by CPU Time部分的CPU Time(us)差异,一般对比前10个即可,这里介绍一下此部分的主要构成。

  • Unique SQL Id:对应unique_sql_id,可以通过此id去数据库查询使用此模板的SQL的其他数据,例如通过summary_statement查询总体语句的调用情况。
  • Node Name:节点名称。
  • User Name:用户名。
  • CPU Time(us):两个快照期间的CPU耗时Calls:两个快照期间的语句调用次数。
  • Min Elapse Time(us):SQL在内核内的最小运行时间,注意这是整体的最小解析时间不是此快照期间的最小。
  • Max Elapse Time(us):SQL在内核内的最大运行时间,注意这是整体的最大解析时间不是此快照期间的最小。
  • Total Elapse Time(us):两个快照期间此语句的SQL在内核内的总运行时间时间。
  • Avg Elapse Time(us):两个快照期间此语句的SQL在内核内的平均运行时间时间。
  • Returned Rows:两个快照期间此语句的SELECT返回的结果集行数。
  • Tuples Read:两个快照期间访问的元组数量。
  • Tuples Affected:两个快照期间Insert/Update/Delete行数。
  • Logical Read:两个快照期间的逻辑读数。
  • Physical Read:两个快照期间的物理读数。
  • Data IO Time(us):两个快照期间IO上的时间花费。
  • Sort Count:两个快照期间的排序执行的次数。
  • Sort Time(us):两个快照期间的排序执行的时间。
  • Sort Mem Used(KB):两个快照期间的排序过程中使用的work memory大小(单位:KB)。
  • Sort Spill Count:两个快照期间的排序过程中,若发生落盘,写文件的次数。
  • Sort Spill Size(KB):两个快照期间的排序过程中,若发生落盘,使用的文件大小(单位:KB)。
  • Hash Count:两个快照期间的hash执行的次数。
  • Hash Time(us):两个快照期间的hash执行的时间(单位:微秒)。
  • Hash Mem Used(KB):两个快照期间的hash过程中使用的work memory大小(单位:KB)。
  • Hash Spill Count:两个快照期间的hash过程中,若发生落盘,写文件的次数。
  • Hash Spill Size(KB):两个快照期间的hash过程中,若发生落盘,使用的文件大小(单位:KB)。
  • SQL Text:这里显示的SQL语句只有一部分,完整的SQL需要点击Unique SQL Id跳转到完整SQL处。

步骤9

如果发现CPU高期间报告的CPU Time(us)前面几个的SQL明显不同且CPU耗时较大,则原因可能为CPU高耗时SQL调用量上涨导致,如果需要分析为什么此SQL的CPU耗时高则可以参考步骤11。
在这里插入图片描述

步骤 10

如果两个报告前10个Unique SQL Id对比几乎相同,此时看SQL对应的CPU耗时和ncalls,如果calls上涨则说明是业务压力增大导致的CPU上涨,如果calls没有上涨,则需要分析为什么同一条SQL在此阶段的CPU耗时上涨,跳转步骤11。

步骤 11

在语句和调用次数没有变化的情况下,如果是查询语句看此SQL模板的Returned Rows和Physical Read,如果数量有明显增长则说明此SQL读写的数据量增大导致的CPU压力上涨,一般有两种情况,部分特殊值的情况下扫描数据量大或者计划发生改变导致扫描数据量变大。如果是写语句则可以看Tuples Affected是否有明显增加,一般读取数据比较耗CPU,如果是语句本身影响的主要围绕数据读取方面进行对比。

步骤 12

如果两个快照的数据几乎相同,可以通过火焰图或者长事务做进一步分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/20670.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis学习(二)线程安全、分布式锁、消息队列

文章目录 优惠券秒杀全局ID生成器优惠券秒杀下单超卖问题一人一单 分布式锁基于Redis的setnx指令实现分布式锁解决锁误删问题基于Lua脚本实现多条指令原子性Redis调用Lua脚本Java中使用Lua脚本 RedissonRedisson快速入门Redisson可重入锁原理Redisson的锁重试和Watchdog机制Red…

Unity物理相关组件——2D关节

一:前言 关节组件用来模拟物体与物体之间的连接关系,必须依赖于刚体组件 二:Hinge Joint 2D 用于实现链条物体、钟摆等物体的模拟 ——Enable Collision:是否开启碰撞 ——Connected Rigid Body:关联的刚体&#xff0…

JVM理论(三)运行时数据区--PC寄存器/虚拟机栈/本地方法栈

运行时数据区(JVM内存结构) JVM内存结构 内存是非常重要的资源,是硬盘和CPU的中间桥梁,承载操作系统和应用程序的实时运行.JVM内存布局规定java在运行过程中内存申请、分配、管理的策略,保证JVM高效稳定运行。不同的JVM对于内存划分和管理机制存在部分差异(如J9和JR…

[数据存储]HDFS的简介、初始化配置与运行

文章目录 HDFS简介HDFS数据存储访问方式HDFS节点HDFS的数据存储原理HDFS元数据(Block块管理)HDFS的数据读写流程HDFS数据写入流程HDFS数据读取流程 启动HDFSHDFS初始化配置${HADOOP_CONF_DIR}/hdfs-site.xml文件系统格式化启动HDFS查看启动状态 HDFS简介…

又是一条慢 SQL 改写,拿捏!

作者分享了一条慢 SQL 分析和优化的过程,总结出切实有效的优化手段。 作者:马文斌 MySQL 爱好者。 本文来源:原创投稿 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 背景 开发同学丢…

※Redis的事务、乐观锁和悲观锁

1.是神魔 在高并发的环境下,多个线程去竞争同一个资源, 比较常见的有高铁抢票系统,商品秒杀系统等,我们需要保证数据正确,同时系统的吞吐也要尽可能高。2.解决方案 1. 一般多线程同步我们就会想到加锁,用…

数据库作业——select查询操作

数据库作业 创建数据库 mysql> create table worker( -> 部门号 int(11) not null, -> 职工号 int(11) primary key not null,-> 工作时间 date not null,-> 工资…

MiniGPT4 在RTX-3090 Ubuntu服务器部署步骤详解

主要参考知乎帖子: MiniGPT-4 本地部署 RTX 3090 - 知乎 MiniGPT-4部署比麻烦,首先需要获取LLaMA权重,并结合Vicuna的bitwise XOR增量文件完成Vicuna模型权重生成,最后准备好预训练的MiniGPT-4进行模型部署。为了便于理解&#…

这3个方法教你录音转文字怎么导出来

在日常生活中,我们有时候可能需要将音频转换为文本,因为这样可以节省我们听的时间,还能让记录更加清楚明了。那么,你是否知道录音转文字怎么导出来?如果你不懂,请接着看我下面介绍的三种方法吧!…

pytorch安装问题【超级简单版】

pytorch安装问题 当前遇到的问题: python3.9无法安装读取coco数据集的 pycocotools-windows,那么需要切换版本到3.6/7/8,但是切换到python 3.6之后,无法安装torchvision和pytorch【在python就叫torch】,显示没有这个版本 pip i…

[RocketMQ] Broker 消息重放服务源码解析 (十三)

构建消息文件ConsumeQueue和IndexFile。 ConsumeQueue: 看作是CommitLog的消息偏移量索引文件, 存储了它所属Topic的消息在Commit Log中的偏移量。消费者拉取消息的时候, 可以从Consume Queue中快速的根据偏移量定位消息在Commit Log中的位置。IndexFile索引文件: 看作是Commi…

UE4 像素流的一些使用技巧

一、测试像素流的三种方法,前提是熟悉官网像素流送那套流程,这里只是讲如何不用打包就能测试的方法 1.第一种方法是vs安装unrealvs扩展,因为安装这个拓展后加可以加命令行参数启动项目https://docs.unrealengine.com/4.26/zh-CN/ProductionP…