OB_SQL执行计划

发布时间 2023-12-26 15:08:56作者: z_uncle

查看执行计划

查看预估执行计划

  • 通过Explain命令查看优化器针对给定SQL生成的逻辑执行计划
  • Explain不会真正执行给定的SQL,可以放心使用该功能而不用担心在性能调试中可能给系统性能带来影响

Explain命令格式如下例所示,展示格式包括 BASIC、EXTENDED、PARTITIONS 等等,内容的详细程度有所区别

 

EXPLAIN [BASIC | EXTENDED | PARTITIONS | FORMAT = format_name] explainable_stmt
format_name:
{ TRADITIONAL | JSON }
explainable_stmt:
{ SELECT statement
| DELETE statement
| INSERT statement
| REPLACE statement
| UPDATE statement }

 

查看真实执行计划

  • (g)v$plan_cache_plan_explain这张虚拟表展示的计划为物理执行计划,在算子命名上会与 EXPLAIN 所展示的逻辑执行计划有所不同
  • 如果访问v$plan_cache_plan_explain,必须给定tenant_id和plan_id的值,否则系统将返回空集
  • 如果访问gv$plan_cache_plan_explain,必须给定ip、port、tenant_id、plan_id这四列的值 , 否则系统将返回空集

先从v$plan_cache_plan_stat 视图查出 tenant_id和plan_id

SELECT * FROM v$plan_cache_plan_stat  WHERE tenant_id= 1001  AND STATEMENT LIKE 'INSERT INTO T1 VALUES%'\G

 再根据上一步查出的tenant_id和plan_id查询出执行计划

SELECT tenant_id,svr_ip,svr_port,plan_id,operator,name,cost FROM v$plan_cache_plan_explain WHERE tenant_id = 1001 AND plan_id = 7 \G

注意:

一、目前3.2.3.3版本无法指定查看rows列的内容,会提示语法报错。已经提交社区

二、v$plan_cache_plan_stat 和v$plan_cache_plan_explain无法联合查询执行计划,只能分两步查看。