們都知道drop table truncate table時都會先做一次checkpoint將被刪除對象的髒塊寫入磁盤
客戶有一套系統Oracle 需要做數據遷移由於種種原因采用的是邏輯遷移的方式由於庫比較大超過了T而停機時間又有限因此在正式遷移之前需要做大量的測試測試的目的一方面是看遷移流程上是否存在問題另一方面是看遷移的時候哪個地方會存在性能瓶頸並進行優化同時估算實施遷移時間
第一次測試後需要把測試產生的大量用戶及其對象全部刪除刪除用的是drop user username cascade不幸的是這種方式刪除得相當地慢一個多個表的用戶刪除了個半小時才刪除了多個表為什麼這麼慢?有沒有辦法提高速度?
drop table既然要做checkpoint那麼在db cache非常大的情況下這需要消耗的時間是比較長的如果能夠減少這個時間無疑將大幅提高速度首先嘗試做一次checkpoint將buffer cache全部刷新出去
view plaincopy to clipboardprint?
alter system checkpoint;
alter session set events immediate trace name flush_cache level ;
alter system checkpoint;
alter session set events immediate trace name flush_cache level ;
發現沒什麼效果
由於db_cache_size有GB左右db_keep_cache_size有G左右重新設置參數將db_keep_cache_size設為將db_cache_size設為M重啟一下數據庫重新執行刪除用戶的操作操作很快完成
在另一次同樣的過程中采用同樣的修改參數的方式效果同樣非常明顯
From:http://tw.wingwit.com/Article/program/Oracle/201311/17079.html