記憶體配置的最佳化
應該讓有效資料長時駐留在記憶體結構中,這是oracle效能調整中非常重要的一個課題。
應該 啟用自動共享記憶體管理,把sga_target設定到一非零值,並把statistics_level設定為typical或者all。sga_target應該設定為作業系統記憶體總數中可以分配給oracle sga使用的記憶體量。sga_target受sga_max_size約束。sga_max_size定義了本機上oracle系統可以使用的最大sga。一般最大可達作業系統實體記憶體的70%.
*********sga記憶體分配原則(從aix角度出發)
1 減少頁交換操作
當需要支援其他應用執行時,會按照LRU演算法把當前駐留在記憶體中的資料頁Page out到物理磁碟,顯然,這會影響系統的執行效能。
所以一般在系統設計時,往往將資料庫安裝在一臺伺服器上,獨佔這臺伺服器的所有資源,避免頁交換的產生。
2 sga 應宿主在實體記憶體中
分配sga的目的就是為了快速將資料儲存在記憶體中。記憶體速度比硬碟速度至少快上4個數量級以上。所以如果sga對應的虛擬記憶體頁被交換到換頁空間(磁碟)上,那sga也就失去了意義。
3 為使用者連線準備充足的記憶體資源
除了sga外,還需要為在系統上執行的伺服器程式(pga)以及其他任務留下足夠的記憶體。
***********db cache問題
db cache總量是有限的,為了有效使用db cache,就必須限定使用db cache的操作總量。從開發的角度出發,就要在開發中儘量減少其編寫的SQL語句需要掃描的資料量,降低不必要的資料塊掃描。所以應該評估SQL的i/o代價,最佳化SQL語句以及PL/SQL,函式等物件。
在安裝配置oracle時,精確判定db cache的大小是不可能。正常的情況是,給出一個初始值,該值主要依賴於資料庫伺服器的記憶體總量以及能分配給oracle的部分。以後,應該經常性地跟蹤db cache的使用效率。具體方法是:使用v$db_cache_advice,以db cache使用命中率作為主要評價標準。
db cache的大小和物理I/O的關係是一條反函式,db cache為橫線,物理I/O為豎線,隨著db cache的變大,物理I/O會變小,當db cache大到某一個最優點以後,此時,物理I/O最小,再加大db cache已經不會再讓物理I/O減少。所以,盲目擴大資料庫快取沒有必要。
*******分析db cache命中率
db cache命中率是指所需資料在快取中被真到的機率。如果一條SQL操作訪問的資料快能夠在db cache中找到,則對應的物理I/O將會被避免。
需要三個統計引數consistent gets from cache一致性讀,db block gets from cache 快取讀,physical reads cache物理讀。這裡提供一個指令碼,用來判斷db cache命令率:
SQL>select name,value
from v$sysstat
where name in('db block gets from cache','consistent gets from cache','physical reads cache');
命中率:1-(物理讀)/(一致性讀+快取讀),這個命中率越高越好。但也不能完全掉進命中率的陷阱,不能因為命中率低就去增加db cache,或因為命中率高就去減少db cache。必須站在全域性的高度衡量問題。
*********增大資料快取的工作步驟:
1:db_cache_advice設定為on,並連續工作了一段時間。
2:查詢v$db_cache_advice,檢視增加資料快取導致I/O減少的比率,實現以價效比為依據。
3:判斷增加資料快取是否片面(增加以後,減少了作業系統記憶體使用,導致作業系統上的頁交換,則綜合結果為負)。
4:使用alter system命令增加資料塊快取尺寸。
SQL>alter system set db_cache_size=??M scope =both;(如果不成功,調整sga_target,sga_max_size)
******最佳化並不總是加大db_cache_size,在下面情況下需要縮小
1:db_cache總是保持較高的命中率,查詢v$db_cache_advice發現縮減db_cache並不會引起顯著的物理I/O增加。(反函式關係)
2:作業系統出現頻繁的頁交換(Page in/Out).
*********shared pool使用問題
從效能上看,應該儘可能實現軟解析,減少硬解析。做到這一點需要進行兩方面工作:能夠重用的SQL和PL/SQL,足夠尺寸的shared pool.
**************SQL和PL/SQL的重用:
1:開發SQL,PL/SQL時,要採用相同的程式設計規範,在程式中儘量避免使用動態SQL,儘量使用繫結變數,儘量採用儲存過程,函式或者包,包體。
2:避免在應用高峰時段執行表的DDL操作,因為這會導致依賴於表,索引的SQL必須做硬解析---他們多依賴的物件結構發生了變化。
3:對於序列物件,應該賦予其足夠的快取,這會減少資源鎖的使用頻率。
******shared pool 尺寸設定
一般而言,如果library cache,dictionary cache命中率低於90%,則考慮增加shared_pool_size的值。但同時要注意shard_pool_size的邊際效益。
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24214296/viewspace-1035149/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- YARN and MapReduce的【記憶體】最佳化配置詳解Yarn記憶體
- 記憶體最佳化記憶體
- yarn記憶體配置Yarn記憶體
- aix記憶體最佳化(轉)AI記憶體
- win10怎麼最佳化記憶體 win10系統記憶體最佳化的方法Win10記憶體
- MySQL InnoDB記憶體配置MySql記憶體
- Jmeter:修改記憶體配置JMeter記憶體
- eclipse 增加記憶體的方法、修改配置檔案 記憶體優化Eclipse記憶體優化
- 合理配置SQL Server的最大記憶體SQLServer記憶體
- Oracle PGA記憶體的配置和使用Oracle記憶體
- linux大記憶體Hugepages最佳化Linux記憶體
- Tomcat修改記憶體配置Tomcat記憶體
- JVM記憶體引數配置JVM記憶體
- Oracle 之 配置HugePages記憶體Oracle記憶體
- win10虛擬記憶體如何最佳化_win10怎麼最佳化虛擬記憶體Win10記憶體
- 【大頁記憶體】Oracle資料庫配置大頁記憶體記憶體Oracle資料庫
- win10系統如何最佳化記憶體_win10最佳化記憶體佔用率怎麼操作Win10記憶體
- 給系統最佳化記憶體的幾個技巧記憶體
- Chrome 再次最佳化記憶體佔用問題,新增記憶體釋放開關Chrome記憶體
- Redis記憶體使用最佳化與儲存Redis記憶體
- MySQL 配置InnoDB的記憶體分配器MySql記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- Redis 記憶體最佳化在 vivo 的探索與實踐Redis記憶體
- 從記憶體洩露、記憶體溢位和堆外記憶體,JVM優化引數配置引數記憶體洩露記憶體溢位JVM優化
- 記憶體管理篇——實體記憶體的管理記憶體
- Android效能最佳化之記憶體洩露Android記憶體洩露
- jvm的記憶體引數配置(skycto JEEditor)JVM記憶體
- linux的hugepage的配置-優化oracle記憶體 .Linux優化Oracle記憶體
- Redis記憶體淘汰策略配置翻譯Redis記憶體
- HBase記憶體配置及JVM優化記憶體JVM優化
- JVM記憶體溢位及合理配置JVM記憶體溢位
- Linux下HugePage記憶體功能配置Linux記憶體
- JS中的棧記憶體、堆記憶體JS記憶體
- Redis記憶體——記憶體消耗(記憶體都去哪了?)Redis記憶體
- 記憶體_大頁記憶體記憶體
- 如何配置 SQL Server 使用 2 GB 以上的實體記憶體SQLServer記憶體
- WindowsXP作業系統記憶體最佳化指南(轉)Windows作業系統記憶體
- 記憶體管理 記憶體管理概述記憶體