Oracle 收集统计信息在11g和12C下的区别
2014-10-15 20:45
459 查看
Oracle 基于事务的临时表在11g和12C下,可以看到收集临时表的统计信息后,前者记录被清空,后者没有,这是个很重要的区别。在公司环境上用的是12C,在现场用的是11g,使用临时表会造成时快时慢,之前我有帖子http://blog.csdn.net/stevendbaguo/article/details/39964807,用了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
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
相关文章推荐
- Oracle 收集统计信息11g和12C在差异
- Oracle 11g统计信息收集--多列统计信息的收集
- Oracle 11g系统自己主动收集统计信息的一些知识
- Oracle 11g 之自动收集统计信息
- Oracle 11G自动收集统计信息
- [Oracle] 11G自动收集统计信息
- Oracle 11G统计信息自动收集及调整
- Oracle 11g系统自动收集统计信息的一些知识
- Oracle 11g收集多列统计信息详解
- oracle 11g 自动收集统计信息 导致IO过大
- oracle 12c 关闭统计信息收集和启用统计信息收集
- 启用oracle 11g自己主动收集统计信息
- Oracle 11g系统自动收集统计信息的一些知识
- 启用oracle 11g自动收集统计信息
- Oracle 11g统计信息收集
- [Oracle] 11G自己主动收集统计信息
- oracle 10g如何关闭和打开自动收集统计信息!
- oracle 10g如何关闭和打开自动收集统计信息
- Oracle 10g 统计信息自动收集功能(automatic statistics gathering)学习总结
- [zt] Oracle 10g 统计信息自动收集功能(automatic statistics gathering)