【发布时间】:2021-01-23 21:51:55
【问题描述】:
根据here 的信息,我希望在Oracle 中对新表执行Insert-Select 操作期间自动收集统计信息。但是,在插入-选择操作之后,我没有看到任何表级统计信息。
我已将参数 _optimizer_gather_stats_on_load 设置为 TRUE。
根据要求(这只适用于新表),我创建了一个新表。插入选择之前没有行,插入选择操作后有 500 行。
我还有什么遗漏的吗?
更新: 这是我的数据库版本
select banner from v$version;
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
这是我正在创建的目标表:
create table test(id number, a number, b number);
这是我的插入语句:
insert /*+ APPEND */ into test select id, a, b from duptab;
这是我的参数值:
NAME TYPE VALUE
------------------------------------ ----------- -------
_optimizer_gather_stats_on_load boolean TRUE
仍然没有收集到统计数据:
SQL> select NUM_ROWS from user_tables where table_name = 'TEST';
NUM_ROWS
----------
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
计划在这里
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 17 | 663 | 3 (0)| 00:00:01 |
| 1 | LOAD AS SELECT | TEST | | | | |
| 2 | MAT_VIEW ACCESS FULL| DUPTAB | 17 | 663 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------------
【问题讨论】:
-
为了让测试用例完全可重现,你能不能用更简单的东西代替 DUPTAB,比如
SELECT 1,1,1 FROM DUAL? -
可能该功能被禁用,因为兼容性或优化器功能参数不标准。检查:
select * from v$parameter where name in ('optimizer_features_enable', 'compatible');
标签: sql database oracle optimization