问题描述
提前感谢团队提供的所有帮助,非常感谢!
我有一种情况,我正在使用的应用程序利用GTTs将数据加载到和过滤sql。问题是,在这样做的应用程序也注入一个基数提示到SQL的行数在GTT。例如:
因此,将sql配置文件应用于该配置文件将正常工作,但不会捕获SQL的下一个化身,这可能是
除了应用程序代码更改之外,是否有任何选项可以解决此问题?
谢谢!
显示唯一SQL id的简单测试用例
我有一种情况,我正在使用的应用程序利用GTTs将数据加载到和过滤sql。问题是,在这样做的应用程序也注入一个基数提示到SQL的行数在GTT。例如:
select * from table1 where column1 in (select /*+ cardinality ( 150 ) */ gtt_column from gtt);
因此,将sql配置文件应用于该配置文件将正常工作,但不会捕获SQL的下一个化身,这可能是
select * from table1 where column1 in (select /*+ cardinality ( 200 ) */ gtt_column from gtt);
除了应用程序代码更改之外,是否有任何选项可以解决此问题?
谢谢!
显示唯一SQL id的简单测试用例
create global temporary table gtt_test (column1 number) on commit delete rows; create table perm_test as select level as column1 from dual connect by level <= 1000; insert into gtt_test select level from dual connect by level <= 10; select * from perm_test where column1 in (select /*+ cardinality (1) */ * from gtt_test); select * from perm_test where column1 in (select /*+ cardinality (2) */ * from gtt_test); select sql_text, sql_id, executions from v$sql where parsing_schema_name = user and sql_text like '%cardinality%' order by first_load_time desc;
专家解答
据我所知没有。SQL配置文件的强制匹配属性仅适用于文字,不适用于提示。
请注意,通常,您将希望具有不同基数提示值的查询使用不同的计划。因此不同的配置文件。与基数 (99999) 相比,具有基数 (1) 的查询更有可能从索引中受益。
当您升级到最新版本时,值得调查GTTs的会话统计信息。这些可能使您完全放弃提示和配置文件。
https://oracle-base.com/articles/12c/session-private-statistics-for-global-temporary-tables-12cr1
请注意,通常,您将希望具有不同基数提示值的查询使用不同的计划。因此不同的配置文件。与基数 (99999) 相比,具有基数 (1) 的查询更有可能从索引中受益。
当您升级到最新版本时,值得调查GTTs的会话统计信息。这些可能使您完全放弃提示和配置文件。
https://oracle-base.com/articles/12c/session-private-statistics-for-global-temporary-tables-12cr1
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




