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 相关的一些参数。
TopSQL 常用系统表:
• 实时 TopSQL:pgxc_wlm_session_statistics
• 历史 TopSQL:pgxc_wlm_session_info
TopSQL 系统表关键字段:
三、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。
文章转载自:华为云开发者联盟
评论