我们拒绝平庸,拒绝随波逐流,拒绝墨守成规,让梦想不再流浪。

数据库军规

上一篇 / 下一篇  2014-06-23 15:46:03 / 个人分类:编程

军规条例

s ]8vAzW0

~"D#BTg?(R`D051Testing软件测试网AC1QgCEnxHt

军规一:【恰当控制事务大小,commit不要过于频繁。】

|n)~#uu`wBG0

a5@4L[i g:Y x0军规二:【在OLTP系统中一定要注意使用绑定变量。】51Testing软件测试网unkAV,]qP8ErE

51Testing软件测试网 mU{!N&mMT:f

军规三:【在OLTP系统中一定要注意复杂的多表关联不宜超过4个,关联十分复杂时,需要拆分成多个步骤,防止执行计划不正确。】51Testing软件测试网t[7\.RE:`iQ

51Testing软件测试网[*c/pN{~ ]W#Z

军规四:【合理收集统计信息,固定住SQL的执行计划。】51Testing软件测试网D.WA&h?`-?

9c])?:` GR*Ef!o0军规五:【尽量避免使用XA事务,在RAC环境中要避免XA事务跨节点操作。】

D$@+vS,R_'{Kn0o7J)y0

y h(M1[$W8`i:t0军规六:【不可以对表或索引指定并行度,如果使用Oracle并行处理方式(并行查询、并行DML),只能在具体语句中指定并行度。在并行建表或者建索引之后,需要手工设置其并行度为1。】

6c Ssh*InX2Y0

gIsYG_ r)R~0军规七:【避免频繁的检索lob类型及较长字符型的字段,尽量不要在较长字符串的字段上建立索引,如char(1000)、varchar2(1000)等。】

S#M,m:p,r j]~%c051Testing软件测试网(q}f'f] jrN-w

军规八:【任何表的设计都要考虑到数据的删除策略,表中的数据不能无止境的增长而不删除。对于大批量数据的删除,要考虑使用特殊方式处理,不要使用delete方式。】51Testing软件测试网/kx z+f5A*J

PU@@0j4{l#K!Z\|U0军规九:【合理设计数据库对象】51Testing软件测试网dh??#|1s

51Testing软件测试网0FU%m@/wsU*Zq {

军规十:【合理使用RAC】51Testing软件测试网#vqF2X9W p

Pmr;QI%_0

n8Ye}#Y)J1V0`"k8k0
)XY8C3K*u0

G(_K^)b0

+B/k&cOEf0军规说明51Testing软件测试网G*S0AwO9oD

2Qh$Mn } p9f6}0

(K1ocjyA0r:H0军规一:【恰当控制事务大小,commit不要过于频繁。】51Testing软件测试网M0W0FMIa

51Testing软件测试网:x z6s|V8l

& 说明

7b.M7E'x].k Vz051Testing软件测试网1a"Bf+r7ma h5Dv

1. 要根据具体业务合理控制事务的大小,在需要提交时才提交事务,不要无目的减小事务;

^j { Wr051Testing软件测试网 UU5W;OXpp7p

2. 事务过小,频繁commit会带来以下影响:

.m.qA+PH"z.W B.m0

@*EVr"Pr+x0Ø 程序性能降低,执行时间长,因为需要花费大量时间来等待log file sync事件;

%c-S3VuX0Ey \"Jbca051Testing软件测试网}t)K3l9I!S)M+d'jU

Ø 产生的总的redo、undo数量变大;51Testing软件测试网j*@1jR B0|.G?7f

51Testing软件测试网p0gt5w7X.\#z

Ø 系统总的栓锁数量变大,造成并发能力减弱;51Testing软件测试网5\4m9M,u\S3\$["EK;u

Hy2jZ5W?3y?7w0Ø 由于已commit的undo信息可以被覆盖,因此容易造成ORA-01555错误。

3A+B'S`4j co1r051Testing软件测试网3Q%W.LK jj%Obx

3. 事务过大,会带来以下影响:

}9neGqd0

5s kwN|#S9p7g+O0Ø 长时间占有锁,对其他相关事务造成等待;

)Bj]&L G(@/r+|)M+a0

(m+Ze j`"Bl_0Ø 产生大量undo,造成undo表空间严重扩张或不足。51Testing软件测试网N tu)rm.L;jNC

51Testing软件测试网Jo"g M/F-aHj

军规二:【在OLTP系统中一定要注意使用绑定变量。】51Testing软件测试网1aVG&j$|1o"G8M

p|TE0Dqlf0【示例】51Testing软件测试网2i:~V/JOH,o$A M{

0]fsNF\.o0不建议的写法:51Testing软件测试网_+P?C nQ

51Testing软件测试网d)D-fsW7g ? qF;l

declare

o?(U0f\7P:l051Testing软件测试网!AV,^0^kB|4s-t3E

type tcur_ref is ref cursor;

7[V u7e.~051Testing软件测试网P+^0D$Em"P

cur_obj tcur_ref;51Testing软件测试网y0]-w%eR gg

51Testing软件测试网)a;IVA%@+Gmzj

i_l_start number default dbms_utility.get_time;51Testing软件测试网t~Q V:_

51Testing软件测试网UY }[8I

str_l_dummy all_objects.object_name%type;

po,}I"R'~;y051Testing软件测试网zu%] o0x },l

begin

2ueO8A"}2l3jca0

]4v`i1k$T0for i in 1..100051Testing软件测试网 wio)q H3M.U

51Testing软件测试网g7t&aus

loop

6a1f:r2qz0

Ia5|qQ X0open cur_obj for

T-@$M9Cs{qZ[0

eecrs;S5S9R2EEW0'select object_name51Testing软件测试网%Zv!]La9~`

6ZH5\s+jN/Jo}v'y(m0from all_objects51Testing软件测试网 c8FP3u0l8p ]

51Testing软件测试网4[O5i j Rq`\3B!o

where object_id = ' || i; --未使用绑定变量

n7}8{t1`)G"X yV0

$ko6gIk8q0fetch cur_obj

3n OMJQQ0F^}`0

3z-rxo"NFb0into str_l_dummy;

(O Su ?8n?0

6N"@ }.q)`0close cur_obj;51Testing软件测试网p@ w)I(JRu!t

51Testing软件测试网5^qt^BM)u

end loop;

h"Q:]a,Dc051Testing软件测试网LY1j3k-o yG1F

dbms_output.put_line(round((dbms_utility.get_time-i_l_start)/100,2)||'seconds...');51Testing软件测试网 ^5N@1PL ~

^heS`*^op&jmUZ0end;51Testing软件测试网"IW WV;wE.i#a g

^$z w{@a&S/w0推荐写法:

LO0j!\[pu#a051Testing软件测试网-U:U6_1mAS&d

declare

Xhq Xc+N'xF JM[051Testing软件测试网`y }'t;XJz

type tcur_ref is ref cursor;51Testing软件测试网3gl C.G ?f&x

51Testing软件测试网u"tr,TZM

cur_obj tcur_ref;

d4~7KyHY0

0i L~^}A%CT(w9K0i_l_start number default dbms_utility.get_time;51Testing软件测试网 q};N B:|5i.E

T TSg;pp}0str_l_dummy all_objects.object_name%type;51Testing软件测试网2wH6A\Xk$u3V}

51Testing软件测试网"J9EP]#ZN:V"Y`

begin51Testing软件测试网sI*k \X%^:Tm)_

51Testing软件测试网4Ct%Pb/q"{

for i in 1..1000

b&GNF"ABw/R051Testing软件测试网A_ bXq

loop

7OgP:Bi8F3@0

9k Ws+J F+~ u0open cur_obj for51Testing软件测试网+Q"VH$z8Lh Nd!Lv

#u0D.L"cP ~0'select object_name51Testing软件测试网'S@@)N+d@"G\e

51Testing软件测试网6o-pS [T]vH

from all_objects51Testing软件测试网#S7EiVB.i

51Testing软件测试网"F.kM0? I

where object_id = :x' using i; --使用了绑定变量

wa's5nz051Testing软件测试网h(P$~Izc'vx

fetch cur_obj51Testing软件测试网)p#ZPw!K8n#[%~*\

51Testing软件测试网8m4g~-r;lv2?-E!lW

into str_l_dummy;

r7Bt w?eR|v051Testing软件测试网]EX5I]a

close cur_obj;

D/}2IyedC7S051Testing软件测试网S H_^8w*i3O$B[

end loop;51Testing软件测试网,r!JA!I }D6H ~

51Testing软件测试网 [&xR"OZB(e

dbms_output.put_line ( round ( ( dbms_utility.get_time-i_l_start ) / 100,2) || 'seconds...');51Testing软件测试网 WT(n;Y9Z @+EJ#_

51Testing软件测试网6|@m~3r I,T

end;

q'|&M5Kz^lr2r051Testing软件测试网A6S{Hb)h

& 说明

!k#L%o'm7x:^0

0p Q!S7?_8Q01. OLTP系统的特点是同一个SQL语句的执行频繁度高,因此,减少分析时间和减少消耗在分析上的资源是非常重要的。不使用绑定变量会引起下面的问题:51Testing软件测试网 M'G.l!cQ5UwX

51Testing软件测试网SM"X-I iX;|1R

Ø 严重降低系统的并发能力。不绑定变量会造成过多的硬分析,过多的硬分析会导致共享池的栓锁争用,而过多的栓锁争用会严重降低系统的并发能力。51Testing软件测试网uP@ fL0x w#u V

x!R"Ri,uR yk.N0Ø 容易引起ORA-04031错误。

V/o0K`f6t`-?Sq051Testing软件测试网Dc({ K5Zi)]wl

2. 数据仓库系统的特点是同一SQL语句的执行频繁度低,因此,分析时间和分析所消耗的资源可以忽略,使SQL语句根据实际的数据分布获得一个最佳的执行计划才是最重要的。因此,数据仓库系统中是否绑定变量并不重要,而且由于Oracle Peeking机制的问题,绑定变量可能会引起软分析的SQL语句执行计划不合理的问题。

,o@_TfN0

E7mj G [)q%PG051Testing软件测试网W(MY d8qS!I

I-c5cy8x0军规三:【在OLTP系统中一定要注意复杂的多表关联不宜超过4个,关联十分复杂时,需要拆分成多个步骤,防止执行计划不正确。】51Testing软件测试网tBD-u \mi)H)c

:[phC$Q'L']0

0i4E2w(PE1?-N051Testing软件测试网7Aa4E6~A#t:J)JHe

军规四:【合理收集统计信息,固定住SQL的执行计划。】51Testing软件测试网i9VM/AC_D

)Xfjs0i Z)HI7C C0& 说明

HD9i!Qgrq(AX B9E0

&Ezx+?&|Ghg r L ^ b01. 数据库优化器是根据统计信息来判断执行计划的成本,因此,正确的统计信息有利于优化器产生正确的执行计划;

1z]9]0wt051Testing软件测试网s)V6ZJ4fJJ

2. 统计信息收集策略可以采用如下方式:

k;{7V/U$a}%K051Testing软件测试网B$xy)r|F4R

Ø 方法1:实验室中构造基准数据,收集统计信息并验证,随业务版本发布。

p|w:g `la(JI051Testing软件测试网0N@Y @H d

Ø 方法2:在现网收集并锁定统计信息;收集新导入对象的统计信息;当某些对象统计信息不对的时候,重新收集这些对象的统计信息。

.m"ob zYQcm5M051Testing软件测试网2jZN$Yg }6r

Ø 方法3:采用“90-9-1”收集原则,90%采用自动收集策略,9%定制收集策略,1%加提示或者profile固定。51Testing软件测试网O*R2E9h$Q5G4\rv

51Testing软件测试网.R ]9E-^ r

3. 无论采取何种策略,必须保证实验室和现网SQL的执行计划一致,每个SQL上线前必须验证好执行计划。51Testing软件测试网2~+FY%`f$?N

51Testing软件测试网Zop)?BNB

51Testing软件测试网B-p9ox'o)q,W%C1on1Y

| [D!vp;[8y8{)P^0军规五:【尽量避免使用XA事务,在RAC环境中要避免XA事务跨节点操作。】51Testing软件测试网%u!A%N/?#^ssQ,[:W

MJ3Z%^c ~y0& 说明51Testing软件测试网"d3a&E C"`1i#Cr

q%bh NUF(i Z:QA/}01. 使用分布式数据库的时候,业务尽量隔离开,减少使用XA事务,如果大量出现了XA事务,需要考虑业务分割的是否合理。51Testing软件测试网 t]1zz4s%R/q-C

51Testing软件测试网c |)B1Z7ZN

2. 在RAC中,禁止将XA事务分布在多个节点上,避免XA事务跨节点操作。

bL2H9Pv$G051Testing软件测试网'v6J ODX"L:Y\:s

"O`Bbd I;aB051Testing软件测试网$|"dS%d|uK Q

51Testing软件测试网7[l gF+IUvcyA,v3Z

6_G3p7R,c7p*m0军规六:【不可以对表或索引指定并行度,如果使用Oracle并行处理方式(并行查询、并行DML),只能在具体语句中指定并行度。在并行建表或者建索引之后,需要手工设置其并行度为1。】

7TL)_be%k t0

!B7Sx!c^b/W051Testing软件测试网&s8Hg+FuM Z!Z

51Testing软件测试网$iU'b/ZA#i:DT1O

军规七:【避免频繁的检索lob类型及较长字符型的字段,尽量不要在较长字符串的字段上建立索引,如char(1000)、varchar2(1000)等。】51Testing软件测试网!Mloi7k

51Testing软件测试网L~6G.}7t1Jr

51Testing软件测试网'T3O{U?7xq0N

Fd'x'T&A&_j!C6D0军规八:【任何表的设计都要考虑到数据的删除策略,表中的数据不能无止境的增长而不删除。对于大批量数据的删除,要考虑使用特殊方式处理,不要使用delete方式。】51Testing软件测试网zw{^ dP]

51Testing软件测试网,T/L sR6^7qF_ab

& 说明

AJ3lfB0s?:\I051Testing软件测试网5a'~ ]?z&EK

delete不会释放高水位(HWM),一来造成空间的浪费,二来会导致效率的下降,另外delete方式删除大批量数据的效率也是极差的。可以考虑使用分区表和truncate、create table as等方法。51Testing软件测试网+liW@G

51Testing软件测试网3o7d+Nf2Pa8Y

51Testing软件测试网*j&]xJs/b2@N#C;nV

d,Kx8TdU.j0

$R3{`!Q'T051Testing软件测试网)L5^-|*o;@F;vf n9l

军规九:【合理设计数据库对象】

V(TI5`.oZk Lx0

5@D)t;I$XU2U\:}0数据库对象是SQL优化的基础,由于数据库对象一旦建立,后续整改将十分困难,因此在设计过程中就需要考虑扩展性、性能、可维护性等相关因素。51Testing软件测试网X9b S}d6gE)b.N

51Testing软件测试网q$Ef F D!C)o

以下关于数据库对象的设计要点是一定要遵循的:51Testing软件测试网/u t1M-F_` ^/K.[jD

51Testing软件测试网ygMW}:y5PmHF

名称51Testing软件测试网X0`"f$@8Gy,x

51Testing软件测试网3E)|t g4i[/g{

要点

0~*ejtiBFR051Testing软件测试网t,M [$O.J G!J

表空间设计

;n$u+a ?z9`,sdu*eH051Testing软件测试网};@` b|

1.空间根据业务特征或者功能特征进行分离。

z7D Dlg051Testing软件测试网3DtY*LB+P`c

2.数据文件的数目不宜过多也不宜过少,过多会导致占用较多的资源,过少会导致资源竞争。51Testing软件测试网qYa,D%R@W3C p3\

6bN0I/gqD03. 新建立的表空间必须采用本地管理和自动段空间管理。

YH"f(H4jBX0

&~OvA0\TB04. 没有必要频繁的整理表空间中的碎片。

,ZMm0_I^O Z051Testing软件测试网V}/D)\%U/?R[

表设计51Testing软件测试网:j1y3~Oa l

51Testing软件测试网)SS|(G2Bn

1.数据库表和字段命名必须规范。

IF*P"^l(I^l#|051Testing软件测试网n RwI@:_'Gp-i r0L P

2.字段数据类型定义必须规范。

~k!f#g nuG!^;k#|.L051Testing软件测试网/U%NwYE^

3.表的设计要尽量满足第二范式。51Testing软件测试网2u U$L1C0v)xA$w:lu

51Testing软件测试网+hjn ms.f.KY

4.任何表的设计都要考虑到数据的删除策略,表中的数据不能无止境的增长而不删除。51Testing软件测试网Il,T[;^ ] O

9E;{i.t J;b05.除非基于特殊情况考虑,通常情况下每个表都要有主键。51Testing软件测试网JC By%A

/Z ~+hC{g-p"XS06.尽量避免使用大字段(LOB)或者超长字段(varchar2 > 1000)。51Testing软件测试网%d*cCw^E*[2I?

51Testing软件测试网T%Pz x*TO}7t!|,h K

索引设计51Testing软件测试网:i.^Q+u5Y0P#d

51Testing软件测试网8hR0W!]@

1.数据库索引命名必须规范。

z(nq9gu0

8r)V7|is6Z02.表的主键、外键必须有索引。

*|5lN7l!w051Testing软件测试网)k$B5OG$FY

3.经常查询且选择率低于5%的列需要建立索引。

4~Ii3@)j"Z051Testing软件测试网%F }F7l(i @&tL`

4.经常与其他表进行连接的表,在连接字段上应该建立索引。51Testing软件测试网0y&B%_Tl G1T.y,V%l

51Testing软件测试网6K!gfy'v-b

5.位图索引适合于DSS或者OLAP,不应该在OLTP的系统中或者DML操作较频繁的列上建立位图索引。

&u(@:Rht;f0

q(VFq,_*O Z06.可以适当的使用函数索引来完成特殊的优化。51Testing软件测试网0b] C(SM

kD5m Ay5uW07.避免大范围的使用复合索引,复合字段不宜过多。

9S%v:JzLnB3l7p0

$w6iz)i\)MS0WA0分区设计51Testing软件测试网L$H)I_.r G-e7s4d

Evv:t3h:a,cf01.分区表上尽量使用本地索引。

!g$mfj?#O051Testing软件测试网KvD \5w;rJo

2.使用分区表可以有效地分割数据,易于管理,提高性能和可用性。

\ RR"Av0

2c| o'vms s.x03.依据业务特性合理的设计与使用分区表。51Testing软件测试网%gi ^.Vp],KZ

SA+dJw9\ y051Testing软件测试网M]m/R ]{A^C

1.1 表空间设计

R9u `J.I.P"c01. 用户表空间与系统表空间(system、sysaux)分离。

'E)s1qO;uIZ051Testing软件测试网 U2rT,[ovO6RUK

2. 数据表空间与索引表空间分离。

'@2FhFo-s%}oG051Testing软件测试网^4} {`+f ey

3. 业务表空间与日志表空间分离。51Testing软件测试网?f1X)k,W C;G b

51Testing软件测试网4Ec!xp `

4. OLTP系统最好不要使用BIG FILE TABLESPACE。

sBA$Ms_#m0

VbLH9?EnV]05. 小型数据库数据文件统一使用8GB;中型数据库数据文件统一使用16GB;大型数据库数据文件统一使用24GB,不允许使用数据文件自动扩展。

[.gD.R*GV0

3[*J3u$Mu gA06. 用户新建立的表空间必须采用本地管理和自动段空间管理。

J"s+`ld~.N0

$Ek's'pQg07. 没有必要频繁的整理表空间中的碎片,除非碎片率达到了80%以上。51Testing软件测试网CZ1l~Y A}Pq

51Testing软件测试网&Ml$nj;H

8. 如果表空间因频繁的DDL操作出现碎片,建议设置表空间的UNIFORM. SIZE为合适的数值(例如1MB),来减少碎片的产生。

SO{c[ZL0

!Qx1zop Q+kMZ051Testing软件测试网*sl/DGo#a%bB1z&v-E

表设计51Testing软件测试网%gS ? Q.Q)}h;N;z

数据库表名和字段命名规范

k7LiRddz051Testing软件测试网6S$Az"K nhKS{&j

1. 数据库表名必须使用前缀“T_”。

W`7fY |8a3c6fa051Testing软件测试网3R j2c]3Dh0D9?

2. 命名尽量采用富有意义、易于记忆、描述性强、具有唯一性的英文词汇,不准采用汉语拼音。51Testing软件测试网)J e3ny4oa9r6AU

51Testing软件测试网:^)cZH:~

3. 命名不允许超过30个字符。51Testing软件测试网6V*Ta+u c

51Testing软件测试网5DJ u}]k B Us

4. 命名采用英文单数,不允许使用复数形式。51Testing软件测试网?+] a+R1K.Z

ZlK{c8T'@}0NN8Wq05. 命名尽量简短,最好不要使用英文缩写。

+x}6hI,inF\051Testing软件测试网z(uEqu7h9O!OB4] w

51Testing软件测试网(t.HrPa(Qs:}

51Testing软件测试网RDgr#K:~ ~3Y'By

字段数据类型定义规范51Testing软件测试网([7h;Lj Y4Ky+z

.J,u^(D$j9z4oJ01. 数字类型一律使用NUMBER[(precision, scale)]定义。51Testing软件测试网D4q~+v/k&Iwu:g'R

51Testing软件测试网#KN*Q'w+J2yq;s5D

2. 字符类型一律使用VARCHAR2 (size byte)定义。

Z%a"S5m$BK^0

:u2[M x CF8]1ga03. 时间类型使用DATE定义,如果时间要求精确到毫秒级,可以使用TIMESTAMP[( precision )]定义。51Testing软件测试网+k^YD ei x z

zm1}&Z,j q#_04. 除非特殊要求,否则不允许使用LOB数据类型、BOOLEAN数据类型和用户自定义的数据类型。

Vd'hsl;OS1N8u Id0

pG!G-~/}05. 确保数据类型定义的精度(precision或者size)能够包含字段所有的取值,最好是留一定的冗余。51Testing软件测试网["f*@,o s^

51Testing软件测试网\,F:p@G Z'iZ;|

6. 对于不同表的相同字段,必须保证字段名和字段类型完全一致。

"FjlVs0

:s})Y3t"Q051Testing软件测试网 Ah$OEH

51Testing软件测试网:l"IlxZ*y;^pR,W

设计原则51Testing软件测试网8bm8o)`8_QH

K)Ts$J8C01. 任何表的设计都要考虑到数据的删除策略,表中的数据不能无止境的增长而不删除。51Testing软件测试网+d,RxF j-Dv-L8]W

'D6WP&V[X0]g&kr&C02. 严禁将业务数据放在系统表空间(system)中,必须有独立的表空间存放业务数据。51Testing软件测试网ttb??;M

sa.\6z;}X*MjWc03. 在不同业务系统共用同一个数据库时,要注意不同业务系统的对象必须存放在不同的用户下面,绝不能混放在同一用户下。

r G!\9?-n)O"v||+{ `0

\1Vv-c#\8TM5}+MM%Y^04. 严禁使用sys/system用户存放任何业务数据。51Testing软件测试网Qy1XH L(X,V

51Testing软件测试网iE&~3g_

5. 不可以对表或索引指定并行度,如果使用Oracle并行处理方式(并行查询、并行DML),只能在具体语句中指定并行度。

*FN It-C"kI051Testing软件测试网(?o KL#jQ%w2?_

6. 除非基于特殊情况考虑,通常情况下每个表都要有主键。51Testing软件测试网4])I:_1M'|u

51Testing软件测试网1PI Z:OI|E

7. 表的设计要尽量满足第二范式(2NF),基于提升性能的考虑可以适当增加冗余而不必满足第三范式(3NF)。

!l(Sa%w2e*P*TU051Testing软件测试网1],N$skv4ZP8~rS

& 说明

8ktj0dq}@051Testing软件测试网1Cx2R t'Lk1Wy

【第一范式 1NF】

z ]1TX.}9@Y0

9J+_5iY2yLo0定义:表中每一条记录的每个一个字段值,都是不可再分的最小数据单位。51Testing软件测试网_)U!O0rS.p"F bHyU

51Testing软件测试网 {*N ZhAV

【第二范式 2NF】51Testing软件测试网N-ZqE*gu7qE?2nm*sh

51Testing软件测试网 x x2~nn [M_

定义:在满足1NF的基础上,每一个非主键字段必须完全依赖于主键。只有在复合字段作主键时,才可能出现不满足2NF的情况。

6J p5uYv3_051Testing软件测试网^C vRR0} IX F1Hh

【第三范式 3NF】51Testing软件测试网Zb0Wt-g)Wn

51Testing软件测试网*N MI ulC

定义:在满足1NF和2NF的基础上,所有非主键字段对任何主键字段都不存在传递依赖。

/dcxFI\051Testing软件测试网prU%mDI

8. 不建议表中存储过多的null值,要考虑使用not null约束。或者,可以考虑字符串使用NA,数值型用0作为缺省值。51Testing软件测试网3J4KP-u(gM

51Testing软件测试网}pE4^\7Q _3JGO

9. 对于大数据量的插入,在设计上应考虑使用分区交换技术。51Testing软件测试网XK {2o-m+gj

!~6s4_.BB010. 在数据库中实现数据完整性校验,不推荐在应用中完成对数据完整性校验。

@S;W#oTl1O051Testing软件测试网a0wY7j;CNr#K

11. 不推荐用字符类型存放时间或日期类数据。

$E2n,` I-L2u)tlT+u2bA;L0

[`{ B6`{]012. 不推荐用字符类型存放数字类型的数据。51Testing软件测试网0_M:p/to I9u

|'vn S sg013. 不推荐表中字段数字类型直接使用INT型,应明确写明字段的取值范围,如number(8)。int 型在数据库中表示为number(38),造成存储空间浪费。51Testing软件测试网B`,@ EGz|

`0c V4f%s f S"`R014. 要区分近期记录和历史记录,不能把所有记录放都放到一个表中,要有历史表,要有定期删除历史表记录的功能。

m#H_%a+U9Bt.?0

JR'ka#W;vo{015. 尽量避免使用大字段(LOB)或者超长字段(varchar2 > 1000),如果不可避免,则尽量不要在较长字符串的字段上建立索引;尽量避免对大字段值进行order by、distinct、group by、union等会引起排序的操作;尽量避免频繁的查询与修改大字段。

*}$z+B'K0DM:{j3t\051Testing软件测试网$e5?5?K%|8B5m

_2zA3R9oq7Sun0索引设计

7xp ~o'\X0数据库索引名和字段命名规范51Testing软件测试网6{,R(N l.JG:^!C

%r0s$Ty9d6g(zHz01. 数据库索引名必须使用“IX_TABNAME_COLNAME”。51Testing软件测试网\)z0|;{._D@)qJ.J

)d"`QJ~R02. 命名尽量采用富有意义、易于记忆、描述性强、具有唯一性的英文词汇,不准采用汉语拼音。51Testing软件测试网0F U6p/`!_P

/V'M"c"gJ&of1V8~-q03. 命名不允许超过30个字符。51Testing软件测试网^od$x/P$bj#G |S

Dq3D2v X]04. 命名采用英文单数,不允许使用复数形式。51Testing软件测试网w:Pb3E `7X2c&v

51Testing软件测试网0?hC3C/s(Xo'J.A

5. 命名尽量简短,最好不要使用英文缩写。51Testing软件测试网(u.N5Tb`2j(b-UD2I

;_ S1^6e[nK2W0

&WC7y'K"x,O0

]!U*M"c,kn+`d dt(A0设计原则51Testing软件测试网?g:P9b&F9K Y

,AE:gc(AYP!^KH01. 表的主键、外键必须有索引;51Testing软件测试网 A8D[DM }M

51Testing软件测试网J _`Xr2EB2E

2. 经常查询且选择率低于5%的列需要建立索引;51Testing软件测试网:Z E3K1|&ali/L.?2sK

Lzb_J03. 经常与其他表进行连接的表,在连接字段上应该建立索引;51Testing软件测试网"h@ a!LzP.mo

51Testing软件测试网dh g)K m

4. 经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;

7Kxb oP051Testing软件测试网*B W$c1Bzb;Dl

5. 位图索引适合于DSS或者OLAP,不应该在OLTP的系统中或者DML操作较频繁的列上建立位图索引;51Testing软件测试网(V(j~'Q+T"Q

w)vnr;H'^ }06. 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;51Testing软件测试网mhJF*Ml9LM M Bk

'VV;Vzk*Y)Q0ws07. 复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:51Testing软件测试网;yf6f}j r&Vf1h

$@jg{IpN!D5DI0A、正确选择复合索引中的主列字段,一般是选择性较好的字段;

O:gu*u `7OK9k6U051Testing软件测试网7jT_['g0Jjv#{0| J

B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;

A"wYt pc"C^051Testing软件测试网XY^Om_R

C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;

C`\? Kq"n}0

G*Lw-lxc I/O0D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;51Testing软件测试网cB%g#atuLp y V~+}A

Yb4m&VJ%i`7a0E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;51Testing软件测试网'i}|Tj-Z0A:d

5Jd8KS8`$Qxxs08. 频繁进行数据操作的表,不要建立太多的索引;

XW;l7q o\051Testing软件测试网jKoTW F}

9. 删除无用的索引,避免对执行计划造成负面影响;

yb1v,B U:q W051Testing软件测试网8R^8{bj!DD

10. 分区表上尽量使用本地索引,否则在分区维护的时候必须重建索引;

,]1]9|Hg1^ t051Testing软件测试网/X0N5Y9DGUo ~OG

11. 可以适当的使用函数索引来完成特殊的优化。

(^,HBi/YG051Testing软件测试网J [.VRm;T

s8` @6],h1O)U0分区设计

d]r&h [u]0分区的目的

8Lc,V'q9szY5Ri(xR051Testing软件测试网`/J0G'_6e_'A&P }e

1. 易于管理:随着数据量的递增,表和索引越来越难维护,增删改查的速度也会越来越慢,使用分区将表和索引分割成较小的单元,便于维护与管理。使用分区能够聚焦于特别的分区,比如按月分区表,只需要备份当前月的数据,因此可以使用partiton指定到本月而不用全表备份。在清理历史数据的时候,只需要针对历史分区采用truncate操作,极大的降低了管理的难度。51Testing软件测试网'p#|#w-~4nKL9?;u

#ADfdE@nP02. 提高性能:由于每个分区的数据量大大减少,因此在增删改查的时候,可以通过指定分区范围来提高检索的性能。在进行并行操作的时候,采用智能分区连接减少上下文的切换也可以极大的提高性能。51Testing软件测试网"_!zh'Q1|9VKC

51Testing软件测试网p&t/S.`(E:nf

3. 提高可用性:某个分区出现问题不会影响正常分区的使用;通过指定不同的tablespace作物理分割,不但可以提高查询的性能,还能够避免热块竞争。51Testing软件测试网(w;Nx ha%c$JO%\

s K'J1j9Cs051Testing软件测试网m9V?S+C/hy

51Testing软件测试网'J3adms*Ht.j

设计原则51Testing软件测试网1T"@!? @DU5Z

D { k gKBE01. 范围分区和interval分区适合于划分历史类数据、周期性的加载和删除数据,通常是以DATE类型的列作为范围分区键。interval分区是范围分区的延伸,以时间为单位自动扩展分区。51Testing软件测试网e*W~)s3q K8f

51Testing软件测试网 {1X+N3db2Y

2. HASH分区适合于随机分布数据、通过HASH算法来避免热块竞争、没有明显的分区规则,通常选择唯一或者基本唯一的列作为HASH分区键,分区的数目必须是2的幂次方。

6{shvidC051Testing软件测试网;t'nNs C m

3. 列表分区适合于离散数据,不支持多个列同时作为分区键。51Testing软件测试网.{\ ` D*W;_.w ?

D8J a.p$`v0`L04. 复合分区同时具备2维分区的优点,分为:Range-Hash、Range-List、Range-Range、List-Hash、List-List、List-Range。

7O~{~+[Q!rZ051Testing软件测试网*y%mCc bj%DS X3an+{

5. Intervel分区适合于固定间隔的范围分区,当到插入数据到不存在的分区时,数据库会自动创建新分区,自动产生分区名,Oracle不允许手工增加新分区。由于这种分区的分区名称是自动生成的,且前期出现的BUG较多,并不推荐大规模使用。51Testing软件测试网;g-Nr,B4V m?S [-t

V$jr/}MOz06. 分区表上尽量使用本地索引,在检索的时候where条件中尽量带上分区键,通过分区键缩小检索的范围。

]E1d/X9] R%eU0

E?2P&^S:o'x:oLJ4~07. 合理的设计分区表的表空间,通过表空间和LUN可以在物理层面上隔离数据,提高并行度,降低资源竞争。51Testing软件测试网 x-F~gu1D

51Testing软件测试网+f yqnR-GUpJY1G

:q*Ee!z&i#g0

oQd1ew K f0军规十:【合理使用RAC】51Testing软件测试网dLR@8yl

51Testing软件测试网.De8k.nAa z:Wu!k

& 说明51Testing软件测试网s*mt*\#@a

^bb8t*UY01. 为了避免出现“锁冲突”问题,使用RAC时需要合理分割业务。

k3?-xp@0K0

XD k,_:gZ5m02. 从应用程序的角度去优化RAC更加有效。51Testing软件测试网R!Bo;S/n5c

51Testing软件测试网 naM%f}%W?

3. RAC下各实例SGA的设置要比单实例下设置的更大一些。51Testing软件测试网+{ [G'JLy6wJt

/q*e.is v04. 避免在OLTP系统中使用全表扫描或者全索引扫描,尽量使用“短频快”的事务。51Testing软件测试网%g3n5` r"n:UW+M

8}%zS%i ]C05. 推荐使用ASSM对段空间进行管理,减少数据字典的争用。

L*[VL rTz,I0

JOlL2A(M2{06. 对于无序序列需要增大序列缓存(sequence cache),至少设置为10000。

_#?${#Lx7tBG051Testing软件测试网%g G*xy4T l)i^#j

7. 使用分区表来减少网络传输(缓存熔合)。

.j U7L2Y1Wm)o051Testing软件测试网-m6g)T?Lt8XR&ti

8. 避免不必要的分析。

X.HP Y;\^w051Testing软件测试网0x'W8W.L&H bW,V]

9. 移除选择率高的索引。

:Rt8rE"_0o:]F\051Testing软件测试网Ux @SOuUZ|

10.内网要求可靠,稳定,高速、低主CPU利用率。

4u Q{9U{+Bl$P0

TAG:

 

评分:0

我来说两句

日历

« 2024-05-13  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 110534
  • 日志数: 89
  • 图片数: 1
  • 文件数: 15
  • 建立时间: 2013-03-01
  • 更新时间: 2018-08-23

RSS订阅

Open Toolbar