GaussDB(DWS) 资源管理 TopSQL 简析
1. TopSQL 简介
TopSQL 是记录SQL执行过程中,资源使用的详细信息。分为实时的TopSQL、历史TopSQL。详细信息如下表
名称 | 类型 | 描述 |
---|---|---|
datid | oid | 连接后端的数据OID。 |
dbname | name | 连接后端的数据库名称。 |
schemaname | text | 模式的名字。 |
nodename | text | 语句执行的CN节点名称。 |
username | name | 连接到后端的用户名。 |
application_name | text | 连接到后端的应用名。 |
client_addr | inet |
连接到后端的客户端的IP地址。 如果此字段是null,它表明通过服务器机器上UNIX套接字连接客户端或者这是内部进程,如autovacuum。
|
client_hostname | text |
客户端的主机名,这个字段是通过client_addr的反向DNS查找得到。这个字段只有在启动log_hostname且使用IP连接时才非空。
|
client_port | integer |
客户端用于与后端通讯的TCP端口号,如果使用Unix套接字,则为-1。
|
query_band | text |
用于标示作业类型,可通过GUC参数query_band进行设置,默认为空字符串。
|
pid | bigint | 后端线程ID。 |
block_time | bigint | 语句执行前的阻塞时间,单位ms。 |
start_time | timestamp with time zone | 语句执行的开始时间。 |
duration | bigint | 语句已经执行的时间,单位ms。 |
estimate_total_time | bigint | 语句执行预估总时间,单位ms。 |
estimate_left_time | bigint | 语句执行预估剩余时间,单位ms。 |
enqueue | text | 工作负载管理资源状态。 |
resource_pool | name | 用户使用的资源池。 |
control_group | text | 语句所使用的Cgroup。 |
estimate_memory | integer | 语句预估使用内存,单位MB。该字段只有当GUC参数enable_dynamic_workload为on时才有效。 |
min_peak_memory | integer | 语句在所有DN上的最小内存峰值,单位MB。 |
max_peak_memory | integer | 语句在所有DN上的最大内存峰值,单位MB。 |
average_peak_memory | integer | 语句执行过程中的内存使用平均值,单位MB。 |
memory_skew_percent | integer | 语句在各DN间的内存使用倾斜率。 |
spill_info | text |
语句在所有DN上的下盘信息:
None:所有DN均未下盘。 All: 所有DN均下盘。 |
min_spill_size | integer | 若发生下盘,所有DN上下盘的最小数据量,单位MB,默认为0。 |
max_spill_size | integer | 若发生下盘,所有DN上下盘的最大数据量,单位MB,默认为0。 |
average_spill_size | integer | 若发生下盘,所有DN上下盘的平均数据量,单位MB,默认为0。 |
spill_skew_percent | integer | 若发生下盘,DN间下盘倾斜率。 |
min_dn_time | bigint | 语句在所有DN上的最小执行时间,单位ms。 |
max_dn_time | bigint | 语句在所有DN上的最大执行时间,单位ms。 |
average_dn_time | bigint | 语句在所有DN上的平均执行时间,单位ms。 |
dntime_skew_percent | bigint | 语句在各DN间的执行时间倾斜率。 |
min_cpu_time | bigint | 语句在所有DN上的最小CPU时间,单位ms。 |
max_cpu_time | bigint | 语句在所有DN上的最大CPU时间,单位ms。 |
total_cpu_time | bigint | 语句在所有DN上的CPU总时间,单位ms。 |
cpu_skew_percent | integer | 语句在各DN间的CPU时间倾斜率。 |
min_peak_iops | integer | 语句在所有DN上的每秒最小IO峰值(列存单位是次/s,行存单位是万次/s)。 |
max_peak_iops | integer | 语句在所有DN上的每秒最大IO峰值(列存单位是次/s,行存单位是万次/s)。 |
average_peak_iops | integer | 语句在所有DN上的每秒平均IO峰值(列存单位是次/s,行存单位是万次/s)。 |
iops_skew_percent | integer | 语句在DN间的IO倾斜率。 |
warning | text |
主要显示如下几类告警信息以及SQL自诊断调优相关告警:
1. Spill file size large than 256MB 2. Broadcast size large than 100MB 3. Early spill 4. Spill times is greater than 3 5. Spill on memory adaptive 6. Hash table conflict |
queryid | bigint | 语句执行使用的内部query id。 |
query | text | 正在执行的语句。 |
query_plan | text | 语句的执行计划。 |
node_group | text | 语句所属用户对应的逻辑集群。 |
2. 实时TopSQL
系统提供了query级别和算子级别的资源监控实时视图用来查询实时TopSQL。资源监控实时视图记录了查询作业运行时的资源使用情况(包括内存、下盘、CPU时间、IO等)以及性能告警信息。
实时视图具体的对外接口如下表所示:
视图级别 | 节点范围 | 查询视图 |
---|---|---|
Query级别 | 当前CN | gs_wlm_session_statistics |
所有CN | pgxc_wlm_session_statistics | |
算子级别 | 当前CN | gs_wlm_operator_statistics |
所有CN | pgxc_wlm_operator_statistics |
2.1 开启条件
● GUC参数use_workload_manager为on (默认为on)。
● GUC参数enable_resource_track为on (默认为on)。
● GUC参数resource_track_level为query或operator(默认为query)。
● 监控作业类型为:
– 优化器估算的执行代价大于或等于resource_track_cost的取值的作业。
– 增删改查,包括使用explain analyze和explain performance来执行的场景。
query级别视图还额外支持create table as语法。
– 重分布过程中的作业不统计。
● Cgroups功能正常加载,可通过gs_cgroup -P查看控制组信息。
在上述条件中,
use_workload_manager为系统级参数,是否开启资源管理功能。
enable_resource_track为系统级参数,用于设置是否开启资源监控功能。
resource_track_level为session级参数,可以对某个session的资源监控级别进行
灵活设置。这两个参数的设置方法如下表:
enable_resource_track | resource_track_level | query级别信息 | 算子级别信息 |
---|---|---|---|
on(default) | none | 不统计 | 不统计 |
on(default) | query(default) | 统计 | 不统计 |
on(default) | operator | 统计 | 统计 |
off | none/query/operator | 不统计 | 不统计 |
2.2 视图大小控制
由GUC参数session_statistics_memory控制。
参数说明:设置实时查询视图的内存大小。
参数类型:SIGHUP
取值范围:整型,5MB ~ max_process_memory的50%。
默认值:5MB
3. 历史TopSQL
系统提供了query级别和算子级别的资源监控历史视图用例查询历史TopSQL。资源监控历史视图记录了查询作业运行结束时的资源使用情况(包括内存、下盘、CPU时间、IO等)和运行状态信息(包括报错、终止、异常等)以及性能告警信息。但对于由于FATAL、PANIC错误导致查询异常结束时,状态信息列只显示aborted,无法记录详细异常信息。特别的,对于查询解析,优化阶段的状态信息则无法监控。
历史视图具体的对外接口如下表所示:
视图级别 | 节点范围 | 查询视图 | |
---|---|---|---|
Query级别 | 当前CN | 历史(Database Manager接口) | gs_wlm_session_history |
历史(内部转储接口) | gs_wlm_session_info | ||
所有CN | 历史(Database Manager接口) | pgxc_wlm_session_history | |
历史(内部转储接口) | pgxc_wlm_session_info | ||
算子级别 | 当前CN | 历史(Database Manager接口) | gs_wlm_operator_history |
历史(内部转储接口) | gs_wlm_operator_info | ||
所有CN | 历史(Database Manager接口) | pgxc_wlm_operator_history | |
历史(内部转储接口) | pgxc_wlm_operator_info |
3.1 开启条件
● GUC参数use_workload_manager为on (默认为on)。
● GUC参数enable_resource_track为on (默认为on)。
● GUC参数resource_track_level为query或operator(默认为query)。
● GUC参数enable_resource_record为on(默认为off)。
● GUC参数resource_track_duration小于作业执行时间(默认为60s)。
● 监控作业类型为:
– 资源监控实时视图中记录的作业结束时的执行时间大于或等于resource_track_duration的作业。
– 优化器估算的执行代价大于或等于resource_track_cost的取值的作业。
● Cgroups功能正常加载,可通过gs_cgroup -P查看控制组信息。
● 该功能会引起存储空间膨胀及轻微性能影响,不建议生成系统默认使用。
3.2 视图大小控制
由GUC参数session_history_memory控制。
参数说明:设置历史查询视图的内存大小。
参数类型:SIGHUP
取值范围:整型,10MB ~ max_process_memory的50%。
默认值:10MB
4. 简要流程
- 点赞
- 收藏
- 关注作者
评论(0)