Oracle 收集统计信息在11g和12C下的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 收集统计信息在11g和12C下的区别相关的知识,希望对你有一定的参考价值。

Oracle基于事务的临时表在11g和12C下,可以看到收集临时表的统计信息后,前者记录被清空,后者没有,这是个很重要的区别。在公司环境上用的是12C,在现场用的是11g,使用临时表会造成时快时慢,之前我有帖子 ,用了hint之后,也不是特别好,于是直接采集,结果临时表被清空。解决的方法是:建基于session的临时表,且每次用完之后要truncate,要不然,会有问题。
SQL> select * from v$version;
BANNER CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0
PL/SQL Release 12.1.0.1.0 - Production 0
CORE 12.1.0.1.0Production 0
TNS for Linux: Version 12.1.0.1.0 - Production 0
NLSRTL Version 12.1.0.1.0 - Production 0
SQL> drop table test purge;
--基于事务的临时表
SQL> create global temporary table test
(
ID number
)
on commit delete rows;
SQL> insert into test select object_id from dba_objects;
99412 rows inserted
SQL> select count(1) from test;
COUNT(1)
----------
99412
SQL> exec dbms_stats.gather_table_stats(user,'test');
SQL> select count(1) from test;
COUNT(1)
----------
99412

SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> drop table test purge;
--基于事务的临时表
SQL> create global temporary table test
(
ID number
)
on commit delete rows;
SQL> insert into test select object_id from dba_objects;
70379 rows inserted
SQL> select count(1) from test;
COUNT(1)
----------
70379
SQL> exec dbms_stats.gather_table_stats(user,'test');
SQL> select count(1) from test;
COUNT(1)
----------
0
参考技术A

Oracle 收集统计信息在11g和12C下的区别如下;

    11g中Oracle 基于事务的临时表可以看到收集临时表的统计信息后,记录会被清空

    12C下Oracle 基于事务的临时表可以看到收集临时表的统计信息后,记录并不会会被清空

 示例如下:

-- 创建基于事务的临时表
create global temporary table test
 (
      ID  number
)
 on commit delete rows;
 
-- 插入从其他表中查询数据,插入到test表中
insert into test select object_id from dba_objects;
--查询统计信息
 exec dbms_stats.gather_table_stats(user,'test');
 select count(1) from test;

结论:相同代码,在11g下执行,统计返回表中共有行数;在12c下执行,返回0

oracle 12c 关闭统计信息收集和启用统计信息收集

oracle 12c 关闭统计信息收集和启用统计信息收集

--关闭统计信息
col client_name for a60
select client_name,status from DBA_AUTOTASK_CLIENT;

CLIENT_NAME                                                  STATUS
------------------------------------------------------------ ----------------
auto optimizer stats collection                              ENABLED
auto space advisor                                           ENABLED
sql tuning advisor                                           ENABLED

begin
DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => ‘auto optimizer stats collection‘,
operation => NULL,
window_name => NULL);
end;
/

PL/SQL procedure successfully completed.

--启用统计信息收集
select client_name,status from DBA_AUTOTASK_CLIENT;

CLIENT_NAME                                                  STATUS
------------------------------------------------------------ ----------------
auto optimizer stats collection                              DISABLED
auto space advisor                                           ENABLED
sql tuning advisor                                           ENABLED

SQL> 

begin
DBMS_AUTO_TASK_ADMIN.ENABLE(client_name => ‘auto optimizer stats collection‘,
operation => NULL,
window_name => NULL);
end;
/

PL/SQL procedure successfully completed.

select client_name,status from DBA_AUTOTASK_CLIENT;

CLIENT_NAME                                                  STATUS
------------------------------------------------------------ ----------------
auto optimizer stats collection                              ENABLED
auto space advisor                                           ENABLED
sql tuning advisor                                           ENABLED

SQL> 

以上是关于Oracle 收集统计信息在11g和12C下的区别的主要内容,如果未能解决你的问题,请参考以下文章

oracle 12c 关闭统计信息收集和启用统计信息收集

oracle 11g 和 12c 有啥区别?

Oracle 11g系统自己主动收集统计信息的一些知识

[统计信息系列7] Oracle 11g的自动统计信息收集

[统计信息系列7] Oracle 11g的自动统计信息收集

Oracle 11g 之自动收集统计信息