我有個特別complex的SQL query cursor, takes a long time (a few hours)to complete. And very often it failed with oracle error "snapshot too old rollback segment too small". 原因是我用的table data 都是changing frequently的。我就決定把裏麵的每個subquery 都分別寫到temp table裏,然後在main cursor 裏在join these temp tables. 我覺得這樣應該能work的。可是reviewer讓我證明這樣能解決問題。煩死了,query那麽大又不是我的錯。db 高手們有什麽好主意? 除了加 table index外,query還能怎麽optimize?
請教oracle db問題
所有跟帖:
• 打出來看看? -slow_quick- ♂ (0 bytes) () 06/23/2014 postreply 10:48:54
• 太長了 -simplylove- ♀ (9 bytes) () 06/23/2014 postreply 19:02:13
• 加點log語句看看到底那步最耗時,再加以改進 -Guoluke2- ♂ (0 bytes) () 06/23/2014 postreply 11:27:19
• 最大的table至少有幾百個million rows -simplylove- ♀ (48 bytes) () 06/23/2014 postreply 19:06:40
• 這就是database本身的問題了,找dba解決 -GuoLuke2- ♂ (0 bytes) () 06/24/2014 postreply 18:52:05
• 回複:請教oracle db問題 -lidongmei- ♂ (299 bytes) () 06/23/2014 postreply 12:49:56
• 已經有index了。我們雖然不是data warehouse數據,但數據量很大。再加additional index -simplylove- ♀ (224 bytes) () 06/23/2014 postreply 19:16:51
• 我覺得隻能用temp table了。問DBA也不做聲 -simplylove- ♀ (12 bytes) () 06/23/2014 postreply 19:22:21
• 回複:已經有index了。我們雖然不是data warehouse數據,但數據量很大。再加additional index -lidongmei- ♂ (17866 bytes) () 06/24/2014 postreply 09:02:52
• Well it is a real time system and the response time is critical. -simplylove- ♀ (0 bytes) () 07/07/2014 postreply 20:25:25
• Adding additional index will probably have negative impact on ou -simplylove- ♀ (0 bytes) () 07/07/2014 postreply 20:26:52
• 這還不簡單,弄不出來就別弄了,省事兒了 -南城胡同串子- ♂ (66 bytes) () 06/23/2014 postreply 16:53:28
• 我也想不弄啊,成天串胡同兒多悠閑。可是得養家糊口啊 -simplylove- ♀ (9 bytes) () 06/23/2014 postreply 19:26:49
• Using cursor might not be a good idea. -chirolike- ♂ (0 bytes) () 06/24/2014 postreply 16:10:27
• 回複:請教oracle db問題 -種豆的gua- ♂ (128 bytes) () 06/24/2014 postreply 20:02:30
• 這些都已經相當大了,DBA不給增加了。我試了temp table solution and seems it is workin -simplylove- ♀ (0 bytes) () 07/07/2014 postreply 20:30:19