南大通用GBase 8a集群性能监控SQL在每个节点执行时间

参数

本功能 由参数 gcluster_dql_statistic_threshold 控制。
当 gcluster_dql_statistic_threshold 为 0时 本功能关闭。
当 gcluster_dql_statistic_threshold> 0时 只有当SQL执行时间 大于 gcluster_dql_statistic_threshold 时才会把本SQL在所有节点执行信息记录到系统表。

系统表

本功能新增两个系统表:gclusterdb.sys_sqls 和 gclusterdb.sys_sql_elapsepernode 。用来记录历史SQL在所有节点执行信息。
本功能提供一张内存表:information_schema.SELECT_STATISTIC。 用来查看当前正在执行的SQL在所有节点上执行信息。

覆盖功能点

1、涉及到的sql范围
原则是sql下发到所有分片上的sql都会记录到系统表
ddl:create select
dml:insert select
update/delete 带有where条件的sql
DQL:除表类型为复制表、单点hash的查询语句,按照原则sql下发到所有分片上的sql都会记录到系统表的查询语句
覆盖查询的sql及select into outfile 多表分布在不同的distribution上查询

2、查询报错的sql,执行节点执行sql,在其他节点执行kill gbased等异常操作,会出现执行节点gclusterd宕机

3、带有hint的语句查询系统表数据记录重复

样例


gbase> set gcluster_dql_statistic_threshold=1;
Query OK, 0 rows affected (Elapsed: 00:00:00.01)

gbase> select id,count(*) from t1 group by id order by count(*) desc;
+---------+----------+
| id      | count(*) |
+---------+----------+
| 1027347 |       68 |
| 1010186 |       64 |
| 1027569 |       64 |
| 1006983 |       64 |
| 1014427 |       64 |
| 1032549 |       64 |

| 2009629 |        3 |
|    9629 |        3 |
| 2011350 |        2 |
|   11350 |        2 |
| 2009140 |        2 |
|    9140 |        2 |
+---------+----------+
98304 rows in set (Elapsed: 00:00:04.28)


gbase> use gclusterdb;
Query OK, 0 rows affected (Elapsed: 00:00:00.01)

gbase> show tables;
+------------------------+
| Tables_in_gclusterdb   |
+------------------------+
| audit_log_express      |
| dual                   |
| nodedatamap            |
| rebalancing_status     |
| sys_sqls               |
| sys_sqls_elapsepernode |
+------------------------+
6 rows in set (Elapsed: 00:00:00.00)

gbase> select * from sys_sqls;
+---------+---------------------------------------------------------------+---------------------+
| task_id | sql_text                                                      | elapse_time         |
+---------+---------------------------------------------------------------+---------------------+
| 2621528 | select id,count(*) from t1 group by id order by count(*) desc | 2020-11-10 11:17:59 |
+---------+---------------------------------------------------------------+---------------------+
1 row in set (Elapsed: 00:00:00.01)

gbase> select * from sys_sqls_elapsepernode;
+---------+-------------------+----------+------+-------+
| task_id | node              | node_sid | time | errno |
+---------+-------------------+----------+------+-------+
| 2621528 | ::ffff:10.0.2.201 |       59 |    2 |     0 |
| 2621528 | ::ffff:10.0.2.202 |       71 |    1 |     0 |
+---------+-------------------+----------+------+-------+
2 rows in set (Elapsed: 00:00:00.01)

gbase>

元数据

sys_sqls

记录的SQL信息

字段名类型说明
task_idbigint(20)任务编号
sql_textvarchar(2000)执行的SQL部分内容
elapse_timedatetimeSQL开始执行的时间,注意不是耗时

sys_sqls_elapsepernode

SQL在每个节点的执行耗时

记录的SQL信息

字段名类型说明
task_idbigint(20)任务编号
nodevarchar(256)执行的节点IP
node_sidint(11)执行节点的SessionId
timeint(11)执行耗时
errnoint(11)执行结果。
0 = 成功
其它=报错