最近Oracle資料庫升級到11G之後,出現一些問題,慢慢的開始發現一些需要總結的東西,每次心裡都在想:下次,我自己搭建資料倉儲的時候,一定要注意這些細節,在倉庫的建立初期就做好這些工作。
1、redo log的設計
1)如果可以單獨放,redo和資料檔案單獨劃組做條帶化等。物理上分開。
2)redolog如果可以單獨放,就不要設定得太大,最多500M一個,因為日誌太大,可能會導致執行個體恢複的時間很長。另外在極端倒黴的情況下,如果再資料恢複過程中,執行個體再次down掉,比如掉電。那你就慘了。總之,那麼多資料放在日誌裡不安全,放在datafile裡放心一些。
3)如果你和我一樣悲催,redo和datafile所在磁碟組都在一個,因為儲存底層直接劃分的一個大池子(基於成本、速度的綜合考慮),那你就把日誌調大一些(目前我的是2G/個),組數增加一些(目前我的20組),如果還是出現日誌不夠用,那就多增加組數,比如30組。另外ASM在這種大池子面前,基本無法提高IO了,因為你無法解決redo和datafile競爭IO的問題。
2.undo策略
1)undo_retention的設計
一般可以直接設定3小時,先保證系統可用。當然undo資料表空間要足夠大。
好吧,如果你說無法定量,我給你一個參考值。
資料量3T的資料庫,設定undo資料表空間為300G,undo_retention時間為10800,預設單位是秒,也就是3小時。
2)guarantee參數的取捨
我覺得,如果你未充分瞭解你的業務系統和資料庫狀況之前,不要輕易啟用這個參數。有可能會導致異常災難。
上述條件不成立的,可以嘗試使用該參數,以防止ORA-01555的出現。
3、DB和OS層級都要記得開啟非同步IO
參考: 和
4、其他的,等想到了再加上來吧
5、OLTP和DSS不同資料庫設計
oltp 資料庫 dss 資料庫
oltp = online transaction processing dss = data warehousing
聯機事物處理 資料倉儲
例如:飛機訂票,網上交易,bbs等 例如:各種資源資料查詢系統
大量的線上使用者和dml操作 很少的dml操作
大量基於索引的查詢 大量的全表掃描的查詢
用b-tree,reverse key索引,定期索引重建 用bitmap索引
需要較多的小的回退段 需要較少的大的回退段
不要用分散式查詢 用分散式查詢
資料對象的儲存參數pctfree 20 或者更高 資料對象的儲存參數pctfree 0
共用程式碼和各種變數常量 字元變數和線索
啟動多線索服務 使用大的資料區塊,db_file_mutiblock_read_count
使用較大的記錄檔 使用較小的記錄檔
listener開多個響應連接埠 增加sort_area_size