內存管理簡介
2024-07-21 02:38:13
供稿:網友
 
                 對于Oracle的內存的治理,截止到9iR2,都是相當重要的環節,治理不善,將可能給數據庫帶來嚴重的性能問題。下面我們將一步一步就內存治理的各個方面進行探討。    l       概述                                                                                                oracle的內存可以按照共享和私有的角度分為系統全局區和進程全局區,也就是SGA和PGA(PRocess global area or private global area)。對于SGA區域內的內存來說,是共享的全局的,在UNIX上,必須為oracle設置共享內存段(可以是一個或者多個),因為oracle在UNIX上是多進程;而在WINDOWS上oracle是單進程(多個線程),所以不用設置共享內存段。PGA是屬于進程(線程)私有的區域。在oracle使用共享服務器模式下(MTS),PGA中的一部分,也就是UGA會被放入共享內存large_pool_size中。    對于SGA部分,我們通過sqlplus中查詢可以看到:    SQL> select * from v$sga;    NAME                      VALUE--------------------              ----------Fixed Size                   454032Variable Size                 109051904Database Buffers              385875968Redo Buffers                  667648Fixed Size    oracle 的不同平臺和不同版本下可能不一樣,但對于確定環境是一個固定的值,里面存儲了SGA各部分組件的信息,可以看作引導建立SGA的區域。    Variable Size    包含了shared_pool_size、java_pool_size、large_pool_size等內存設置和用于治理數據緩沖區等內存結構的hash table、塊頭信息(比如x$bh消耗內存)等    Database Buffers    指數據緩沖區,在8i中包含default pool、buffer_pool_keep、buffer_pool_recycle三部分內存。在9i中包含db_cache_size、db_keep_cache_size、db_recycle_cache_size、db_nk_cache_size。這里要注重在8i中三部分內存總和為db_block_buffers*db_block_size。    Redo Buffers    指日志緩沖區,log_buffer。在這里要額外說明一點的是,對于v$parameter、v$sgastat、v$sga查詢值可能不一樣。v$parameter里面的值,是指用戶在初始化參數文件里面設置的值,v$sgastat是oracle實際分配的日志緩沖區大小(因為緩沖區的分配值實際上是離散的,也不是以block為最小單位進行分配的),v$sga里面查詢的值,是在oracle分配了日志緩沖區后,為了保護日志緩沖區,設置了一些保護頁,通常我們會發現保護頁大小大約是11k(不同環境可能不一樣)。參考如下內容    SQL>  select substr(name,1,10) name,substr(value,1,10) value    2  from v$parameter where name = 'log_buffer';NAME                 VALUE
                         --------------------     --------------------log_buffer               524288SQL> select * from v$sgastat ;POOL  NAME             BYTES----------- -------------------fixed_sga                   454032buffer_cache                385875968log_buffer                  656384SQL> select * from v$sga;NAME                     VALUE--------------------              ----------Fixed Size                  454032Variable Size                109051904Database Buffers             385875968Redo Buffers                667648    關于各部分內存的作用,參考oracle體系結構,在此不再敘述。