Oracle數據庫內存參數調優技術的個人總結
近來公司技術,研發都在問我關於內存參數如何設置可以優化Oracle的性能,所以抽時間整理了這篇文檔,以做參考。
目的:
希望通過整理此文檔,使公司同事對oracle內存結構有一個全面的瞭解,並在實際的工作中靈活應用,使oracle的內存性能達到最優配置,提升應用程序反應速度,並進行合理的內存使用。
實例結構
oracle實例=內存結構+進程結構
oracle實例啓動的過程,其實就是oracle內存參數設置的值加載到內存中,並啓動相應的後臺進程進行相關的服務過程。
進程結構
oracle進程=服務器進程+用戶進程
幾個重要的後臺進程:
DBWR:數據寫入進程.
LGWR:日誌寫入進程.
ARCH:歸檔進程.
CKPT:檢查點進程(日誌切換;上一個檢查點之後,又超過了指定的時間;預定義的日誌塊寫入磁盤;例程關閉,DBA強制產生,表空間offline)
LCKn(0-9):封鎖進程.
Dnnn:調度進程.
內存結構(我們重點講解的)
內存結構=SGA(系統全局區)+PGA(程序全局區)
SGA就是我們所說的內存調優的主要對象。我們重點就是設置SGA
原則:SGA+PGA+OS使用內存<總物理RAM
1、SGA系統全局區.(包括以下五個區)
A、數據緩衝區:(db_block_buffers)存儲由磁盤數據文件讀入的數據。
大小: db_block_buffers*db_block_size
Oracle9i設置數據緩衝區爲:Db_cache_size
原則:SGA中主要設置對象,一般爲可用內存40%。
B、共享池:(shared_pool_size):數據字典,sql緩衝,pl/sql語法分析.加大可提速度。
原則:SGA中主要設置對象,一般爲可用內存10%
C、日誌緩衝區:(log_buffer)存儲數據庫的修改信息.
原則:128K ---- 1M 之間,不應該太大
D 、JAVA池(Java_pool_size)主要用於JAVA語言的開發.
原則:若不使用java,原則上不能小於20M,給30M通常就夠了
E、 大池(Large_pool_size) 如果不設置MTS,主要用於數據庫備份恢復管理器RMAN。
原則:若不使用MTS,5---- 10M 之間,不應該太大
SGA=. db_block_buffers*db_block_size+ shared_pool_size+ log_buffer+Java_pool+size+large_pool_size
原則: 達到可用內存的55-58%就可以了.
2、PGA程序全局區
A、Sort_area_size 用於排序所佔內存
B、Hash_area_size 用於散列聯接,位圖索引
這兩個參數在非MTS下都是屬於PGA ,不屬於SGA,是爲每個session單獨分配的,在我們的服務器上除了OS + SGA,一定要考慮這兩部分
原則:OS 使用內存+ SGA + session*(sort_area_size + hash_area_size + 2M) < 總物理RAM 爲好
實例配置
基本掌握的原則是, db_block_buffer 通常可以儘可能的大,shared_pool_size 要適度,log_buffer 通常大到幾百K到1M就差不多了
A、如果512M RAM
建議 shared_pool_size = 50M, db_block_buffer* db_block_size = 200M
B、如果1G RAM
建議 shared_pool_size = 100M , db_block_buffer* db_block_size = 400M
C、如果2G
建議 shared_pool_size = 200M , db_block_buffer *db_block_size = 800M
參數更改方式
oracle8i:
主要都是通過修改Oracle啓動參數文件進行相關的配置
參數文件位置:
d:\oracle\admin\DB_Name\pfile\init.ora
按以上修改以上參數值即可。
Oracle9i:
兩種方式:第一種是修改Oracle啓動參數文件後,通過此參數文件再創建服務器參數文件
第二種是直接運行oracle修改命令進行修改。
SQL>alter system set db_cache_size=200M scope=spfile;
SQL>alter system set shared_pool_size=50M scope=spfile
目的:
希望通過整理此文檔,使公司同事對oracle內存結構有一個全面的瞭解,並在實際的工作中靈活應用,使oracle的內存性能達到最優配置,提升應用程序反應速度,並進行合理的內存使用。
實例結構
oracle實例=內存結構+進程結構
oracle實例啓動的過程,其實就是oracle內存參數設置的值加載到內存中,並啓動相應的後臺進程進行相關的服務過程。
進程結構
oracle進程=服務器進程+用戶進程
幾個重要的後臺進程:
DBWR:數據寫入進程.
LGWR:日誌寫入進程.
ARCH:歸檔進程.
CKPT:檢查點進程(日誌切換;上一個檢查點之後,又超過了指定的時間;預定義的日誌塊寫入磁盤;例程關閉,DBA強制產生,表空間offline)
LCKn(0-9):封鎖進程.
Dnnn:調度進程.
內存結構(我們重點講解的)
內存結構=SGA(系統全局區)+PGA(程序全局區)
SGA就是我們所說的內存調優的主要對象。我們重點就是設置SGA
原則:SGA+PGA+OS使用內存<總物理RAM
1、SGA系統全局區.(包括以下五個區)
A、數據緩衝區:(db_block_buffers)存儲由磁盤數據文件讀入的數據。
大小: db_block_buffers*db_block_size
Oracle9i設置數據緩衝區爲:Db_cache_size
原則:SGA中主要設置對象,一般爲可用內存40%。
B、共享池:(shared_pool_size):數據字典,sql緩衝,pl/sql語法分析.加大可提速度。
原則:SGA中主要設置對象,一般爲可用內存10%
C、日誌緩衝區:(log_buffer)存儲數據庫的修改信息.
原則:128K ---- 1M 之間,不應該太大
D 、JAVA池(Java_pool_size)主要用於JAVA語言的開發.
原則:若不使用java,原則上不能小於20M,給30M通常就夠了
E、 大池(Large_pool_size) 如果不設置MTS,主要用於數據庫備份恢復管理器RMAN。
原則:若不使用MTS,5---- 10M 之間,不應該太大
SGA=. db_block_buffers*db_block_size+ shared_pool_size+ log_buffer+Java_pool+size+large_pool_size
原則: 達到可用內存的55-58%就可以了.
2、PGA程序全局區
A、Sort_area_size 用於排序所佔內存
B、Hash_area_size 用於散列聯接,位圖索引
這兩個參數在非MTS下都是屬於PGA ,不屬於SGA,是爲每個session單獨分配的,在我們的服務器上除了OS + SGA,一定要考慮這兩部分
原則:OS 使用內存+ SGA + session*(sort_area_size + hash_area_size + 2M) < 總物理RAM 爲好
實例配置
基本掌握的原則是, db_block_buffer 通常可以儘可能的大,shared_pool_size 要適度,log_buffer 通常大到幾百K到1M就差不多了
A、如果512M RAM
建議 shared_pool_size = 50M, db_block_buffer* db_block_size = 200M
B、如果1G RAM
建議 shared_pool_size = 100M , db_block_buffer* db_block_size = 400M
C、如果2G
建議 shared_pool_size = 200M , db_block_buffer *db_block_size = 800M
參數更改方式
oracle8i:
主要都是通過修改Oracle啓動參數文件進行相關的配置
參數文件位置:
d:\oracle\admin\DB_Name\pfile\init.ora
按以上修改以上參數值即可。
Oracle9i:
兩種方式:第一種是修改Oracle啓動參數文件後,通過此參數文件再創建服務器參數文件
第二種是直接運行oracle修改命令進行修改。
SQL>alter system set db_cache_size=200M scope=spfile;
SQL>alter system set shared_pool_size=50M scope=spfile
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.