【 使用环境 】生产环境
【 OB or 其他组件 】OB
【 使用版本 】4.3.5
【问题描述】一个sql执行常态0.1秒左右,但是偶发的会飙升到几十甚至几百秒
查看gv$ob_sql_audit发现很多时间浪费在io_wait_sec,EVENT是px loop condition wait
±-----------------±-------------------------±------------±------------±----------±---------------------±------------±---------------±------------±-----------------------±-----------±---------+
| request_time | time_readable | elapsed_sec | execute_sec | queue_sec | concurrency_wait_sec | io_wait_sec | total_wait_sec | total_waits | event | wait_class | ret_code |
±-----------------±-------------------------±------------±------------±----------±---------------------±------------±---------------±------------±-----------------------±-----------±---------+
| 1774851843285139 | 2026-03-30 14:24:03.2851 | 420.6499 | 420.6498 | 0.0000 | 0.0000 | 0.0000 | 362.2064 | 390257 | px loop condition wait | NETWORK | 0 |
观察outline:
select * from oceanbase.gv$ob_plan_cache_plan_stat where sql_id = ‘5FDECA67241269355F36F7A4EB36AD00’ \G
得到:
OUTLINE_DATA: /+BEGIN_OUTLINE_DATA LEADING(@“SEL$618C9326” ((“TAB”@“SEL$1” “TABD”@“SEL$1”) “TR”@“SEL$1”)) USE_NL(@“SEL$618C9326” “TR”@“SEL$1”) PQ_DISTRIBUTE(@“SEL$618C9326” “TR”@“SEL$1” BC2HOST NONE) USE_HASH(@“SEL$618C9326” “TABD”@“SEL$1”) PQ_DISTRIBUTE(@“SEL$618C9326” “TABD”@“SEL$1” LOCAL LOCAL) INDEX(@“SEL$618C9326” “TAB”@“SEL$1” “UDX_ACCOUNT_ENTITY_NO”) INDEX(@“SEL$618C9326” “TABD”@“SEL$1” “IDX_CREATED_AT”) INDEX(@“SEL$618C9326” “TR”@“SEL$1” “IDX_RECEIPT_NO”) SIMPLIFY_GROUP_BY(@“SEL$1”) REPLACE_CONST(@“SEL$EA493D33”) OUTER_TO_INNER(@“SEL$44092447”) PRED_DEDUCE(@“SEL$79C92EA1”) OPTIMIZER_FEATURES_ENABLE(‘4.3.4.0’) DYNAMIC_SAMPLING(1) END_OUTLINE_DATA/
问了AI分析说是这2个是重点,发生了并行执行(暂且认为是真的)
PQ_DISTRIBUTE(@“SEL$618C9326” “TR”@“SEL$1” BC2HOST NONE)
BC2HOST Broadcast to Host - 广播分发
PQ_DISTRIBUTE(@“SEL$618C9326” “TABD”@“SEL$1” LOCAL LOCAL)
LOCAL - 本地分发
然后根据AI建议绑定hint /*+ PARALLEL(1) /:
CREATE OUTLINE disable_parallel_dba_1 ON ‘5FDECA67241269355F36F7A4EB36AD00’ USING hint /+ PARALLEL(1) /;
CREATE FORMAT OUTLINE disable_parallel_dba_1 ON ‘CA87A7020C2392E604B07C1A25D87D43’ USING HINT /+ PARALLEL(1) */;
绑定outline和format outline都试过了,绑完也刷新过缓存:ALTER SYSTEM FLUSH PLAN CACHE sql_id = ‘5FDECA67241269355F36F7A4EB36AD00’ GLOBAL;
但是查看gv$ob_plan_cache_plan_stat最后outline_id=-1一直没变,看上去就是没绑上去,请问为什么?以及AI分析的加parallel(1)是有道理的吗
