注意:该功能在某些V95的早期版本里被去掉了,如果你的版本不支持,请升级集群,或者人工连接各个节点查询show processlist等进行查看。
目录导航
1.1.1. 作用
查看集群当前正在运行的所有任务,特别是运行时间最长的任务。
1.1.2. 使用方法
管理节点
select * from information_schema.COORDINATORS_TASK_INFORMATION;
排除一些不重要的字段,可以追加如下条件.
select COORDINATOR_NAME, ID, user, host, command, start_time, time, state, substring(info,0,100) info from information_schema.COORDINATORS_TASK_INFORMATION where info is not null and info not like '%information_schema.processlist%' order by time desc;
计算节点
select * from information_schema.GNODE_TASK_INFORMATION;
select NODE_NAME, ID, user, host, command, start_time, time, state, substring(info,0,100) info from information_schema.GNODES_TASK_INFORMATION where info is not null and info not like '%information_schema.processlist%' order by time desc;
如下管理节点表,绿色部分是重点关注的内容,其余白色背景的请忽略。
字段 | 类型 | 作用 |
COORDINATOR_NAME | varchar(64) | 管理节点名字 |
ID | bigint(4) | 进程ID |
TASKID | bigint(4) | 数据库内部任务号,每个命令执行时都会增加 |
SUBTASKID | bigint(4) | 未见使用 |
THREADID | bigint(4) | 数据库内线程号,一般在一个session内是不会变动的 |
USER | varchar(16) | 登录用户 |
HOST | varchar(64) | 连接的客户端主机 |
DB | varchar(64) | 默认连接的数据库 |
COMMAND | varchar(16) | 命令类型 |
START_TIME | timestamp | 开始时间 |
TIME | int(7) | 执行时间 |
STATE | varchar(64) | 状态 |
RESOURCE_POOL_NAME | varchar(64) | |
RESOURCE_POOL_ID | bigint(21)unsigned | |
RESOURCE_POOl_PRIORITY | bigint(21)unsigned | |
WAITING_TIME | bigint(21)unsigned | 等待时间 |
RUNNING_TIME | bigint(21)unsigned | 运行时间 |
LOCK | longtext | 已经拿到的锁 |
WAIT | longtext | 等待的锁 |
INFO | longtext | 执行的SQL |
TRACE | longtext |
计算节点
字段 | 类型 | 作用 |
NODE_NAME | varchar(64) | 计算节点名字 |
ID | bigint(4) | 进程ID |
TASKID | bigint(4) | 数据库内部任务号 |
SUBTASKID | bigint(4) | 数据库内部子任务号 |
THREADID | bigint(4) | 数据库内线程号 |
USER | varchar(16) | 登录用户 |
HOST | varchar(64) | 连接的客户端主机 |
DB | varchar(64) | 默认连接的数据库 |
COMMAND | varchar(16) | 命令类型 |
START_TIME | timestamp | 开始时间 |
TIME | int(7) | 执行时间 |
STATE | varchar(64) | 状态 |
RESOURCE_POOL_NAME | varchar(64) | |
RESOURCE_POOL_ID | bigint(21)unsigned | |
RESOURCE_POOl_PRIORITY | bigint(21)unsigned | |
WAITING_TIME | bigint(21)unsigned | |
RUNNING_TIME | bigint(21)unsigned | 运行时间 |
PARALLEL_DEGREE | bigint(21)unsigned | 并行线程数 |
CPU_USAGE | bigint(21)unsigned | |
MEM_USAGE | bigint(21)unsigned | |
TEMP_DISKSPACE_SORT | bigint(21)unsigned | |
TEMP_DISKSPACE_JOIN | bigint(21)unsigned | |
TEMP_DISKSPACE_AGGR | bigint(21)unsigned | |
INFO | longtext | 执行的SQL |
TRACE | longtext |
其中CPU等信息,需要开启资源管控功能。
1.1.3. 使用样例
图中为了方便,使用了\G格式,否则在一行里不方便看。
如下提供一个连续运行的脚本;其中将substring(info,0,100)去掉了,显示全部的info为后续排查方便,而sleep 10秒,请根据实际情况修改, 问题排查可以考虑减少到5秒。 日常跟踪,建议增加到30-60秒,也就是更关注执行时间长的SQL。
[root@gbase101 ~]# cat gbase_monit_sql.sh #!/bin/sh #死循环 while [ 2 -gt 1 ]; do # current datetime date # get current running sql in whole gbase 8a cluster gccli -h127.0.0.1 -ugbase -pgbase20110531 -vvv -e"select COORDINATOR_NAME, ID, user, host, command, start_time, time, state, info from information_schema.COORDINATORS_TASK_INFORMATION where info is not null and info not like '%information_schema.processlist%' order by time desc" # Delay 10 second sleep 10 done
然后用 nohup 在后台运行
nohup sh gbase_monit_sql.sh &