Задали вопрос и я углубился в поиски. Визуально запросы ничем не отличались друг от друга, тем не менее sql_id был разный. Выяснилось, что при использовании маркхота, то есть
SQL код:
begin
dbms_shared_pool.markhot(
hash =>'71fc6ccf9b3265361492ec9f4c5b785b',
namespace =>2,
global =>true
);
end;
/
копии объектов могут иметь разные sql_id, как это описано в "Different Sql_id's But Sql Is The Same Text When Sql Is Marked Hot (Doc ID 2234171.1)"
Определить такие объекты можно запросом
SQL код:
select
hash_value,
full_hash_value,
namespace,
child_latch,
property hot_flag,
executions,
invalidations
from
v$db_object_cache
where
name like '{some part of your critical SQL statement}'
;
Соответственно, в разных вариантах непустая колонка PROPERTY обозначает, что объект замаркхочен (так и не знаю, как коротко обозначить это по-русски), то есть помечен горячим и находится в кеше. Делается это с целью снижения конкуренции за мьютексы (mutex).