Oracle 直接路徑讀

2021-08-21 21:51:13 字數 1118 閱讀 1738

[sql]view plain

copy

print?

在11g中,全表掃瞄可能使用direct path read方式,繞過buffer cache,這樣的全表掃瞄就是物理讀了。 在10g中,都是通過gc buffer來讀的,所以不存在direct path read的問題。  

direct path read較高的可能原因有:  

1. 大量的磁碟排序操作,order by, group by, union, distinct, rollup, 無法在pga中完成排序,需要利用temp表空間進行排序。 當從臨時表空間中讀取排序結果時,會產生direct path read.  

2. 大量的hash join操作,利用temp表空間儲存hash區。  

3. sql語句的並行處理  

4. 大表的全表掃瞄,在中,全表掃瞄的演算法有新的變化,根據表的大小、快取記憶體的大小等資訊,決定是否繞過sga直接從磁碟讀oracle11g取資料。而10g則是全部通過快取記憶體讀取資料,稱為table scan(large)。11g認為大表全表時使用直接路徑讀,可能比10g中的資料檔案雜湊讀(db file scattered reads)速度更快,使用的latch也更少。  

大量的direct path read等待時間最可能是乙個應用程式問題。 direct path read事件由sql語句驅動,這些sql語句執行來自臨時的或常規的表空間的直接讀取操作。 當輸入的內容大於pga中的工作區域時,帶有需要排序的函式的sql語句將排序結果寫入到臨時表空間中,臨時表空間中的排序順序串隨後被合併,用於提供最終的結果。讀取排序結果時,oracle會話在direct path read等待事件上等待。db_file_direct_io_count初始化引數可能影響direct path read的效能。  

乙個隱含引數:  

_serial_direct_read = false 禁用direct path read  

_serial_direct_read = true 啟用direct path read  

alter sytem set "_serial_direct_read"=never scope=both sid='*'; 可以顯著減少direct path read  

ORACLE直接路徑操作

總結 直接路徑插入直接在高水位線以外分配空間,繞過了資料緩衝區,直接將資料插入進表所在資料檔案中。直接路徑插入不產生redo 資料庫處於noarchivelog模式下插入或者nologging屬性的 上插入 和undo log,依賴高水點實現回滾。資料庫日誌模式 直接路徑插入結束的時候oracle會...

Oracle直接路徑載入

oracle提供兩種型別的插入語句 常規插入 conventional insert 和直接路徑插入 direct path insert 直接路徑插入的目的是為了高效地載入大量的資料,它以犧牲部分功能為代價,因此受到很多的限制。1.直接路徑載入的效能 直接路徑載入把資料直接插入到要修改的段的高水位...

ORACLE直接路徑操作

總結 直接路徑插入直接在高水位線以外分配空間,繞過了資料緩衝區,直接將資料插入進表所在資料檔案中。直接路徑插入不產生redo 資料庫處於noarchivelog模式下插入或者nologging屬性的 上插入 和undo log,依賴高水點實現回滾。資料庫日誌模式 直接路徑插入結束的時候oracle會...