簡體   English   中英

查詢在TEMP表空間方面有多貴?

[英]How expensive is a query in terms of TEMP tablespace?

我有一些sprocs執行一些更復雜的查詢,並自由地使用集合。

我的DBA抱怨他們偶爾會消耗S#$%噸的內存TEMP表空間。

我可以對查詢執行優化,但我也希望盡可能無創,並且為此我需要查看我的更改對TEMP表空間的影響。

題:

如何查看我的查詢在TEMP表空間上的成本?

要考慮的一件事是我沒有DBA訪問權限。

提前致謝。

取決於您的查詢對temp的成本的含義。

如果您可以從v $ tempseg_usage中進行選擇,您可以看到在temp中消耗了多少空間 - 在DEV數據庫中,沒有理由讓您的DBA無法訪問該視圖。

正如gpeche所提到的那樣 - 通過autotrace可以讓你很好地了解你從temp中做了多少IO - 所以結合空間使用情況會讓你對正在發生的事情有所了解。

大型集合通常是一個壞主意 - 它們在PGA中消耗大量內存(與TEMP非常不同),這是由所有其他會話共享的 - 這將是您的DBA所關心的。 大到多大取決於你的系統 - 成千上萬的小記錄可能不是太糟糕,但收藏中有數百或數百萬條記錄,我會擔心。

在進行各種有趣的查詢和技巧之前,請在過濾后估算應該排序的數據量。 如果這大於排序區域中的大小,則排序會將塊從內存移動到temp並稍后再讀取它們。 為原始數據大小添加一點開銷; 使用30%的開銷。 這應該對所需的總排序大小給出合理的估計。

對集合使用相同的策略。 在某處必須有數據空間,沒有任何魔法/壓縮可以使您的數據量更小。 如果你有最多1000行的內存並嘗試使用1000.000行它將不適合。 在這種情況下,請與您的dba交談並嘗試找到解決方案。 可能是您最終對工作負載進行了分區。

沒有DBA訪問權限,我會嘗試使用AUTOTRACE 它不會為您提供TEMP表空間消耗,但您可以獲得許多有用的信息來調優查詢(邏輯讀取,磁盤排序數,遞歸SQL,重做消耗,網絡往返)。 請注意,您需要授予一些使用AUTOTRACE的權限,但不需要完整的DBA權限。

當您的查詢正在運行時,您可以查詢v $ sql_workarea_active,或者在運行之后,您可以查詢v $ sql_workarea

這些將顯示臨時表空間使用情況,包括使用的內存,使用的磁盤空間,以及(最重要的)通過次數(空間使用只是問題的一部分 - 多通道排序非常昂貴),並將使用情況與解釋計划中的步驟。

然后,您可以考慮修改內存管理是否可以幫助您在使用的絕對空間和通過計數方面減少臨時表空間的使用。

暫無
暫無

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

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