更新时间:2024-04-18 GMT+08:00
分享

实时TopSQL

系统提供了不同级别的资源监控实时视图用来查询实时TopSQL。资源监控实时视图记录了查询作业运行时的资源使用情况(包括内存、下盘、CPU时间等)以及性能告警信息。

实时视图具体的对外接口如下表所示:

表1 资源监控实时视图

视图级别

节点范围

查询视图

query级别/perf级别

当前CN

GS_WLM_SESSION_STATISTICS

所有CN

PGXC_WLM_SESSION_STATISTICS

operator级别

当前CN

GS_WLM_OPERATOR_STATISTICS

所有CN

PGXC_WLM_OPERATOR_STATISTICS

  • 视图级别取决于资源监控的等级,即参数resource_track_level的配置。
  • perf和operator级别会影响GS_WLM_SESSION_STATISTICS/PGXC_WLM_SESSION_INFO中的query_plan和warning字段的取值,详细内容参见SQL自诊断
  • 对外接口通过不同的前缀(gs与pgxc)来区分单CN查询视图以及集群级别查询视图。普通用户仅支持登录到集群的某个CN查询以gs为前缀的视图。
  • 查询此类实时视图时,因需要获取作业运行实时资源使用情况,会有一定的网络延时。
  • 实例故障时,实时TopSQL视图有可能记录不全。
  • 实时TopSQL中能够记录的SQL语句的规格是:
    • 不记录特殊数据定义语句,如:SET、RESET、SHOW、ALTER SESSION SET、SET CONSTRAINTS语句。
    • 记录数据定义语句,例如:执行CREATE、ALTER、DROP、GRANT、REVOKE和VACUUM语句。
    • 记录数据操作语句,例如:
      • 执行SELECT、INSERT、UPDATE和DELETE语句。
      • 执行explain analyze和explain performance场景。
      • 使用query级别/perf级别视图。
    • 记录函数与存储过程的调用入口语句,当GUC参数enable_track_record_subsql开启的情况下,可记录存储过程的部分内部语句(declare定义语句除外),仅会记录其中下发到DN执行的内部语句,未下发到DN执行的内部语句会被过滤掉;
    • 记录匿名块语句,当GUC参数enable_track_record_subsql开启的情况下,可记录匿名块中的部分内部语句,仅会记录其中下发到DN执行的内部语句,未下发到DN执行的内部语句会被过滤掉。
    • 记录游标语句,当游标没有从缓存中读取数据,而触发语句下发到DN上执行的条件下,该游标语句会被记录,并且会进行语句、执行计划增强,但当游标从缓存中读取数据时,不进行记录;当游标语句在匿名块或者函数中使用且游标从DN上读取较多数据但不完全使用时,因当前架构限制,无法记录该游标在DN上的监控信息。对于With Hold游标,该语法执行逻辑特殊,会在事务提交阶段执行实际查询动作,当语句在该阶段执行报错时,作业的aborted状态无法反馈到TopSQL历史表中。
    • 重分布过程中的作业不统计。
    • JDBC执行的带占位符语句,通常会补齐参数内容,但当参数和原语句合起来长度超过64KB,则不记录参数,或者是轻量化语句直接下发到DN上执行,不记录参数。
    • 从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版本新增GUC参数resource_track_subsql_duration(默认值为180秒),可以通过执行时间过滤需要归档的子语句,用户可以按需调整该值大小。
    • 由于规格限制,对于未下盘的主语句,TopSQL历史表中的记录会有延时,等待下次作业下发时才会显示在TopSQL历史表中。
    • query级别的作业监控和operator的算子监控中的spill_size字段,由于统计维度不同,会有一定差异,query级别监控的是语句实际下盘文件大小,算子监控的是具体算子在逻辑层IO读写的数据量。
    • 当GUC参数enable_stream_operator设置为off状态时,算子执行信息存在显示不准的情况。

前提条件

在上述条件中,enable_resource_track为系统级参数,用于设置是否开启资源监控功能。resource_track_level为session级参数,可以对某个session的资源监控级别进行灵活设置。这两个参数的设置方法如下表:

表2 设置资源监控信息统计级别

enable_resource_track

resource_track_level

query级别信息

算子级别信息

on(default)

none

不统计

不统计

query(default)

统计

不统计

perf

统计

不统计

operator

统计

统计

off

none/query/operator

不统计

不统计

操作步骤

  1. 通过视图gs_session_cpu_statistics查询实时CPU信息。

    1
    SELECT * FROM gs_session_cpu_statistics;
    

  2. 通过视图gs_session_memory_statistics查询实时memory信息。

    1
    SELECT * FROM gs_session_memory_statistics;
    

  3. 通过视图gs_wlm_session_statistics查询当前CN的实时资源。

    1
    SELECT * FROM gs_wlm_session_statistics;
    

  4. 通过视图pgxc_wlm_session_statistics查询所有CN的实时资源。

    1
    SELECT * FROM pgxc_wlm_session_statistics;
    

  5. 通过视图gs_wlm_operator_statistics查询当前CN作业算子执行实时资源信息。

    1
    SELECT * FROM gs_wlm_operator_statistics;
    

  6. 通过视图pgxc_wlm_operator_statistics查询所有CN作业算子执行实时资源信息。

    1
    SELECT * FROM pgxc_wlm_operator_statistics;
    

  7. 通过视图pg_session_wlmstat查询当前用户执行作业正在运行时的负载管理信息。

    1
    SELECT * FROM pg_session_wlmstat;
    

  8. 通过视图pgxc_wlm_workload_records(动态负载功能开启,即enable_dynamic_workload为on时该视图有效)查询当前用户在每个CN上作业执行时的状态信息。

    1
    SELECT * FROM pgxc_wlm_workload_records;
    

分享:

    相关文档

    相关产品