oracle数据库性能优化-降低IO
# u2 q$ J! ^: U. \. `! i% L
0 E- g# c6 m3 k# P+ h2 N# w) V$ ` 影响到oracle性能的因素主要可以从硬件和软件两个方面划分,本文通过对oracle数据库架构的分析,提出从硬件方面OLTP系统优化oracle数据库性能的方法,不足之处欢迎拍砖。! ~2 R1 S/ i: C* }
# ?9 @: S. o) ?3 g
oracle数据库物理存储架构:) L! h" X& O# l5 G1 s
, _, o7 x- Z/ p4 m) ]4 L( X3 r1 Q oracle数据库物理文件增长情况:1 e# C4 q- C6 i7 \+ } b& T3 H
+ P1 I) Y1 ~: f8 ]' C; W+ `
Oracle archived REDO log files增长快,说明redo log写入很频繁。1 |. X+ i- g% I' r4 w0 \
- w" ^* T# a3 J1 u: d) }
从实际大数据量和高性能OLTP应用系统性能测试发现,磁阵IO是限制系统性能的瓶颈,因此降低IO是oracle数据库优化的关键,结合oracle数据库物理存储架构图、数据库物理文件增长情况和实际测试发现,给磁阵IO带来很大负荷的是redo log文件、数据文件、索引文件的读写三个方面,并且当数据量、性能和持续压力时间都达到一定的量时,这三者产生的IO负荷相当,因此降低磁盘IO的最终目标也就是降低这三类文件的IO,通过将oracle的redo log文件、数据文件、索引文件都建立到内存盘上的实际测试结果表明,采用这种几乎零IO的模式很大程度的提高了oracle的性能,
7 U' k8 S1 N- O3 z Q+ _8 S/ e 7 n: E1 i# z r* r" H+ f
基于以上分析,可以对oracle数据库的IO做以下优化:' \$ B3 I% g7 M9 c l+ C
0 ?/ ^! d, t3 D4 `; L* r
1 固态硬盘存储redo log,提高redo log的写入速度,4 r0 z3 j, ]. y, P b" q. }( K
, V1 g1 [/ W* N/ m8 T! B0 b 从实际运用的角度看,由于内存盘的易失性,把redo log文件建立在内存盘上是不安全的,再考察redo log文件具有大小稳定,一般在2到3个G之间的特性,因此把redo log文件建立在固态硬盘上是个不错的选择
$ z$ m4 |% I7 c, r+ j 9 ]6 b" o5 Q) V6 Z! f2 `, R& I* s
2 由于内存足够大,因此将临时表空间建立在内存盘上,对于统计、大数据量查询、大数据量
* K' @5 E2 z+ ^8 j# R- d/ | N6 h, r& s% Q& c
sql运算(比如:group by、sum等)的操作,2 k; A. v. t0 N- L
$ Q6 H/ S: A1 m6 y' G y9 N 需要大量临时表空间存储临时数据,这些临时数据就直接存储到内存上了,消除了oracle的大读取和大运算产生的临时IO
. {4 n5 A5 [4 d- e: H# C5 `
0 y1 p4 a8 V* H0 k* u; d 3 由于索引具有可以根据数据文件重建,不怕丢失的特性,0 M8 f$ @+ @7 ]; x( ?0 Y
P, B( H& f6 B 把索引文件建在临时文件系统上,oracle每次启动时重建索引,这样平时的读写操作就不会产生索引IO,索引的更新和读取都在内存上进行,4 l# H" u c4 e3 _! V: N+ r
7 v5 f, i! G) J. [" `2 o
系统由于各种原因出现重启时,仅在重启时重建一次索引
) O' k& P# f {8 d+ N
- Y6 S; R: i l- B* N. G 本文观点基于目前系统内存都非常大(一般都是几十G甚至以上)的情况下所做的优化,/ F( @' q' ^: |: O# u7 x
; B4 o- O$ ?5 e. @- e2 d; ^3 z 基于以上优化,把影响oracle IO的三大因素去掉了两大因素,因此性能上有望达到倍增的效果。 |