OceanBase慢sql排查与HINT 说明

#慢sql统计
select
tenant_id,request_id,usec_to_time(request_time),elapsed_time,
queue_time,execute_time,query_sql
from oceanbase.GVKaTeX parse error: Expected 'EOF', got '#' at position 141: … desc limit 5; #̲查看租户资源最多的SQL,对标…OB_SQL_AUDIT
GROUP BY SQL_ID
ORDER BY avg_exec_time * cnt desc
limit 10;
#SQL监控视图 真实的执行计划记录GVKaTeX parse error: Expected 'EOF', got '#' at position 93: …st_trace_id(); #̲获取真实执行计划过程,获取IP…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=;

并行度选择策略:V4.2.0
parallel_degree_policy 用于设置并行度选择策略。默认是manual禁用Auto DOP策略,AUTO启用Auto DOP策略。

#访问路径相关的Hint:INDEX Hint 和 FULL Hint
INDEX Hint 表示使用指定的表,使用某个索引。如果表有别名,则需要指定表别名
FULL Hint 表示使用指定的表,使用全局扫描

#联结顺序相关的Hint:ORDERED Hint 和 LEADNG Hint
ORDERED Hint 表示按照表在FROM子句中出现的顺序进行表连接。
LEADING Hint 表示指定表作为驱动表,来指定表的联结顺序。(存在指定重复表,会导致Hint失败)且ORDERED 优先级高于LEADING

#与联接操作相关的Hint:USE_MERGE Hint 和 NO_USE_MERGE Hint
USE_MERGE说明:merge join
select ename,dept.deptno from dept,emp where dept.deptno=emp.deptno;
表示 dept与emp表各自对deptno列进行排序,然后匹配的行进行记录合并到结果集中,这个过程需要排序空间。

USE_HASH Hint 与 NO_USE_HASH Hint
select ename,dept.deptno from dept,emp where dept.deptno=emp.deptno;
表示为dept表创建一个哈希表,然后哈希表会根据where等值条件对emp表的deptno进行循环比较,最终获得答案。

USE_NL Hint 与 NO_USE_NL Hint
select ename,dept.deptno from dept,emp where dept.deptno=emp.deptno;
表示从dept中读取deptno中的第一个值,然后便利deptno,获取相同的值。然后根据dept表的deptno的N个数值,进行N次对emp表的deptno的遍历,需要创建索引。

USE_BNL Hint 与 NO_USE_BNL Hint
select ename,dept.deptno from dept,emp where dept.deptno=emp.deptno;
表示在内存中存入dept的deptno记录,比如存放了1/2的记录,然后将这些记录通过emp表的deptno上的索引进行匹配。这样只需要进行2次操作,就可以获取最终结果。

#与并行执行相关的Hint:PARALLEL Hint,NO_PARALLEL Hint,USE_PX Hint 和 PQ_DISTRIBUTE Hint
PARALLEL Hint 与 NO_PARALLEL
select ename,dept.deptno from dept,emp where dept.deptno=emp.deptno;
表示在查询中使用并行查询的方式执行SQL语句,如果违反了OB中的并行限制,则PARALLEL Hint被忽略

USE_PX Hint
PX 表示(PX conrdinator协调器,PX send,PX receive)等步骤,也就是并发线程中发生一些过程,比如生产者消费者等。
select ename,dept.deptno from dept,emp where dept.deptno=emp.deptno;
因为USE_PX的算法比较复杂,且设计较多的内部算子,不做介绍可以参考:https://open.oceanbase.com/blog/7083583808

PQ_DISTRIBUTE Hint
select ename,dept.deptno from dept,emp where dept.deptno=emp.deptno;
具体:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000512398
表示使用分布式的数据分布联接方式,包括HASH的方式,BROADCAST,PARTITION和NONE的方式。涉及重分布,小表广播,聚和等过程。

#与查询策略相关的Hint
USE_HASH_AGGREGATION Hint 与 NO_USE_HASH_AGGREGATION Hint
表示在进行max等聚合函数时,通过hash的方式进行统计。比较占用内存
USE_LATE_MATERIALIZATION Hint 与 NO_USE_LATE_MATERIALIZATION Hint
表示在查询过程中,会通过where条件将过滤的行进行物化成表行的形式,然后再显示出select的字段。
而延迟物化是将where条件分别在colums上进行分别过滤,并获取到正确的所有的columns值的bitmap,然后通过所有columns列的bitmap进行位与操作,得到满足where条件的所有bitmap,然后根据bitmap获取select的字段。
USE_NL_MATERIALIZATION Hint 与 NO_USE_NL_MATERIALIZATION Hint
表示在NL时,将结果进行物化,减少充分计算的需要

#与查询转换相关的算子
NO_REWRITE Hint
表示告诉优化器不做查询块的查询重写
NO_EXPAND Hint
表示不使用OR 扩展查询,OR扩展查询会将OR查询转化为多个子查询进行UION ALL
USE_CONCAT Hint
表示使用OR扩展参数,并依赖于OR的条件上是否有索引,并且对结果进行去重。
MERGE Hint
merge() 存在A,B,C。B与C组成视图,然后A跟BC视图进行结果集关联。如果进行视图合并,则根据where条件,可能会出现AB进行先关联,做HASH JOIN操作,然后结果集与C进行关联。可能在执行计划中,不会出现view的字样。
no_merge() 存在A,B,C。B与C组成视图,然后A跟BC视图进行结果集关联。
NO_MERGE Hint

UNNEST Hint
表示对子查询进行展开,通过join的方式进行联接查询。
NO_UNNEST Hint

PLACE_GROUP_BY Hint
表示在多表关联时,如果满足单表查询后直接进行group by 的情形下,在跟其它表进行关联统计,减少表内部联接。
NO_PLACE_GROUP_BY Hint
表示在多表关联时,在关联后才对结果进行group by。

NO_PRED_DEDUCE Hint
表示不进行谓词推入,也就是将where条件进行下推到子查询中。

其它Hint 请参考
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000512394

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值