以下的文章抓哟是对Oracle SQL执行缓慢的原因的分析,如果Oracle数据库中的某张表的相关数据已是2亿多时,同时此表也创建了相关的4个独立的相关索引。由于业务方面的需要,每天需分两次向此表中插入300万条记录。6 l4 S. i4 T* m* ^
! x+ w' u5 x& T0 t, |8 D
由于数据量大,每次插入耗时3个小时以上,严重影响效率。: A- q) b0 H7 k a
: z- i, R8 u) _# l 因此,修改了系统的算法,将此表中只存储当天新增记录。将此表truncate后,第二天执行对此表的update操作时,非常耗时。表中有2亿多条数据的时候,此Oracle sql语句耗时59秒;表中有300万条数据的时候,此Oracle sql语句耗时几个小时。& Q2 L7 x6 Q( Q4 ?9 h( P% c
. |3 C: D( T4 ~ t+ z3 V 咨询DBA后,得出结论,需重建索引。重建后,6秒完成此操作。但第三天问题依然出现。DBA正在查找原因。难道每次truncate表,都需要重建tb索引?( _$ c: e# H( j5 i0 P+ Q, @, m- D
2 i# I% u2 O1 A
对于这个问题,DBA也没有给出合理的解释,推测主要原因是Oracle复杂的查询优化算法。
+ ]- o) `/ m0 b2 Z4 l. h 3 `# z s0 ]% k# l5 q5 [
最终,DBA给出的解决方案:
- b+ e- c8 @+ D% L) ^4 u
. v- E/ m% o3 x0 @- N truncate table …- \. C; i0 {. w/ B4 P+ l3 C4 \
1 x# Q/ b; e3 y9 e" ` drop index……中 华 考 试 网
/ }. H; a& t D$ K! f- g" U4 ^ 8 F3 W- |2 D6 G/ t! \: \7 ?. H
insert data ……# b8 `0 j. N1 ~
2 x0 T3 a, F* K [$ @8 y
create index …( P U l" u" Y- J: u
# _+ |/ I) G2 W3 G5 J
analyze table table_name compute statistics;- U1 l2 ]2 m: K+ H5 G3 z
1 s V0 d4 K. c3 H 重新生成统计数据
, e1 @# F3 m s" X6 M
6 \3 \+ w8 R- k0 u2 N 调整后,整个操作耗时非常少。
+ H9 f) |6 Z# k; `
# h5 y( l; l* \* D7 I! S" L" I 以上的相关内容就是对Oracle SQL执行缓慢的分析的介绍,望你能有所收获。 |