Database

Oracle redo log 插入時性能下降

  • October 11, 2012

我有一個 oracle 11g 數據庫。我正在測試插入。以非歸檔模式執行的數據庫。我配置了 3 個重做日誌,每個 2gb。

我正在嘗試將數據插入測試表。一開始它以 15k 英寸/秒的速度執行良好。我在 200 次插入後送出。

但是在插入大約 130 萬條記錄後,它變得非常慢,大約 1-2k 英寸/秒。正如我在資源瀏覽器中註意到的那樣,我們已經填充了所有重做日誌,因此從這一點開始的插入工作緩慢。

所以我的問題是為什麼它在填充重做日誌時變得如此緩慢,即使我送出每 200 條記錄。以及如何解決這種情況(除了在插入時完全關閉日誌記錄)

重做日誌是按順序寫入的。數據文件以隨機方式寫入。

每個硬碟驅動器在順序寫入時工作得最好,此時它可能會達到全頻寬(比如 100 MB/s),因為這樣它就不需要尋找(將其磁頭重新定位到另一個磁軌並等待磁軌旋轉到適當的位置)。當需要查找時,單個 HDD 可能會被限制為每秒 200 次查找。因此,如果您寫入 8 kB 然後尋找另一個位置,您將從同一個驅動器獲得 1.56 MB/s(這是 2008)。在這兩種情況下,驅動器都會 100% 忙碌,但吞吐量有明顯差異(200 對 1.56)。對於 RAID0,多個驅動器在統計上提供每秒 n200 次搜尋。

這與 SSD 無關,在這種情況下,搜尋幾乎是立即的。

在初始階段,您的數據文件不會寫入太多,因為所有插入都進入數據庫記憶體。重做日誌總是立即寫入,沒有(很多)緩衝,它很快,它是順序的。重做日誌沒有錯。一段時間後,您只需用完空閒記憶體,數據庫編寫器就會嘗試通過寫入數據文件來釋放一些記憶體。如果您只在一個表空間中插入一張表,則數據文件可能會按順序或半順序寫入。

那麼為什麼要隨機操作呢?很可能您在數據庫中有一些額外的東西,例如:索引、分區、審計、其他表等。所有這些都有助於隨機化。

將每個順序操作分開在一組不同的物理硬碟驅動器上進行,並將所有隨機操作放在另一組物理驅動器上是有益的。否則順序性能會受到嚴重影響。在您的情況下,在性能方面,將重做文件與數據文件放在相同的物理硬碟上是不行的。

有關更多資訊,最好檢查自動工作負載儲存庫 (AWR) 快照(這些是簡單的文本報告)。

引用自:https://serverfault.com/questions/398790