簡體   English   中英

Oracle Temp表段大小-選擇查詢不一致

[英]Oracle Temp table segment size - select query inconsistent

我已經使用Oracle一年了,遇到表空間TEMP的一個新問題-我的術語可能在這里缺少。 如何修改TEMP表段的大小,以便我的選擇查詢始終成功運行。

我有一條select語句,它將在某個時間點工作,但隨后將在其他時間失敗。 Oracle中的TEMP表段大小是否可能以某種方式更改,從而影響給定的select語句一次運行但又一次失敗? 原因是b / c我運行了一條select語句,該語句將一次成功運行,但下次將失敗。 如果失敗,則會出現以下錯誤:

ORA-01652: unable to extend temp segment by 64 in tablespace TEMP

TEMP表段的大小是否還特定於單個用戶或進程會話? 還是與所有進程的全局內存有關?

我的目標是嘗試查找問題,並查看是否可以輕松解決的內存問題或TEMP表問題。

我也很感興趣是否有人同時運行一個大型查詢,這可能會導致問題或通過降低TEMP表擴展到其他段的能力而激怒該問題。

TEMP空間是在實例級別分配的,並由所有用戶共享。 如果您的查詢使用了實例可用的TEMP空間的很大一部分,則很可能斷斷續續地失敗,具體取決於其他用戶當時恰好消耗了多少空間。 如果其他用戶有一個消耗了所有可用TEMP空間的失控查詢,那么即使您的查詢是TEMP空間的較輕消耗者,您也可能會收到錯誤消息,盡管經常發生這種情況很奇怪。你問這個問題。

假設您的查詢使用的可用TEMP空間相對較大,我敢打賭它可能需要進行一些認真的優化。 我已經看到了我的一些查詢,這些查詢執行諸如無意中生成笛卡爾積,然后對其進行DISTINCT來得出正確的結果集。 與一開始就編寫正確的TEMP相比,這顯然需要更多的TEMP空間。 一個或多個對象的統計信息也可能導致Oracle期望某個步驟實際上返回大量行時將返回很少的行,這導致優化器選擇使用更多TEMP的計划。比預期的要好。 如果可以優化查詢以使用較少的TEMP空間,則通常這是最簡單的解決方法。

如果您的查詢已完全優化,但仍占用分配給實例的TEMP空間的很大一部分,那么您希望與DBA進行對話。 DBA可能為系統分配了不足的TEMP空間,並且可能僅向TEMP再扔了幾GB即可解決您的問題(以及其他所有遇到相同錯誤的人)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM