GaussDB for DWS 资源监控核心技术解密: TopSQL作业查询监控介绍

举报
弹头N.SO 发表于 2021/03/05 19:32:13 2021/03/05
【摘要】 在实际的生产环境中,难免会出现一些突发情况,导致查询语句出现异常中断、阻塞时间长等情况,如果当时没能记录下来,那么事后就要投入更多的人力以及时间成本去对错误进行定位和解决,有时还往往定位不到错误出现的地方。为了解决这样的窘迫的情况,继承了TopSQL查询监控功能,对运行中的语句监控(实时TopSQL),对运行完成的语句进行记录(历史TopSQL)。

一、什么是TopSQL?

在实际的生产环境中,难免会出现一些突发情况,导致查询语句出现异常中断、阻塞时间长等情况,如果当时没能记录下来,那么事后就要投入更多的人力以及时间成本去对错误进行定位和解决,有时还往往定位不到错误出现的地方。

为了解决这样的窘迫的情况,继承了TopSQL功能,对运行中的语句监控(实时TopSQL),对运行完成的语句进行记录(历史TopSQL)。


二、怎么实现TopSQL功能

在GaussDB中,通过设定GUC参数,来开启TopSQL功能,由于小功能不同,那么相应的小功能的GUC参数也会有所区别。

大部分都是开关类型的,想要自定义场景就只需要关注传参类型的参数(已经加粗操作),以及参数之间的依赖关系即可。

2.1 TopSQL功能注意事项

  • 当数据库存在故障的时候,TopSQL记录的信息可能不全。
  • TopSQL记录的语句通用规格:
    •  不记录特殊数据定义语句,如:SET、RESET、SHOW、ALTER SESSION SET、SET CONSTRAINTS语句;
    • 记录数据定义语句,例如:执行CREATE、ALTER、DROP、GRANT、REVOKE和VACUUM语句;
    • 记录数据操作语句,例如:
      • 执行SELECT、INSERT、UPDATE和DELETE语句。
      • 执行explain analyze和explain performance场景。
    • 记录子语句,GUC参数enable_track_record_subsql开启的情况下:
      • 记录函数与存储过程的调用入口语句,可记录存储过程的部分内部语句(declare定义语句除外),仅会记录其中下发到DN执行的内部语句,未下发到DN执行的内部语句会被过滤掉; 
      • 记录匿名块语句,可记录匿名块中的部分内部语句,仅会记录其中下发到DN执行的内部语句,未下发到DN执行的内部语句会被过滤掉; 
      • 记录游标语句,当游标并非从缓存中读取数据,而确实触发语句下发到DN上执行的条件下,该游标语句会被记录,并且会进行语句、执行计划增强,但当游标从缓存中读取数据时,不进行记录;当游标语句在匿名块或者函数中使用时,当游标从DN上读取较多数据但不完全使用时,因当前架构限制,无法记录该游标在DN上的监控信息。对于With Hold游标,该语法执行逻辑特殊,会在事务提交阶段执行实际查询动作,当语句在该阶段执行报错时,作业的aborted状态无法反馈到TopSQL历史表中;
    • 重分布过程中的作业不统计; 
    •  JDBC执行的带占位符语句,通常会补齐参数内容,但如果参数和原语句合起来长度超过64KB,则不记录参数,或者如果是轻量化语句,直接下发到DN上执行,不记录参数。 
    • 由于规格限制,对于未下盘的主语句,TopSQL历史表中的记录会有延时,等待下次作业下发时才会显示在TopSQL历史表中。
  • TopSQL在不同版本中需要注意的功能区别:
    • 8.1.3版本 
      • 从8.1.3集群版本开始,query、perf级别TopSQL运行时监控功能已完全不影响查询性能,对当前会话的语句进行资源监控的GUC参数resource_track_cost默认值已修改为0,查询TopSQL实时监控视图时,默认会显示所有正在执行的语句。
      • 从8.1.3集群版本开始,对于存储过程中的子语句监控功能,如果在查询TopSQL实时监控视图的会话中,开启控制子语句记录归档功能的GUC参数enable_track_record_subsql,不论业务语句中是否开启子语句监控开关,查询TopSQL实时监控视图的结果都能看到执行语句的子语句运行信息。
      • 关于存储过程中子语句的监控功能即enable_track_record_subsql,8.1.3集群版本中建议不要全面开启,由于没有按时间过滤子语句的功能,全面开启可能会记录过多子语句,导致归档的监控表占用大量磁盘空间;8.1.3集群版本建议仅用于查询实时监控信息,或对个别存储过程业务做定位分析时,仅开启对应会话中的参数。
    • 8.2.1 版本
      • 8.2.1版本新增GUC参数resource_track_subsql_duration(默认值为180秒),可以通过执行时间过滤需要归档的子语句,用户可以按需调整该值大小。
    • 8.2.1.200 分支版本
      • 新增operator_realtime级别TopSQL运行时监控,提供算子级实时监控的能力,开启此级别的监控可以查询语句的执行计划以及具体执行信息,查询TopSQL算子级实时监控视图时,默认会显示所有正在执行的语句。
      • 暂时不支持显示存储过程、游标场景、CN轻量化的算子级实时监控信息。
      • 由于查询所有语句的信息对于CN内存压力较大,为了不影响作业性能,用户可根据需求使用pg_stat_get_wlm_realtime_operator_info(queryid) 通过queryid查询单独作业的执行算子信息。
      • 该版本暂不支持算子级别的历史信息查询;
      • 由于算子执行速度较快的原因,对于算子信息的显示会有一定滞后性。
      •  query级别的作业监控和operator的算子监控中的spill_size字段,由于统计维度不同,会有一定差异,query级别监控监控的语句实际下盘文件大小,算子监控的是具体算子在逻辑层IO读写的数据量。
      • 当GUC参数enable_stream_operator设置为off状态时,算子执行信息存在显示不准的情况。

2.2 公共GUC参数

  • use_workload_manager
    • 是否开启资源管理功能,系统级别参数,需在CN和DN同时应用;
  • enable_resource_track
    • 是否开启资源实时监控功能,为系统级别参数,需在CN和DN同时应用;
  • resource_track_level
    • 当前会话的资源监控的等级。该参数只有当参数enable_resource_track为on时才有效,可以session级别或者数据库级别设置;
  • enable_track_record_subsql
    • 控制是否记录存储过程、匿名块内部语句

开启TopSQL功能必须要确保 (下列参数为开启TopSQL功能的必要条件)

  • user_workload_manager = on
  • enable_resource_track = on
  • resource_track_level = query / perf / operator 
    • 若是8.2.1.200版本,新增一个枚举参数为operator_realtime

2.4 实时TopSQL

  • resource_track_cost : 对当前会话的语句进行资源监控的最小执行代价。该参数只有当参数enable_resource_track为on时才有效。
    • 实时TopSQL记录的作业满足:优化器估算的执行代价大于或等于resource_track_cost取值。

2.5 历史TopSQL

  • enable_resource_record

    • 是否开启资源监控记录归档功能.
  • resource_track_duration

    • 资源监控实时视图中记录语句执行结束后进行历史信息转存的最小执行时间;
    • 默认值为60s ;
  • resource_track_subsql_duration
    • 当存储过程中子语句执行完成时,其执行时间大于此参数设置值时,作业信息会转储
      到TopSQL归档表中。该参数只有当enable_track_record_subsql为on时生效。
    • 默认值为180s ;

三、怎么查看TopSQL记录的信息?

了解了怎么开启以及怎么自定义TopSQL功能,那么接下来需要了解如何查看TopSQL记录的相应语句信息,本节整理了TopSQL功能的全部查询视图。

由于视图个数众多,笔者已经按照自己的经验对常用视图进行标注,其他的作为了解即可。

视图按照记录信息的节点数,分为Query级别以及Operator级别,而这两种级别的决定性因素,则是在第二节中GUC参数中的resource_track_level参数,具体的对应信息如下图所示。

注意: pgxc开头的视图为算子级别视图,只有系统管理员才能访问。

3.1 实时TopSQL

  • Query级别
    • gs_wlm_session_statistics:该视图显示当前用户在当前CN节点正在执行的作业的负载管理记录
    • pgxc_wlm_session_statistics:所有CN上正在执行的作业的负载管理信息。
  • 算子级别
    • gs_wlm_operator_statistics:当前用户正在执行的作业的算子相关信息。
    • pgxc_wlm_operator_statistics:所有CN上正在执行作业的算子信息。
  • gs_session_cpu_statistics:显示和当前用户执行复杂作业正在运行时的负载管理CPU使用的信息
  • gs_session_memory_statistics:显示和当前用户执行复杂作业正在运行时的负载管理内存使用的信息。
  • pg_session_wlmstat:显示和当前用户执行作业正在运行时的负载管理相关信息
  • pgxc_wlm_workload_records:显示当前用户在每个CN上执行作业时在CN上的状态信息,且仅在动态负载功能开启时,即enable_dynamic_workload=on时有效。

3.2 历史TopSQL

  • Query级别
    • 当前CN
      • gs_wlm_session_history:当前用户在当前CN上执行作业结束后的负载管理记录。
      • gs_wlm_session_info:CN执行作业结束后的负载管理记录。
    • 所有CN
      • pgxc_wlm_session_history:在所有CN上执行作业结束后的负载管理记录。
      • pgxc_wlm_session_info:所有CN上执行作业结束后的负载管理记录。
  • 算子级别
    • 当前CN
      • gs_wlm_operator_history:当前用户在当前CN上执行作业结束后的算子的相关记录。
      • gs_wlm_operator_info:显示执行作业结束后的算子相关的记录。
    • 所有CN
      • pgxc_wlm_operator_history:所有CN上执行作业结束时的算子信息。
      • pgxc_wlm_operator_info:在所有CN上执行作业结束时的算子信息。

四、怎么在云上环境使用查询监控

查询功能位置为:集群-监控面板(右上角)-监控-查询监控。
查询监控功能可以查看到全部的查询信息,实时查询对应为实时TopSQL,历史查询对应为历史TopSQL。

image.png

对查询到显示的字段进行自定义
image.png

查看某个查询的详细信息(点击查询ID)
包含实时资源消耗以及历史资源消耗
image.png

历史资源消耗
image.png

查询计划,以及SQL语句
image.png

历史查询监控

image.png

可以根据时间对历史查询进行筛选

image.png

image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。