xzh2000的博客 本人提供杭州地区Oracle现场技术支持服务,包括性能调整、DataGuard、RAC等。
20 08, 2007
11g新特性:全表扫描的变化
作者 xzh2000 14:20 | Permalink 静态链接网址 | Comments 最新回复 (0) | Trackback 引用 (0) | 技术交流

在oracle 11g以前的版本中,如果对大表进行全表扫描,通过v$session_wait可以看到wait event是:db file scattered read;在11g中,如果对大表进行全表扫描,通过v$session_wait可以看到wait event是:direct path read;也就是说,在11g中,大表全表扫描是将数据块直接读入会话的pga区域。


10g:

[oracle10g@csdba worksh]$ sh list_sql.sh
--------------------------------------------------------------------------
YEKAI(159,235) ospid=5318 hash_value=1577916882 execs=918 els_time=1.04
program=sqlplus@csdba (TNS V1-V3) disk_reads=0 buffer_gets=43658.46
SELECT COUNT(*) FROM TMP_OBJECTS WHERE OBJECT_ID = :B1
--------------------------------------------------------------------------
|SELECT STATEMENT |----- 1577916882 ----| | | 8609 |
|SORT AGGREGATE | | 1 | 13 | |
| TABLE ACCESS FULL |TMP_OBJECTS | 483 | 6K| 8609 |
--------------------------------------------------------------------------
----------------------------alter system kill session-----------------------
alter system kill session '159,235';
[oracle10g@csdba worksh]$ sh list_sql.sh
--------------------------------------------------------------------------
YEKAI(159,235) ospid=5318 hash_value=1577916882 execs=919 els_time=1.04
program=sqlplus@csdba (TNS V1-V3) disk_reads=0 buffer_gets=43658.52
SELECT COUNT(*) FROM TMP_OBJECTS WHERE OBJECT_ID = :B1
--------------------------------------------------------------------------
|SELECT STATEMENT |----- 1577916882 ----| | | 8609 |
|SORT AGGREGATE | | 1 | 13 | |
| TABLE ACCESS FULL |TMP_OBJECTS | 483 | 6K| 8609 |
--------------------------------------------------------------------------
----------------------------alter system kill session-----------------------

11g:

[oracle11g@csdba worksh]$ sh list_sql.sh
--------------------------------------------------------------------------
YEKAI(137,491) ospid=5324 hash_value=1577916882 execs=719 els_time=1.34
program=sqlplus@csdba (TNS V1-V3) disk_reads=43713.11 buffer_gets=68684.45
SELECT COUNT(*) FROM TMP_OBJECTS WHERE OBJECT_ID = :B1
--------------------------------------------------------------------------
|SELECT STATEMENT |----- 1577916882 ----| | | 11936 |
|SORT AGGREGATE | | 1 | 13 | |
| TABLE ACCESS FULL |TMP_OBJECTS | 482 | 6K| 11936 |
--------------------------------------------------------------------------
----------------------------alter system kill session-----------------------
alter system kill session '137,491';
[oracle11g@csdba worksh]$ sh list_sql.sh
--------------------------------------------------------------------------
YEKAI(137,491) ospid=5324 hash_value=1577916882 execs=720 els_time=1.34
program=sqlplus@csdba (TNS V1-V3) disk_reads=43713.2 buffer_gets=68684.58
SELECT COUNT(*) FROM TMP_OBJECTS WHERE OBJECT_ID = :B1
--------------------------------------------------------------------------
|SELECT STATEMENT |----- 1577916882 ----| | | 11936 |
|SORT AGGREGATE | | 1 | 13 | |
| TABLE ACCESS FULL |TMP_OBJECTS | 482 | 6K| 11936 |
--------------------------------------------------------------------------
----------------------------alter system kill session-----------------------

大家看测试,很明显,在11g中,大表全表扫描时数据块不经过sga而直接进pga,就会造成每次进行大表全表扫描,物理读都是很大,而在10g中,由于全表扫描的数据块在sga中已经存在,所以执行全表扫描时,它的物理读为0;这种变迁,体现了oracle在优化策略上的进步,就是假定大表频繁全表扫描这种现象,在产生库上是不常有的,通过把数据直接读入pga,进而减少了cache buffer的繁忙交换程度,提高了cache buffer的使用效率。。。

Comments
博客日历
« 八月 2008 »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
搜索
最新发表
文章分类
文章归档
网站链接
新闻聚合