熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

合理選擇盤區的管理方式提高數據庫的性能

2013-11-13 16:04:25  來源: Oracle 

  在Oracle數據庫中表空間是由段組成的而段又是由盤區所組成的通常情況下在大型數據庫中合理選擇盤區的管理方式能夠在很大程度上提高數據庫的性能並減輕數據庫管理員的工作量筆者對此事深有感觸

  選擇合適的段與盤區管理方式

  盤區的管理方式

  在Oracle數據庫中盤區主要有兩種管理模式分別為目錄盤區管理方式和局部盤區管理方式目錄盤區管理方式是一種比較老的管理模式在這種管理模式下數據庫系統會跟蹤數據目錄中的自由和已用盤區並利用遞歸的SQL語句來修改相關的內容這種盤區管理模式效率比較低現在很版本的 Oracle數據庫系統雖然還支持這種管理模式但是不建議使用為此筆者認為除非你現在使用的Oracle數據庫系統比較舊只支持目錄盤區管理模式否則的話還是采用另外一種管理模式為好

  另外一種管理模式就叫做局部盤區管理模式在這種工作模式下主要通過位圖來跟蹤盤區從而消除了遞歸SQL帶來的效率低下的問題在 OracleG以後的數據庫系統中都支持這種管理模式而且是Oracle數據庫推薦使用的管理方式而這種管理方式又可以分為Uniform與 Autoallocate兩種其中Uniform是告訴數據庫系統利用相同的大小來分配和再分配盤區此時數據庫系統在分配盤區的時候都是以固定大小來分配對而Autoallocate選項則是告訴數據庫根據實際情況來增量增加盤區的大小如在Windows操作系統上部署Oracle數據庫系統其操作系統的塊大小一般為KB此時數據庫系統在初始化的時候會為剛開始的幾個盤區(一般為個盤區)分配比較小的空間如可能只有KB當這個段占用的空間超過這個容量後數據庫會再為其分配盤區不過此時分配盤區的大小可能會MB如果還不夠還需要增加盤區的話那麼這個盤區的大小可能會達到MB甚至更多這種分配方式有什麼好處呢?顯而易見當段中所含的數據量越大由於後續分配對盤區比較大為此這個段所含總的盤區數量在逐漸減少從而易於管理對數據庫性能的提升也有很大的幫助

  在選擇采取哪種盤區管理方式時筆者如下幾個建議可供大家參考

  一是一般情況下局部盤區管理方式是數據庫管理員的首選除非為了跟以前的數據庫兼容或者現在采用的數據庫系統不支持這個局部管理方式否則的話筆者強烈建議采用這種盤區管理方式

  二是在局部盤區管理方式下有固定盤區與自動分配兩種模式此時該如何選擇呢?一般來說這要看段所在的表空間的類型如果這個段所在的表空間是臨時表空間的話那麼段下面的盤區采用Uniform為好如果在數據庫中大表空間與小表空間共存的情況下則采用自動分配模式比較好因為自動分配的算法能夠讓小段持有小盤區而讓大段采用大盤區以免數據庫擁有太多的盤區所以一般這種管理方式常用在小段與大段共存的一種情況這有助於提升數據庫的性能

  三是需要注意一些限制的情況如對於撤銷表空間來說其是不能夠使用局部盤區管理模式下的Uniform管理方式另外雖然局部盤區管理方式與目錄盤區管理方式可以利用系統提供的存儲過程進行輕松的轉換但是其轉換仍然受到一定的限制如一般情況下數據庫管理員可以將一個持久表空間的管理模式從目錄盤區管理方式轉換為局部盤區管理方式或者說進行相反的轉換但是對於系統表空間和臨時表空間來說比較特殊他們只能夠從低到高進行轉換而不能夠從高到低進行轉換即指能夠將系統表空間或者臨時表空間從目錄管理模式轉換為局部盤區管理方式而不能夠進行相反的轉換所以對於系統表空間與臨時表空間來說在部署之前需要考慮清楚到底采用什麼盤區管理方式如果選擇局部盤區管理方式的話那麼是沒有後悔藥可吃的因為這兩個表空間不能夠進行相反的轉換

  局部盤區管理方式下的段空間管理方法

  筆者之所以推薦使用局部盤區管理方式除了以上所談的原因外還有一個重要的因素在局部盤區管理方時下在段空間的管理方式下也可以作文章如果采取了局部盤區管理方式的話數據庫管理員可以選擇是用手工或者自動的段空間管理方式

  手工管理段空間的方式主要是為了向後兼容性而保留的在這種管理方式下需要用到三個新的名詞分別為自由塊列表(可以用來存儲數據的塊) PCT_FREE(規定塊中必須留有的剩余空間以便後續更新塊中數據的需要)PCT_USED(規定到塊中的使用量達到多少時就不能夠再存儲數據)這個手工管理方式的主要思路就是盤區中的塊不能夠全部存儲而需要留有一定的剩余空間如此的話如果這個塊中的記錄需要更改如某個內容從個字符更新到個字符那麼更新後的紀錄就還保存在同一個塊中(因為需要更新的塊還有一定的剩余空間)而不會分塊保存從而可以提高數據庫的性能在每個插入或者更新操作之後數據庫系統會比較這個數據塊中的剩余自由空間與這個段的PCT_FREE設置如果剩余空間已經不到這個值設置的時候數據庫系統就會把這個塊從自由塊列表中移除如此的話這個塊以後就不能夠再用來進行插入操作雖然有可能剩余的空間還可以插入一條記錄一般情況下只能夠進行更新的操作然後再每次更新或者刪除操作之後數據庫系統同樣會檢查塊中的已用空間與PCT_USED參數進行比較如果更新或者刪除操作後塊的已用量低於這個參數設置的話系統就會將這個塊再放入到自由塊列表中後續系統可以對這個塊進行插入刪除更新等操作這種是數據庫系統默認的段空間管理方式但是需要明白一點默認的管理方式並不是說數據庫推薦使用這種方式相反在OracleG以後的數據庫系統中Oracle官方推薦的是實用自動管理段空間的方式而這裡之所以要把手工管理設置為默認主要是為了兼容性的考慮

  如果采用自動管理方式的話數據庫系統使用位圖而不是采用自由列來管理標識哪些數據塊可用於插入操作那些塊不可用也就是說如果采用自動管理方式的話以上設置的一些參數將會被忽略不過起管理的思路跟上面的是相同的在確定某個塊是否可以被進行插入操作時仍然會考慮到紀錄的連續性即會為塊中數據的更新保留一定的空間在自動管理方式下數據庫管理員不用費心的去考慮設置以上兩個參數數據庫系統會根據實際情況自動進行調節而這個控制的算法好比手工管理方式下復雜的多所以采取字段管理段空間的方式不僅可以減少數據庫管理員的工作量而且還可以提高數據庫的性能

  如果數據庫管理員需要采用自動管理方式那麼需要注意以下幾點

  一是默認情況下數據庫采用的是手工管理段空間的方式而不是自動管理段空間的方式為此如果數據庫管理員想使用自動管理段空間的模式時必須要在建立表空間的時候進行明示如可以通過如下的語句segment space management auto來告訴數據庫系統采用自動管理表空間的方式不過在采用這種段空間管理方式的時候需要注意兼容性的問題

  二是需要注意某些表空間是不能夠使用這種自動管理段空間的方是如默認情況下自動段空間管理方式下不能夠用戶臨時表空間與系統表空間可見臨時表空間系統表空撤銷表空間在Oracle數據庫中有一些比較特殊的限制筆者在這裡做一個小的總結對於撤銷表空間來說不能夠使用局部盤區管理模式下的autoallocate管理方式即不能夠采用可變的盤區管理方式而對於臨時表空間與系統表空間來說他們不能夠使用自動管理段空間的工作模式而且在盤區管理方式上只能夠從低級向高級管理方式進行轉換而不能夠進行相反的轉換所以在設置盤區與段空間管理方式的時候這些限制需要引起數據庫管理員的重視

  不過總的來說筆者推薦使用局部盤區管理方式在這種方式下筆者又推薦可變盤區管理方式(即autoallocate方式)而對於段空間管理來說筆者也建議數據庫管理員為持久表空間(系統表空間除外)配制auto方式來管理段空間


From:http://tw.wingwit.com/Article/program/Oracle/201311/17768.html
  • 上一篇文章:

  • 下一篇文章:
  • Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.