暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 了解v $ sqlara中sql_id,地址,hash_value,plan_hash_value的重用值

ASKTOM 2021-01-13
1072

问题描述

晚上好,

我在v $ sqlarea中有一个包含以下信息的sql语句

select sql_id, address, hash_value, plan_hash_value from v$sqlarea where sqltext=

sql_id       |address         |hash_value|plan_hash_value
cv65zdurrtfus|00000000FCAA9560|2944187224|3149222761
复制


我使用命令从共享池中删除此对象,因为我想为我的sql语句重新计算exec计划
exec sys.dbms_shared_pool.purge('00000000FCAA9560,2944187224','c');
复制


我在v $ sqlarea上重做我以前的select语句,它重新调整了0行,所以我对此感到满意。

然后我执行我的原始sql,最后我在v $ sqlarea上重做我的select语句,它返回具有相同值的一行

sql_id       |address         |hash_value|plan_hash_value
cv65zdurrtfus|00000000FCAA9560|2944187224|3149222761
复制


我想知道如何生成相同的id,我期待新的值,即使最后我有预期的结果。

感谢您的反馈。

西蒙

专家解答

SQL ID是SQL语句文本的哈希。同样,hash_value是语句本身的哈希。你希望每次你运行一个声明时,这些都是一样的。

plan_hash_value是执行计划的散列。如果你有不同的计划,这将会改变。

因此,在清除声明后,你仍然有同样的计划,这意味着这很可能是浪费了精力。

计划哈希确实排除了某些方面。两个计划可能具有相同的形状 (相同的访问方法和联接),但在谓词等细节上有所不同。请参阅乔纳森·刘易斯 (Jonathan Lewis) 的示例:https://jonathanlewis.wordpress.com/2021/01/14/between/
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论