簡體   English   中英

查詢獲取Oracle表使用的空間太慢

[英]Query to get space used by oracle table is too slow

我正在使用下面的查詢來獲取表占用的內存。

SELECT SUM(bytes), SUM(bytes)/1024/1024 MB
    FROM dba_extents
    WHERE owner = :Owner
    AND segment_name = :table_name;

打印2 MB文件的大小花了986秒(16分鍾)。

這個查詢怎么了?

有沒有更好的查詢可以非常快速地提供相同的數據?

SELECT SUM(bytes), SUM(bytes)/1024/1024 MB
FROM DBA_SEGMENTS
WHERE owner = :Owner
AND segment_name = :table_name;

區段遠少於區段,但這很奇怪。 您的桌子有幾度?

僅供參考,這只是未分區的表數據。 而且,如果表具有索引,LOB或對象類型,則它不是其所需的全部空間。

緩慢訪問DBA_EXTENTS似乎是一個常見問題 這是一個報價:

但是,這里的主要性能問題是,DBA / USER / ALL_SEGMENTS視圖和DBA / USER / ALL_EXTENTS視圖的BYTES,BLOCKS&EXTENTS列的值未存儲在本地字典表空間中的段的數據字典中。 而是必須通過訪問查詢中處理的所有段的段頭塊來獲取它們。 這些額外的塊訪問會導致性能降低。 因此,隨着數據庫文件和段數量的增加,這種情況下的查詢性能可能會降低。 此外,Oracle在某些情況下不能正確地緩存那些段頭塊,因此即使在下一次查詢運行時也迫使它們從磁盤讀取它們-因此不會發生緩存。 如果我說針對dba_segments的查詢甚至可以在后台觸發DBMS_SPACE_ADMIN包中的更多過程以獲取正確的段大小信息,也不要感到驚訝。

Link還包含針對此問題的解決方案,由於我現在沒有自己的數據庫,因此無法應用和測試。 但是我相信你已經知道了。

暫無
暫無

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

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