目录导航
参数
本功能 由参数 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 = 成功 其它=报错 |