计划—hash—value 代表一个散列值,它包罗了执行计划的复杂之处,可以从V¥SQL—PLAN或DBA—HIST—SQL—PLAN视图中找到的执行计划信息中提取。 这一价值对查明和诊断与SQL声明及其各自的执行计划有关的业绩问题特别有价值。 If you want to find the plan_hash_value for a specific SQL statement, you can ...
计划乃价值所在 价值由计划而成
v$sqlarea每条语句都有一个唯一的HASH_VALUE,相当于你语句的一个ID,v$sql、v$sql_plan的hash_value,如果两条相同的话ORACLE会认为这两条语句是同一条语句,不在再次做硬解析,plan_hash_value是计划的hash值,数值的大小没啥意义。
plan_hash_value判断sql的访问路径是否改变的主要方法是:v$sql.plan_hash_value的值是否改变。如果不同的sql语句含有相同的实验:---创建表deptSQL> create table dept as select * from scott.dept;Table created.---执行2条sql查询dept表SQL> select deptno,dname from dept where deptno=10;DEPTNO DNAME--- ...
通过比较两个 SQL 的 FULL_PLAN_HASH_VALUE 能很容易区分两个执行计划是否完全相同(不需要一行一行的比较两个执行计划)。 注意,不能跨版本比较FULL_PLAN_HASH_VALUE,因为该值不向后兼容。 FULL_PLAN_HASH_VALUE 的目的在于,为在执行时可能发生执行计划改变的自适应查询,提供一个静态/固定的 HASH 值。
PLAN_HASH_VALUE --- ... fzgydxr7yjcxd select dummy zero from dual where dummy> :x 0
这两个hash_value 是数据库内部使用的一个hash值 hash_value 具体可对应到 v$sql 的hash_value plan_hash_value 则对应到执行计划相关表的hash值
Plan hash value: 3458767806 --- | Id| Operation| Name | Rows| Bytes | Cost (%CPU)| Time| --- |0 | SELECT STATEMENT||8 |64 |2(0)| 00:00:01 | |1 |TABLE ACCESS FULL| DAVE |8 |64 |2(0)| 00:00:01 | --
,QBLOCK_NAME FROMv$sql_plan WHEREPLAN_HASH_VALUE='&plan_hash_value' ANDADDRESS=(SELECTMAX(ADDRESS)FROMV$SQL_PLANWHEREPLAN_HASH_VALUE='&plan_hash_value'); SELECT*FROMTABLE(dbms_xplan.display('plan_table','PLAN_'||'&plan_hash_value'));...
select plan_hash_value from v$sqlarea where sql_id='&&sql_id'; 3.执行结果如下: $ grep -A 2 PLAN_HASH_VALUE aa.txt PLAN_HASH_VALUE --- 4153437776 -- PLAN_HASH_VALUE --- 4153437776 -- PLAN_HASH_VALUE --- 4153437776 -- PLAN_HASH_VALUE ...