程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 《Administrator's Guide》之Managing Memory,managingdirector

《Administrator's Guide》之Managing Memory,managingdirector

編輯:Oracle教程

《Administrator's Guide》之Managing Memory,managingdirector


Automatic Memory Management

1. 如果要啟動Automatic Memory Management,如何確定MEMORY_TARGET的值呢?

    1> 在SQL*Plus下show parameter target,結果如下:

SQL> show parameter target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target                   integer     0
db_flashback_retention_target        integer     1440
fast_start_io_target                 integer     0
fast_start_mttr_target               integer     0
memory_max_target                    big integer 0
memory_target                        big integer 0
parallel_servers_target              integer     256
pga_aggregate_target                 big integer 4779M
sga_target                           big integer 14368M

   2> 確定maximum PGA allocated的值

SQL> select value/1024/1024 from v$pgastat where name='maximum PGA allocated';

VALUE/1024/1024
---------------
     4331.59961

    3> memory_target = sga_target + max(pga_aggregate_target, maximum PGA allocated)

         在本例中,則memory_target至少為14368+4779=19147M

2. 如何優化Memory Target Size,SGA Target Size,PGA Target Size。

   可分別查詢V$MEMORY_TARGET_ADVICE,V$SGA_TARGET_ADVICE,V$PGA_TARGET_ADVICE表,下面以V$SGA_TARGET_ADVICE為例。

SQL> select * from v$sga_target_advice order by sga_size;
 
  SGA_SIZE SGA_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR ESTD_PHYSICAL_READS
---------- --------------- ------------ ------------------- -------------------
       290              .5       448176              1.6578             1636103
       435             .75       339336              1.2552             1636103
       580               1       270344                   1             1201780
       725            1.25       239038               .8842              907584
       870             1.5       211517               .7824              513881
      1015            1.75       201866               .7467              513881
      1160               2       200703               .7424              513881

    SGA_SIZE_FACTOR和ESTD_DB_TIME_FACTOR為1的行對應的是當前SGA的值,該本例中,當前SGA的SIZE為580M。可根據ESTD_DB_TIME和ESTD_PHYSICAL_READS的期望值來相應調整SGA的值。

3. 關於MEMORY_TARGET和MEMORY_MAX_TARGET的關系

MEMORY_TARGET是動態參數,可在數據庫運行過程中動態修改,MEMORY_MAX_TARGET是靜態參數,只有重啟數據庫才能生效。MEMORY_TARGET的值不能超過MEMORY_MAX_TARGET。設置MEMORY_MAX_TARGET有兩個好處:一、防止意外將MEMORY_TARGET的設置得過高。二、為將來增大MEMORY_TARGET的值保留空間。

在pfile中,如果你忽略了MEMORY_MAX_TARGET的值,只設置了MEMORY_TARGET的值,則MEMORY_MAX_TARGET默認將設置為MEMORY_TARGET的值。如果只設置了MEMORY_MAX_TARGET的值,而沒有設置MEMORY_TARGET的值,則MEMORY_TARGET默認為0。

4. 可通過v$memory_dynamic_components查看內存各組件的信息

SQL> select component,current_size,min_size,max_size,user_specified_size from v$memory_dynamic_components;

COMPONENT                      CURRENT_SIZE   MIN_SIZE     MAX_SIZE USER_SPECIFIED_SIZE
------------------------------ ------------ ----------   ---------- -------------------
shared pool                        92274688   41943040     92274688                   0
large pool                          8388608    8388608     71303168                   0
java pool                           4194304    4194304      4194304                   0
streams pool                              0          0            0                   0
SGA Target                        205520896  205520896    205520896                   0
DEFAULT buffer cache               92274688   37748736    100663296                   0
KEEP buffer cache                         0         0             0                   0
RECYCLE buffer cache                      0         0             0                   0
DEFAULT 2K buffer cache                   0         0             0                   0
DEFAULT 4K buffer cache                   0         0             0                   0
DEFAULT 8K buffer cache                   0         0             0                   0

COMPONENT                      CURRENT_SIZE   MIN_SIZE     MAX_SIZE  USER_SPECIFIED_SIZE
------------------------------ ------------ ----------   ----------  -------------------
DEFAULT 16K buffer cache                  0          0            0                   0
DEFAULT 32K buffer cache                  0          0            0                   0
Shared IO Pool                            0          0            0                   0
PGA Target                        109051904  109051904    109051904                   0
ASM Buffer Cache                          0          0            0                   0

16 rows selected.

5. 如何啟動Automatic Memory Management,設置如下:

ALTER SYSTEM SET MEMORY_TARGET = nM;
ALTER SYSTEM SET SGA_TARGET = 0;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0;

注意:如果SGA_TARGET和PGA_AGGREGATE_TARGET沒有設置為0,則設置的值將是其最小值。

SGA

6. SGA各組件的分配以granule為單位,而granule的大小以SGA_MAX_SIZE為衡量標准,具體如下:

關於granule的大小,可通過以下語句進行查詢

SQL> select * from v$sgainfo where name='Granule Size';

NAME                                  BYTES RES
-------------------------------- ---------- ---
Granule Size                        4194304 No

注意:SGA給各組件分配空間,都是granule的整數倍,譬如,如果你的granule size是4M,你將DB_CACHE_SIZE的值設置為10M,則SGA實際為DB_CACHE_SIZE分配的內存空間是12M。

7. 關於SGA_MAX_SIZE

SGA_MAX_SIZE是靜態參數,具體說明和默認值如下所示:

8. ASMM

Automatic shared memory management通過設置SGA_TARGET的值來啟動。在SGA各組件中,有些組件可通過ASMM自動分配內存,有些組件必須顯性指定值。具體如下:

Automatically Sized SGA Components and Corresponding Parameters

以下參數SGA可自動調節,如果啟動了ASMM,如下值必須設置為0,倘若不是0,則表示其最小值SELECT ( (SELECT SUM(value) FROM V$SGA) - (SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY) ) "SGA_TARGET" FROM DUAL;

11. Buffer Cache

Buffer cache的大小影響數據庫的性能,較大的buffer cache雖然能減少物理讀和寫的次數,但由於它占用了大量的內存,可能會導致分頁和交換。

Oracle支持不同大小的block size,在創建表空間時,如果指定了非標准的block size,則必須設置相應的DB_nK_CACHE_SIZE的值。注意,system表空間使用的是標准塊,標准塊的大小可通過如下語句查看:

SQL> show parameter db_block_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_size                        integer     8192

Oracle支持5種不同大小的block size,相應的cache值,可通過以下參數設置:

DB_2K_CACHE_SIZE
DB_4K_CACHE_SIZE
DB_8K_CACHE_SIZE
DB_16K_CACHE_SIZE
DB_32K_CACHE_SIZE

注意:DB_nK_CACHE_SIZE不能用於設定標准塊的cache值,標准塊的cache size是由db_cache_size決定的。在本例中,標准塊的大小是8k,所以設置DB_8K_CACHE_SIZE的值將報以下錯誤:

SQL> alter system set db_8k_cache_size=10m;
alter system set db_8k_cache_size=10m
*
ERROR at line 1:
ORA-32017: failure in updating SPFILE
ORA-00380: cannot specify db_8k_cache_size since 8K is the standard block size

32k的block size只在64位操作系統中有效。

12. Buffer Pools

buffer cache包含三種池:KEEP池、RECYCLE池、DEFAULT池。其中KEEP池是將對象的數據永久保存在內存中,RECYCLE池是一旦數據不需要,就從內存中剔除。DEFAULT池是默認的。KEEP池和RECYCLE池的大小分別根據DB_KEEP_CACHE_SIZE和DB_RECYCLE_CACHE_SIZE兩個參數來設置。這三種池只支持標准塊,對於非標准塊,只支持DEFAULT池。

13. 如果要手動管理PGA,需要顯性設定以下值。

SORT_AREA_SIZE, HASH_AREA_SIZE, BITMAP_MERGE_AREA_SIZE, CREATE_BITMAP_AREA_SIZE。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved