关于数据文件autoextend on的一点记录

有个应用联系我说他们在进行业务数据导入的时候提示表空间不足,于是他们问我该表空间是自动扩展的,为什么还会提示空间不足呢?

对于这个问题我自己也有2个疑问,
第一个是自动扩展为什么还会提示空间不足呢?
第二个是autoextend on 默认的next值是多少?


我做了以下的试验,USERS表空间下有1个数据文件,在对其开启了自动扩展以后,我们查看它的DDL语句发现NEXT值为8192,也就是说一次会扩展1个块8K的大小.
对于上面提到的问题,我还注意到maxsize值为10M,也就是说该文件虽说开启了自动扩展,但最大只能使用至10M,这也就是为什么会提示空间不足的真正原因,被maxsize值限制了,这个值默认是unlimited,这个10M可能是在创建表空间时指定的,所以第一个问题解答了。

SYS@em12c>set long 99999999
SYS@em12c>select dbms_metadata.get_ddl('TABLESPACE','&tbsname') from dual;
Enter value for tbsname: USERS
old   1: select dbms_metadata.get_ddl('TABLESPACE','&tbsname') from dual
new   1: select dbms_metadata.get_ddl('TABLESPACE','USERS') from dual


DBMS_METADATA.GET_DDL('TABLESPACE','USERS')
--------------------------------------------------------------------------------
  CREATE TABLESPACE "USERS" DATAFILE
  '/oracle/oradata/em12c/users01.dbf' SIZE 5242880
  AUTOEXTEND ON NEXT 8192 MAXSIZE 10485760
  LOGGING ONLINE PERMANENT BLOCKSIZE 8192
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT
 NOCOMPRESS  SEGMENT SPACE MANAGEMENT AUTO
 
第二个问题,autoextend on 默认的next值是多少?上面5M的数据文件next值为8k,我们再看看其它数据文件的情况呢?
我测试环境下这个大小2G的数据文件next值为20M,另一个大小32G的数据文件next值为50M,这个值根据数据文件大小自动调整的吗?


DBMS_METADATA.GET_DDL('TABLESPACE','MGMT_ECM_DEPOT_TS')
--------------------------------------------------------------------------------
  CREATE TABLESPACE "MGMT_ECM_DEPOT_TS" DATAFILE
  '/oracle/oradata/em12c/mgmt_ecm_depot1.dbf' SIZE 20971520
  AUTOEXTEND ON NEXT 20971520 MAXSIZE 32767M
...

DBMS_METADATA.GET_DDL('TABLESPACE','MGMT_TABLESPACE')
--------------------------------------------------------------------------------
  CREATE TABLESPACE "MGMT_TABLESPACE" DATAFILE
  '/oracle/oradata/em12c/mgmt.dbf' SIZE 209715200
  AUTOEXTEND ON NEXT 52428800 MAXSIZE 32767M
...
 
我将这个数据文件用数据填充至2G大小,看看next是否变化,在不变插入数据时,可以看到很多等待事件是由于init file造成的,
说明在数据文件扩展很频繁时,过小的next size是很影响性能的。所以当我们看到很多等待在Data file init write事件的时候,
也说明autoextend on next值设置过小了。 

*** 2016-10-12 12:14:13.221
WAIT #140465064598264: nam='Data file init write' ela= 4595 count=1 intr=256 timeout=4294967295 obj#=-1 tim=1476245653221043
WAIT #140465064598264: nam='Data file init write' ela= 4936 count=1 intr=256 timeout=4294967295 obj#=-1 tim=1476245653226491
WAIT #140465064598264: nam='Data file init write' ela= 7302 count=1 intr=256 timeout=4294967295 obj#=-1 tim=1476245653234144
WAIT #140465064598264: nam='Data file init write' ela= 3459 count=1 intr=256 timeout=4294967295 obj#=-1 tim=1476245653238035
WAIT #140465064598264: nam='Data file init write' ela= 4133 count=1 intr=256 timeout=4294967295 obj#=-1 tim=1476245653515536
WAIT #140465064598264: nam='Data file init write' ela= 4447 count=1 intr=256 timeout=4294967295 obj#=-1 tim=1476245653520532
WAIT #140465064598264: nam='Data file init write' ela= 3786 count=1 intr=256 timeout=4294967295 obj#=-1 tim=1476245653524725
WAIT #140465064598264: nam='Data file init write' ela= 3239 count=1 intr=256 timeout=4294967295 obj#=-1 tim=1476245653528313
WAIT #140465064598264: nam='Data file init write' ela= 8088 count=1 intr=256 timeout=4294967295 obj#=-1 tim=1476245653536716

--这里可以看到数据文件已经自动扩展到4G大小了,但是next值一直是8k,没有变化。
Name                           Type      Managment       Files    Size(M)    Used(M)    Free(M)    used(%)
------------------------------ --------- ---------- ---------- ---------- ---------- ---------- ----------
USERS                          PERMANENT LOCAL               1     3617.1       3585       32.1      99.11


SYS@em12c>select dbms_metadata.get_ddl('TABLESPACE','&tbsname') from dual;
Enter value for tbsname: USERS
old   1: select dbms_metadata.get_ddl('TABLESPACE','&tbsname') from dual
new   1: select dbms_metadata.get_ddl('TABLESPACE','USERS') from dual


DBMS_METADATA.GET_DDL('TABLESPACE','USERS')
--------------------------------------------------------------------------------
  CREATE TABLESPACE "USERS" DATAFILE
  '/oracle/oradata/em12c/users01.dbf' SIZE 5242880
  AUTOEXTEND ON NEXT 8192 MAXSIZE 15360M
...

后续当数据文件扩展至8G大小时next值一直是8k,没有变化。
我又在ASM下和Exadata平台下进行了一个简单的测试,发现在ASM平台下autoextend on next默认值是10M,而在我的Exadata X4的ASM平台下发现autoextend on next默认值是100M,看来这是oracle针对不同平台作了优化。

所以我认为第二个问题的答案是不同的平台,autoextend on next默认值是不同的,ASM平台下已经做了优化。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26753337/viewspace-2126175/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26753337/viewspace-2126175/

你可能感兴趣的:(数据库)