[20161115]11G pre-allocation.txt
--11GR2有1个pre-allocation的新特性,通过SMCO进程swap出Wnnn进程,来对空间进行预分配。
--在windows下遇到1次ora-00445,当然不一定是这个问题,可能数据库其他问题死机,导致无法建立后台进程。
--链接:
http://blog.itpub.net/267265/viewspace-2120811/
在这里有2个隐含参数:
1. _enable_space_preallocation 在11g中默认值是3,它可以使表空间在接近100%进行扩展,。
2. _kttext_warning 默认值为5。表示扩展的大小为当时表空间大小的5%
--摘自https://oracleblog.org/working-case/big-file-tablespace-cause-issue-when-pre-allocation/
--在我的生产系统,我个人喜欢设置最大不扩展,空间不足增加数据文件。
--没有看到alert*.log的相关提示,做一些测试看看。
--前面做实验时,链接http://blog.itpub.net/267265/viewspace-2128006/。发现数据文件增加很多,才想起来忽略了这个因素。
--通过例子来说明:
1.环境:
SYS@book> @ &r/ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
SYS@book> @ &r/hide _enable_space_preallocation
NAME DESCRIPTION DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE
---------------------------- ---------------------------- ------------- ------------- ------------
_enable_space_preallocation enable space pre-allocation TRUE 3 3
SYS@book> @ &r/hide _kttext_warning
NAME DESCRIPTION DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE
---------------------------- -------------------------------------------------------- ------------- ------------- ------------
_kttext_warning tablespace pre-extension warning threshold in percentage TRUE 5 5
CREATE TABLESPACE SUGAR DATAFILE
'/mnt/ramdisk/book/sugar01.dbf' SIZE 40M AUTOEXTEND ON MAXSIZE 40M
LOGGING
ONLINE
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
create table zz tablespace sugar as select rownum id from dual connect by level<=2;
ALTER TABLE zz MINIMIZE RECORDS_PER_BLOCK ;
SCOTT@book> insert into zz select rownum id from dual connect by level<=9810;
9810 rows created.
--//多次测试插入9810条记录正好。
insert into zz select rownum id from dual connect by level<=9812
*
ERROR at line 1:
ORA-01653: unable to extend table SCOTT.ZZ by 16 in tablespace SUGAR
2.修改数据文件属性:
SCOTT@book> select * from dba_tablespaces where TABLESPACE_NAME='SUGAR';
TABLESPACE_NAME BLOCK_SIZE INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS MAX_SIZE PCT_INCREASE MIN_EXTLEN STATUS CONTENTS LOGGING FOR EXTENT_MAN ALLOCATIO PLU SEGMEN DEF_TAB_ RETENTION BIG PREDICA ENC COMPRESS_FOR
--------------- ---------- -------------- ----------- ----------- ----------- ---------- ------------ ---------- --------- --------- --------- --- ---------- --------- --- ------ -------- ----------- --- ------- --- ------------
SUGAR 8192 131072 131072 1 2147483645 2147483645 0 131072 ONLINE PERMANENT LOGGING NO LOCAL UNIFORM NO AUTO DISABLED NOT APPLY NO HOST NO
SCOTT@book> select * from dba_data_files where TABLESPACE_NAME='SUGAR';
FILE_NAME FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS RELATIVE_FNO AUT MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_
----------------------------- ------- --------------- ---------- ---------- --------- ------------ --- ---------- ---------- ------------ ---------- ----------- -------
/mnt/ramdisk/book/sugar01.dbf 6 SUGAR 41943040 5120 AVAILABLE 6 YES 41943040 5120 1 40894464 4992 ONLINE
--//NEXT_EXTENT=131072=128K
--//而数据文件INCREMENT_BY=1,也就是每次增加8K。
ALTER DATABASE DATAFILE '/mnt/ramdisk/book/sugar01.dbf' AUTOEXTEND ON NEXT 8K MAXSIZE UNLIMITED;
$ ls -l /mnt/ramdisk/book/sugar01.dbf
-rw-r----- 1 oracle oinstall 41951232 2016-11-15 08:21:50 /mnt/ramdisk/book/sugar01.dbf
--当前数据文件大小 40*1024*1024+8192=41951232。(注意数据文件前有8K OS块)。
3.增加1条记录看看。
SCOTT@book> insert into zz select rownum+9810 id from dual connect by level<=1;
1 row created.
SCOTT@book> commit ;
Commit complete.
$ ls -l /mnt/ramdisk/book/sugar01.dbf
-rw-r----- 1 oracle oinstall 44179456 2016-11-15 08:24:19 /mnt/ramdisk/book/sugar01.dbf
SCOTT@book> select * from dba_data_files where TABLESPACE_NAME='SUGAR';
FILE_NAME FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS RELATIVE_FNO AUT MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_
----------------------------- ------- --------------- ---------- ---------- --------- ------------ --- ---------- ---------- ------------ ---------- ----------- -------
/mnt/ramdisk/book/sugar01.dbf 6 SUGAR 44171264 5392 AVAILABLE 6 YES 3.4360E+10 4194302 1 43122688 5264 ONLINE
--44179456-41951232=2228224
--2228224/1024/1024=2.125M,可以发现增加2.125M。
-- 5392-5120=272块
--可以发现我仅仅增加1条记录,数据文件扩展了2.125M,增加了272块。 而不是原来的慢慢增加,我设置NEXT_EXTENT=131072=128K。
SCOTT@book> select * from dba_free_space where TABLESPACE_NAME='SUGAR';
TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO
------------------------------ ---------- ---------- ---------- ---------- ------------
SUGAR 6 5136 2097152 256 6
-- dba=6,5136后面有256块没有使用。
SYS@book> @ &r/hide _kttext_warning
NAME DESCRIPTION DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE
---------------------------- -------------------------------------------------------- ------------- ------------- ------------
_kttext_warning tablespace pre-extension warning threshold in percentage TRUE 5 5
-- 40*0.05=2.00M,基本符合要求,不过我的alert*文件,没有相关信息。
4.优缺点:
--//这种特性既有好处也有缺点,链接里面https://oracleblog.org/working-case/big-file-tablespace-cause-issue-when-pre-allocation/
--//如果是大文件,或者数据文件很大,比如20G,这样20*0.05=1G,一下增加1G,或者像链接里面提到的使用大数据文件,这样可能出现问题。
--//从我个性讲我喜欢在生产系统增加文件一次性增加好几个,每个大小都是32G-8K,选择不自动扩展。