[英]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.