使用append hint称为直接路径加载插入,数据不经过Buffer cache而是直接插到数据文件中。
具体的原理是:使用append hint则系统不查找freelist链表中的空闲块(freeblock),而是直接在segment高水位(HWM)以上插入数据,省略了freeblock的查找时间,因此速度快,但是由于总是在HWM以上插数据,导致了空间的浪费,对于频繁修改的数据不建议采用这种方式。
在开发以及运维过程中,常常要配合nologging提高查询速度,减少redo的产生,从而避免log file sync带来的性能下降问题。
以下我采用实验的方式验证append与nologgingde的作用:
服务器: Red Hat Enterprise Linux Server release 5.8 (Tikanga)
数据库: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
实验一:append hint方式将分配新的extent造成空间浪费
SQL> create table AP01 as select * from dba_objects; //创建基础表AP01
Table created
SQL> select segment_name,extent_id,bytes from user_extents where segment_name='AP01'; //查看AP01分配的extent共有24个
SEGMENT_NAME EXTENT_ID BYTES
-------------------------------------------------------------------------------- ---------- ----------
AP01 0 65536
AP01 1 65536
AP01 2 65536
AP01 3 65536
AP01 4 65536
AP01 5 65536
AP01 6 65536
AP01 7 65536
AP01 8 65536
AP01 9 65536
AP01 10 65536
AP01 11 65536
AP01 12 65536
AP01 13 65536
AP01 14 65536
AP01 15 65536
AP01 16 1048576
AP01 17 1048576
AP01 18 1048576
AP01 19 1048576
SEGMENT_NAME EXTENT_ID BYTES
-------------------------------------------------------------------------------- ---------- ----------
AP01 20 1048576
AP01 21 1048576
AP01 22 1048576
AP01 23 1048576
24 rows selected
SQL> delete from AP01; //删除表中的数据
75224 rows deleted
SQL>
SQL> commit;
Commit complete
SQL> select count(*) from AP01;
COUNT(*)
----------
0
SQL> select segment_name,extent_id,bytes from user_extents where segment_name='AP01'; //
SEGMENT_NAME EXTENT_ID BYTES
-------------------------------------------------------------------------------- ---------- ----------
AP01 0 65536
AP01 1 65536
AP01 2 65536
AP01 3 65536
AP01 4 65536
AP01 5 65536
AP01 6 65536
AP01 7 65536
AP01 8 65536
AP01 9 65536
AP01 10 65536
AP01 11 65536
AP01 12 65536
AP01 13 65536
AP01 14 65536
AP01 15 65536
AP01 16 1048576
AP01 17 1048576
AP01 18 1048576
AP01 19 1048576
SEGMENT_NAME EXTENT_ID BYTES
-------------------------------------------------------------------------------- ---------- ----------
AP01