oracle不开归档对效率会快吗,关于性能:存档庞大的数据库(oracle),而不会影响向其插入记录的进程...
我們有一個審計數據庫(oracle),它保存部署在應用程序服務器上的服務(大約100個)執行的所有活動的監視器信息。您可能認為審計數據庫非常龐大,因為服務處理的請求數量很大。此數據庫上唯一的寫入事務是實時編寫審計信息的服務。
隨著審計數據庫的開始增長(每天超過一百萬條記錄),查詢所需數據(例如select all errors occurred with service A for requests between start date and end date)很快變得幾乎不可能。
為了解決這個問題,一些"聰明的孩子"決定設置一個批處理作業,將數據從數據庫復制到另一個數據庫(例如,audit_archives)并刪除記錄,以便在審計數據庫中保留僅2天的審計數據。
這看起來很簡潔,但每當"批處理"進程運行時,將數據插入審計數據庫的審計進程開始變得非常慢 - 有時"批處理"進程也因數據庫爭用而失敗。
設計此方案以更有效的方式執行上述歸檔的更好方法是什么,以便對審計流程和批處理產生最小的影響?
您可能希望研究對基表進行分區。
創建鏡像表(作為"歷史"數據的目標)并在該表上創建相同的分區方案(最可能是基于每個日期)。
然后,您可以簡單地將"舊"分區(使用ALTER TABLE the_table EXCHANGE partition)從一個表交換到另一個表。應該只需要幾秒鐘來"移動"分區。實際性能取決于定義的索引(本地,全局)。
這種技術通常用于反過來(準備將新數據輸入數據倉庫環境中的報告表),但也應該用于"歸檔"。
感謝您的答復。 這里有一個問題是,在工作日的24小時之內,我們無法承擔審計表不可用的費用。
@ringbearer:為什么你認為桌子不可用?
ALTER TABLE the_table EXCHANGE partition的副作用?
@ringbearer:不,表不會"不可用"。 鎖定可能存在一些問題,但您需要嘗試一下。 我不確定是否需要鎖定表或鎖定分區。
我輕松的方式。
使用FORALL語句刪除舊記錄部分最佳
用FORALL復制數據部分最好
根據星期幾添加分區
II隊列
使用FORALL語句刪除舊記錄部分最佳
使用審計觸發器填充audit_archives,在觸發器使用隊列中避免長dml
總結
以上是生活随笔為你收集整理的oracle不开归档对效率会快吗,关于性能:存档庞大的数据库(oracle),而不会影响向其插入记录的进程...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle avg分析函数,分析函数之
- 下一篇: presto读取oracle,Prest