如何整理oralce空间

上一篇 / 下一篇  2008-06-15 20:46:47 / 个人分类:Oracle

  • 文件版本: V1.0
  • 开发商: 本站原创
  • 文件来源: 本地
  • 界面语言: 简体中文
  • 授权方式: 免费
  • 运行平台: Win9X/Win2000/WinXP
51Testing软件测试网mY+w y!g(~B

ORACLE碎片整理  
,YF7S"E9R0   
a!A4t9O'R#O0 我们知道,   Oracle   作为一种大型数据库,广泛应用于金融、邮电、电力、民航等数据吞吐量巨大,计算机网络广泛普及的重要部门。对于系统管理员来讲,如何保证网络稳定运行,如何提高数据库性能,使其更加安全高效,就显得尤为重要。作为影响数据库性能的一大因素   --   数据库碎片,应当引起   DBA   的足够重视,及时发现并整理碎片乃是   DBA   一项基本维护内容。    
R4F f"q+G@z0   51Testing软件测试网)y,? O:@Zq|4a9K
  1   、碎片是如何产生的    51Testing软件测试网LTb&MM-Uv @
   
lK3d {\"K%^ r-t0  ----   当生成一个数据库时,它会分成称为表空间(   Tablespace   )的多个逻辑段(   Segment   ),如系统(   System   )表空间   ,   临时(   Temporary   )表空间等。一个表空间可以包含多个数据范围(   Extent   )和一个或多个自由范围块,即自由空间(   Free   Space   )。    
yEZu b;n$}0   51Testing软件测试网e/@`7X~5z,`+E:Y;C
  ----   表空间、段、范围、自由空间的逻辑关系如下:    
d.T'Uq\}0   
(}a t&F2G [u0  ----   当表空间中生成一个段时,将从表空间有效自由空间中为这个段的初始范围分配空间。在这些初始范围充满数据时,段会请求增加另一个范围。这样的扩展过程会一直继续下去,直到达到最大的范围值,或者在表空间中已经没有自由空间用于下一个范围。最理想的状态就是一个段的数据可被存在单一的一个范围中。这样,所有的数据存储时靠近段内其它数据,并且寻找数据可少用一些指针。但是一个段包含多个范围的情况是大量存在的,没有任何措施可以保证这些范围是相邻存储的,如图〈   1   〉。当要满足一个空间要求时,数据库不再合并相邻的自由范围(除非别无选择),   而是寻找表空间中最大的自由范围来使用。这样将逐渐形成越来越多的离散的、分隔的、较小的自由空间,即碎片。例如:    
0p s+J3w r0I/j0   
'_"Ue3G0k zZ^JQ0  2   、碎片对系统的影响    
5|Ad:[*Ri)k0   
$j wY%p I@0  ----   随着时间推移,基于数据库的应用系统的广泛使用,产生的碎片会越来越多,将对数据库有以下两点主要影响:    51Testing软件测试网4pw7K|$~~%kB
   
E)?8r5\?Vd0  ----   (   1   )导致系统性能减弱    
R2mg0Uk$o%R+e@0   
3QSj EG?HF0  ----   如上所述,当要满足一个空间要求时,数据库将首先查找当前最大的自由范围,而   "   最大   "   自由范围逐渐变小,要找到一个足够大的自由范围已变得越来越困难,从而导致表空间中的速度障碍,使数据库的空间分配愈发远离理想状态;    
6UDa*hy;zz8n*P0   51Testing软件测试网}e]TD
  ----   (   2   )浪费大量的表空间    
.x/f+Vfr0H6X%J0   
LX{b1gm6b `qo0  ----   尽管有一部分自由范围(如表空间的   pctincrease   为非   0   )将会被   SMON   (系统监控)后台进程周期性地合并,但始终有一部分自由范围无法得以自动合并,浪费了大量的表空间。    
]Xg,a9pV-bD0   
XnA"v2SA~ ba0  3   、自由范围的碎片计算    
"[I}n3faN}s0   
]"l#^"B j3wW6C)v}I0  ----   由于自由空间碎片是由几部分组成,如范围数量、最大范围尺寸等,我们可用   FSFI--Free   Space   Fragmentation   Index   (自由空间碎片索引)值来直观体现:    51Testing软件测试网l/F!L+FAi
   51Testing软件测试网I.^?(L8Y:VUc
  FSFI=100*SQRT(max(extent)/sum(extents))*1/SQRT(SQRT(count(extents)))    
*cvQw#pa0   
uo#@-MFX)C0  ----   可以看出,   FSFI   的最大可能值为   100   (一个理想的单文件表空间)。随着范围的增加,   FSFI   值缓慢下降,而随着最大范围尺寸的减少,   FSFI   值会迅速下降。    
%Exz a?(A/~0C.t0   51Testing软件测试网5Z(s1a~li,nH
  ----   下面的脚本可以用来计算   FSFI   值:    51Testing软件测试网2J#WolM-K&g+a4n+c
   
%oOanZ$bk&E9S0  rem   FSFI   Value   Compute    51Testing软件测试网zCC:G/E_Qn
   51Testing软件测试网/M3[L(]x&C&[
  rem   fsfi.sql    51Testing软件测试网-w%G1VVSp:A*\ u$@
   
eX)sq[f,Sm0  column   FSFI   format   999,99    
(}1MK&\*D ~0   
Qip bt1V8H"W0  select   tablespace_name,sqrt(max(blocks)/sum(blocks))*    51Testing软件测试网z a8l2P"J
   51Testing软件测试网CY1]3K`L3z.F
  (100/sqrt(sqrt(count(blocks))))   FSFI    51Testing软件测试网O4Hd&_k\K
   
)EA;v'Cl'j0  from   dba_free_space    51Testing软件测试网8[4h.^)^Q b-Z
   
'_M4U7[+l z0  group   by   tablespace_name   order   by   1;    
Ri QYE*L*n*{9}9vG0   
,bfnrsO uV+bxr0  spool   fsfi.rep;    
p `*v U:H6y&i0   
F'C*x5U'HJ0  /    51Testing软件测试网r-Q!Q kAh I
   51Testing软件测试网z*uR KD.^Q
  spool   off;    
9[7Fu I!_NY!U0   51Testing软件测试网x2]cM#U
  ----   比如,在某数据库运行脚本   fsfi.sql,   得到以下   FSFI   值:    51Testing软件测试网Q8Lh,n"zOY8~YB{
   
9baH'Y ^_SU\0  TABLESPACE_NAME   FSFI    
'E }F/h2Zy0   51Testing软件测试网!JP.@!X$F$d
  ------------------------------   -------    
.qv*W C;BQLsKZ2U0   
#P1WCF:Hz9sO Nf0  RBS   74.06    
h;|:S7mvvQE0   
;R/`5c2Oe].y)@%f0  SYSTEM   100.00    51Testing软件测试网jAc&Z6VjN
   
8esLw"Sc(];z d0  TEMP   22.82    51Testing软件测试网 f)pxq#AB4Y
   51Testing软件测试网SqS8@)hT7a
  TOOLS   75.79    
W.i hK*v*fz)C]8\xj0   
:Q GlmW,BT$~M!d0  USERS   100.00    51Testing软件测试网o!Jm:E:\ _6R
   51Testing软件测试网7IpK _h*@ ~
  USER_TOOLS   100.00    51Testing软件测试网+iK$|k8{v
   51Testing软件测试网2FET Y {_n
  YDCX_DATA   47.34    
1|3V4kE Og0   
xm#ZFz f0  YDCX_IDX   57.19    51Testing软件测试网H2g ZzG
   
p$V wr/Unn!~0  YDJF_DATA   33.80    
/ZU|)rsv[0   
A9C&tbn1g{0  YDJF_IDX   75.55    51Testing软件测试网A:KoZ/b
   51Testing软件测试网.nr'FoL)H8]
  ----   统计出了数据库的   FSFI   值,就可以把它作为一个可比参数。在一个有着足够有效自由空间,且   FSFI   值超过   30   的表空间中,很少会遇见有效自由空间的问题。当一个空间将要接近可比参数时,就需要做碎片整理了。  
W edsD,^0   51Testing软件测试网zB*T@1n(b%Bg
  4   、自由范围的碎片整理    
+m-|WRh mYcr.w K0   51Testing软件测试网)QE @,x7H@8T
  ----   (   1   )表空间的   pctincrease   值为非   0    
txOqIf P)o0   
'W2atl1m3p^L9T6l0  ----   可以将表空间的缺省存储参数   pctincrease   改为非   0   。一般将其设为   1   ,如:    51Testing软件测试网iv.vH6@Du
   
a"hM\kfjl6G0  alter   tablespace   temp    51Testing软件测试网3Wd j,Gl K d&w'o@
   51Testing软件测试网7Y[ON&i6^uM G s
  default   storage(pctincrease   1);    51Testing软件测试网s0OG F;\3Zpj0I
   51Testing软件测试网eL0aCCP Y
  ----   这样   SMON   便会将自由范围自动合并。也可以手工合并自由范围:    
(s9K~Pm5h"q0   51Testing软件测试网6d3EeYv"^"p"Wt
  alter   tablespace   temp   coalesce;    
2c R nk{!j0B)k0   
_+U RY/HJ,pL0  5   、段的碎片整理    51Testing软件测试网n-z.in n2TUpo
   
,|%xj:tu8w(f [0  ----   我们知道,段由范围组成。在有些情况下,有必要对段的碎片进行整理。要查看段的有关信息,可查看数据字典   dba_segments   ,范围的信息可查看数据字典   dba_extents   。如果段的碎片过多,   将其数据压缩到一个范围的最简单方法便是用正确的存储参数将这个段重建,然后将旧表中的数据插入到新表,同时删除旧表。这个过程可以用   Import/Export   (输入   /   输出)工具来完成。    51Testing软件测试网k ?\uz8g&k
   
XH zX,|;]0  ----   Export   ()命令有一个(压缩)标志,这个标志在读表时会引发   Export   确定该表所分配的物理空间量,它会向输出转储文件写入一个新的初始化存储参数   --   等于全部所分配空间。若这个表关闭,   则使用   Import   ()工具重新生成。这样,它的数据会放入一个新的、较大的初始段中。例如:    51Testing软件测试网J}4r u:q jr
   51Testing软件测试网#ocVlnH
  exp   user/password   file=exp.dmp   compress=Y   grants=Y   indexes=Y    
@tF@gt0   
fb6M5Wu(a+D*H4g0  tables=(table1,table2);    51Testing软件测试网!s`M @lkx(Z&n\S
   
D&AZ:JOiG0  ----   若输出成功,则从库中删除已输出的表,然后从输出转储文件中输入表:    
4p A\4dq:C0   
K\ T#G0tQ;H}0  imp   user/password   file=exp.dmp   commit=Y   buffer=64000   full=Y    
A^T4Y+GW I'KE0   51Testing软件测试网@TJF*m4b
  ----   这种方法可用于整个数据库。  

M:C\2t"{#lsT}`0

oZ B3c7J8P ]{0select   *   from   dba_tablespaces   where   tablespace_name   ='XX';  51Testing软件测试网 Pem:HFf
   
x6{0g)G tH5JO0   51Testing软件测试网"\5en:I[%@/GA
  扩展可以调整表空间对应的数据文件的大小,或者为这个表空间添加数据文件  51Testing软件测试网 Q"nXKs8XZE
   
g:R%p2X,W0   51Testing软件测试网8UP#E-j\t+g h
  alter   database   datafile   '/u/dd.dbf'     resize     1000m;   51Testing软件测试网 e#rZ"ND#Q
   
:Uqp2q8wox0

J/Lox'F4g rb!@I0

TAG: Oracle

 

评分:0

我来说两句

Open Toolbar