**OceanBase 关于SQL监控与执行计划记录**
记录来源:(OceanBase)DBA 从入门到实践
一、慢SQL与性能视图
慢SQL参数说明:
V3.2.3前
trace_log_slow_query_watermark 默认是 100ms。
V3.2.3及后续
trace_log_slow_query_watermark 默认是 1s。
慢SQL性能查看视图
GV$OB_SQL_AUDIT 所有集群的租户下的所有信息
V$OB_SQL_AUDIT 当前租户下的所有信息
需要查询当前问题SQL的情况下,需要关闭sql AUdit功能,防止问题SQL被淘汰,动态生效
alter system set enable_sql_audit=true;
alter system set enable_sql_audit=false;
set global ob_enable_sql_audit=OFF;
set global ob_enable_sql_audit=ON;
当前租户下的SQL audit占用租户的内存的3%
set global ob_sql_audit_percentage=3
OB手动淘汰
alter system flush sql audit tenant=tenant_name;
慢SQL的统计语句
#慢sql统计
select
tenant_id,request_id,usec_to_time(request_time),elapsed_time,
queue_time,execute_time,query_sql
from oceanbase.GV$OB_SQL_AUDIT
where tenant_id=租户id and elapsed_time > 100000
and request_time > time_to_usec('datetime')
order by elapsed_time desc limit 5;#查看租户资源最多的SQL,对标OCP中的TOPSQL查看
select SQL_ID,avg(ELAPSED_TIME),AVG(QUEUE_TIME),AVG(ROW_CACHE_HIT+BLOOM_FILTER_CACHE_HIT+BLOCK_CACHE_HIT+DISK_READS) AVG_LOGICAL_READ,
AVG(EXECUTE_TIME) AVG_EXEC_TIME,COUNT(*) CNT,AVG(EXECUTE_TIME-TOTAL_WAIT_TIME_MICRO) avg_cpu_time,
avg(TOTAL_WAIT_TIME_MICRO) avg_wait_time,wait_class,avg(retry_cnt),query_sql
from oceanbase.GV$OB_SQL_AUDIT
GROUP BY SQL_ID
ORDER BY avg_exec_time * cnt desc
limit 10;#SQL监控视图 真实的执行计划记录GV$OB_PLAN_CACHE_PLAN_EXPLAN
select * from oceanbase.DBA_OB_DATABASES;
select last_trace_id();
#获取真实执行计划过程,获取IP,端口,执行计划ID,SQL
select tenant_id,svr_ip,svr_port,plan_id,query_sql
from oceanbase.gv$ob_sql_audit
where trace_id=''#根据上述获取的信息查询真实执行计划
select * from oceanbase.GV$OB_PLAN_CACHE_PLAN_EXPLAIN
WHERE tenant_id=租户id
and svr_ip=''
and svr_port=
and plan_id=;
执行计划查看方法
EXPLAIN + DQL
explain select * from t1;
EXPLAIN NOADDR + DQL
注释:addr 输出的地址信息,一般需要OB的捏研发工程师查看,所以使用NOADDR进行打印执行计划
执行计划中的扩展信息记录
OUTPUT 表示查询输出的字段
filter 表示过滤条件,nil值表示null
rowset 表示一次批过滤量,降低资源使用的情况下,可以加快速度
access 表示访问的信息,包括索引,字段,分区等
partitions 表示使用的分区,也可以根据此信息知道是否发生了分区裁剪
is_index_back 确认是否发生了回表
is_global_index 确认是否使用了全局索引
优化信息(Optimization Info):OB官网未解释,但是OB的DBA入门到实践一书中有提及,如下。
table_rows 上一个合并版本SSTable中的表的行数,可以简单理解为t1表的行数。physical_range_rows 表需要扫描的物理行数,如果走了索引的话,含义为t1表在索引上需要扫描的物理行数。注意(delete 语句并不是真实的删除数据,只是标记为delete,该记录会增加扫描的物理扫描行数)logical_range_rows 表示需要扫描的逻辑行数(不包括delete标记的行,所以可能小于物理扫描行数)index_back_rows 回表的行数,如果是全表或者覆盖索引时,该值为0output_rows 预估输出行数,在上面的计划中,表示表在过滤后的行数。table_dop 表扫描的并行度(并行度)
dop_method 决定表扫描并行度的原因 。(创建表示指定表的并行度,AutoDOP优化器基于代价选择的并行度(参数 auto dop),global parallel(parallel hit或系统变量设置的并行度))。avaible_index_name 表可用的索引列表。pruned_index_name 当前的查询基于优化器的规则,任务不应该使用的索引列表。unstable_index_name 如果存在,表示被裁剪的主表路径。stats version 表统计信息版本号,如果为0,没有统计信息,表示需要搜集版本信息。dynamic sampling level 动态采样等级,如果值为0。没有使用动态采样。estimation method 表示行估计方式
(DEFAULT:表示使用默认统计信息
STORAGE:使用存储层实时估行
STATS:使用统计信息估行)Plan Type 计划类型:Local,Remote,DistributedNote 表示备注信息,比如(Degree of Parallelisim is 1 because of table property)表示当前表的并行度为1。