目录导航
参数
本功能 由参数 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_id | bigint(20) | 任务编号 | 
| sql_text | varchar(2000) | 执行的SQL部分内容 | 
| elapse_time | datetime | SQL开始执行的时间,注意不是耗时 | 
sys_sqls_elapsepernode
SQL在每个节点的执行耗时
记录的SQL信息
| 字段名 | 类型 | 说明 | 
|---|---|---|
| task_id | bigint(20) | 任务编号 | 
| node | varchar(256) | 执行的节点IP | 
| node_sid | int(11) | 执行节点的SessionId | 
| time | int(11) | 执行耗时 | 
| errno | int(11) | 执行结果。 0 = 成功 其它=报错  |