GaussDB(DWS)运维利刃:TopSQL工具解析
本文分享自华为云社区《GaussDB(DWS)运维利刃:TopSQL工具解析》,作者:胡辣汤。
在生产环境中,难免会面临查询语句出现异常中断、阻塞时间长等突发问题,如果没能及时记录信息,事后就需要投入更多的人力及时间成本进行问题的定位和解决,有时还无法定位到错误出现的地方。在本期《GaussDB(DWS)运维利刃:TopSQL工具解析》的主题直播中,华为云数仓GaussDB(DWS)调优专家刘坤鹏老师,深入讲解GaussDB(DWS) TopSQL的基本原理、能力及典型应用场景。
一、 什么是TopSQL?
TopSQL是GaussDB(DWS)数据库中内置的一款功能十分强大的性能分析工具。在生产环境中,难免会出现一些突发情况,导致查询语句出现异常中断、阻塞时间长等情况,如果当时没能记录下来,那么事后就要投入更多的人力以及时间成本去对错误进行定位和解决,有时还往往定位不到错误出现的地方。为了解决这样的窘迫的情况,GaussDB(DWS)开发了TopSQL功能,对运行中的语句记录(实时TopSQL),对运行完成的语句进行记录(历史TopSQL)。
TopSQL作为GaussDB(DWS)的性能诊断工具,记录GaussDB(DWS)中各个作业、算子级别的资源使用数据、耗时数据,包括下盘信息、内存、网络、耗时、自诊断告警、基础信息等作业执行的数据。

TopSQL工作原理
二、TopSQL系统表和参数介绍
以GaussDB(DWS) 8.1.3版本为例,推荐TopSQL相关的一些参数。
|
参数 |
解释及用法 |
|
enable_resource_track:on |
资源监控总开关,开启后TopSQL才能发挥作用。 |
|
enable_resource_record:on |
控制实时TopSQL是否做历史TopSQL转储,813版本推荐打开,方便对历史问题做定位分析。 |
|
resource_track_cost:0 |
执行代价超过预值,才会被记录,建议保持默认值0。 |
|
resource_track_duration:1 |
实时TopSQL是否转储到历史TopSQL,默认值为60秒,建议设置为1。 |
|
resource_track_level:query/perf |
语句级TopSQL信息记录到历史TopSQL的系统表中。 |
|
TopSQL_retention_time:30 |
TopSQL老化时间为30秒,建议保持默认值。 |
|
enable_track_record_subsql:按需开启 |
控制子查询是否记录到TopSQL系统表中。 |
TopSQL常用系统表:
• 实时TopSQL:pgxc_wlm_session_statistics
• 历史TopSQL:pgxc_wlm_session_info
TopSQL系统表关键字段:
|
字段 |
字段说明 |
|
username |
用户名 |
|
block_time |
排队时间,辅助定位CCN场景 |
|
Start_time |
语句执行的开始时间 |
|
duration |
语句执行时长,重点关注 |
|
Estimate_memory |
估算内存,复制定位ccn排队或内存问题 |
|
Max_peak_memory |
实际最大使用内存,定位内存不足场景 |
|
Max_spill_size |
下盘大小 |
|
Unique_sql_id |
归一化ID,标志同一语句/同一语句不同入参 |
|
Cpu_skew_percent |
CPU倾斜情况 |
|
warning |
自诊断信息 |
三、TopSQL的3个典型应用场景
1、 实时TopSQL
问题场景:某集群业务反馈某业务SQL偶发执行慢,该集群resource_track_duration设置较大,历史TopSQL中没有记录计划详情,需要定位原因。
处理过程:
1) 系统管理员根据queryid查看等待视图,等待视图部分结果如下:

2)管理员执行explain verbose,得到的执行计划如下

3) 第8层非Stream算子,说明该计划不是正在执行语句的计划,使用实时TopSQL查看实际计划:

2、 历史TopSQL
问题场景:某客户由于内存规格较小,经常出现内存不可用的报错,云上运维人员通过autopilot定期巡检时发现该集群内存周期性冲高,且存在单实例内存使用倾斜的问题,需定位原因。

处理过程:
1) 通过历史TopSQL找到内存占用高的语句
Select * from pgxc_wlm_session_info where start_time > '2023-10-30 10:05' and start_time < '2023-10-30 10:10' order by max_peak_memory desc limit 100;
2) 根据unique_sql_id确认作业的历史执行情况
3、 存储过程子语句
问题场景:某客户在业务中封装了大量的存储过程和匿名块脚本,用于业务系统的调度,随着业务数据越来越多,存储过程和匿名块脚本执行越来越慢,需要对其中的脚本进行优化。示例脚本如下:

处理过程:
1) 查看历史TopSQL,存储过程和匿名块的query_plan字段显示NoPlan;
2) 设置enable_track_record_subsql: on,该参数打开后可以记录存储过程和匿名块中的自语句和执行计划;
3) 重新执行慢的存储过程,根据query_id查看历史TopSQL中各个自语句的执行计划。
四、如何通过TopSQL进行信息统计
1、 常用TopSQL进行业务信息统计
1) 识别stream数量多的语句:select *,(length(query_plan) - length(replace(query_plan, 'Streaming', ''))) / length('Streaming') as stream_count FROM pgxc_wlm_session_info ORDER BY stream_count DESC limit 100;
2) 识别内存占用高的语句:select * from pgxc_wlm_session_info where start_time > 'xxxx-xx-xx' and start_time < 'xxxx-xx-xx' order by max_peak_memory desc limit 100;
3) 识别需要优化的语句:select * from pgxc_wlm_session_info where start_time > 'xxxx-xx-xx' and start_time < 'xxxx-xx-xx' and warning is not null order by duration desc limit 100。
2、 TopSQL使用注意事项
1) 查询时使用start_time做条件,避免全表查询;
2) 查询时使用limit对结果集大小限制,防止结果集过大导致客户端OOM。
本期分享到此结束,更多关于GaussDB(DWS)产品技术解析、数仓产品新特性的介绍,请关注GaussDB(DWS)开发者平台,GaussDB(DWS)开发者平台为开发者们提供最新、最全的信息咨询,包括精品技术文章、最佳实践、直播集锦、热门活动、海量案例、智能机器人。让您学+练+玩一站式体验GaussDB(DWS)。
GaussDB(DWS)开发者平台链接:https://bbs.huaweicloud.com/contents/dws/learning.html
GaussDB(DWS)运维利刃:TopSQL工具解析的更多相关文章
- GaussDB(DWS)运维:导致SQL执行不下推的改写方案
摘要:本文就针对因USING子句的书写方式可能导致MERGE INTO语句的执行不下推的场景,对USING子句的SQL语句进行改写一遍,整个SQL语句可以下推. 本文分享自华为云社区<Gauss ...
- Ansible 运维自动化 ( 配置管理工具 )
背景 出差背景,要搞项目的自动化部署.因为只直接对接生产分发,机器又非常多,这样以往使用的bat只能作为应急方案了,还是得考虑使用专业化的工具来做这个事情! 当下有许多的运维自动化工具( 配置管理 ) ...
- MySQL运维之--xtrabackup工具的原理和使用方法
Xtrabackup工具的介绍 xtrabackup是percona公司开发的一款自由.免费.开源的一款备份工具,他的备份特点就是:支持热备.备份速度快. xtrabackup包含两个重要的工具:in ...
- 运维自动化轻量级工具pssh
1pssh介绍 pssh是python写的可以并发在多台机器上批量执行命令的工具,它的用法可以媲美ansible的一些简单用法,执行起来速度比ansible快它支持文件并行复制,远程命令执行,杀掉远程 ...
- 日常运维--rsync同步工具
rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而 ...
- 运维数据同步工具:rsync,serync,csync,drbd,info(基于文件系统)
Rsync官方站点:http://rsync.samba.org 1. Rsync rsync是一款开源的实现数据全量与增量同步备份的工具 生产环境中使用的场景: 1:一般用于数据异地备份 2:用于 ...
- 【数仓运维实践】关于GaussDB(DWS)单SQL磁盘空间管控
摘要:本文主要讲解数仓运维中遇到单SQL磁盘空间管控问题的解析和方案. 本文分享自华为云社区<GaussDB(DWS)运维 -- 单SQL磁盘空间管控>,作者: 譡里个檔. [问题描述] ...
- 企业级LINUX自动化运维工具Ansible实战课程下载
什么是Ansible? Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量 ...
- 用自动化运维工具解放IT运维
何谓自动化运维,即在最少的人工干预下,结合运用脚本与第三方工具,保证业务系统7*24小时高效稳定运行.这应该是所有业务系统运维终极目标. 我们对运维的要求通常是: 1.事前预警 在故障出现之前,管理人 ...
- 自动化运维工具——ansible安装入门(一)
一.简介 现如今有很多运维自动化的工具,如:Ansible.Puppet.saltStack.Fabric.chef.Cfengine 1. Ansible介绍 Ansible 是由 Cobbler与 ...
随机推荐
- P7031 [NWRRC2016] Anniversary Cake
题目简述 有一块 \(n \times m\) 的长方形蛋糕.蛋糕上有两个蜡烛,分别用 \((x_1,y_1)\) 和 \((x_2,y_2)\) 表示.现在有一把刀要把蛋糕切成两半,请问切入的终点和 ...
- 手撕Vue-编译模板数据
经上一篇编译指令数据后,我们已经可以将指令数据编译成具体需要展示的数据了,上一篇只是编译了指令数据,还没有编译模板数据,这一篇我们就来编译模板数据. 也就是 {{}} 这种模板的形式我们该如何编译,其 ...
- 【Jmeter】Request1输出作为Request2输入-后置处理器
[Jmeter]基础介绍-详细 接上文,继续介绍Jmeter,本文关注点为如何解决上文中提到的第一个问题,即: 需要实现Request1的返回作为Request2的RequestBody或Header ...
- tensorflow语法【tf.concat()详解】
相关文章: [一]tensorflow安装.常用python镜像源.tensorflow 深度学习强化学习教学 [二]tensorflow调试报错.tensorflow 深度学习强化学习教学 [三]t ...
- 【链表】双向链表的介绍和基本操作(C语言实现)【保姆级别详细教学】
双向链表 文章目录 前言 双向链表的基本介绍 一些链表的分类 带头双向循环链表的基本结构 双向链表的实现 结点的定义.头指针的创建 开辟结点接口 初始化头结点接口 打印接口 尾插接口 尾删接口 头插接 ...
- P4103 [HEOI2014] 大工程 题解
题目链接:大工程 先考虑只有一次查询,很显然我们可以暴力树上 dp 处理出答案. 对于每个节点而言,有: 容易看出类似点分治逐个遍历子树计算前面一堆子树对后面子树的贡献思想,我们可以很容易的知道: 对 ...
- go中的 位预算,反码、补码、原码
https://baike.baidu.com/item/%E4%BD%8D%E8%BF%90%E7%AE%97/6888804 首先关于"位运算",看下百度百科就行了. 总结:在 ...
- Nodepad++格式化XML和JSON字符串
(一)格式化XML 1.安装XML Tools 在notepad++中点击菜单栏[插件]-[插件管理]. 在插件管理界面选择[XML Tools],点击[安装]. 2.打开XML文件 在notepad ...
- 如何在windows端安装和配置maven
1.下载maven 从官方下载maven,下载页面:http://maven.apache.org/download.cgi 2.安装maven maven压缩包解压到一个没有中文,空格或其他特殊字符 ...
- IDEA中使用ChatGPT
IDEA中使用ChatGPT 在IDEA中安装ChatGPT插件,可以帮助写基础逻辑代码,提高工作效率和学习效率,有兴趣可以玩一下. 插件名为 Bito. 1. 什么是Bito Bito是一款在Int ...