天天看點

資料庫記憶體和進的配置和優化

MEMORY_MAX_TARGET設定資料庫執行個體的最大記憶體大小:設定記憶體大小的上限

MEMORY_TARGET 設定記憶體大小(可動态調整,不需要重新開機資料庫)

自動共享記憶體管理

    SGA_TARGET:初始化參數指定資料庫執行個體總SGA的總數量

    所有SGA元件都以粒度(GRANULE)為最小機關配置設定和回收空間,粒度是連續虛拟記憶體配置設定的機關

    SGA >=1G        粒度大小為4M

    SGA >1G            粒度大小為8M

    粒度大小為4M,DB_CACHE_SIZE為10M,則實際配置設定3*4=12M空間給資料庫高速緩存,即3個粒度機關

    SGA_MAX_SIZE設定SGA的最大空間,這個空間值包含高速緩存池,共享池,大型池,JAVA池和流池的總大小

    SYS AS SYSDBA@ORCL>SHOW PARAMETER SGA_MAX_SIZE;

    NAME                     TYPE          VALUE

    ------------------------------------ -------------------- ------------------------------

    sga_max_size                 big integer      404M

    共享池    SHARED_POOL_SIZE

    大型池    LARGE_POOL_SIZE

    JAVA池    JAVA_POOL_SIZE

    緩沖區高速緩存    DB_CACHE_SIZE

    流池    STREAM_POOL_SIZE

    啟用自動共享記憶體管理功能:設定SGA_TARGET設定非零值,将取代控制單獨SGA元件配置設定記憶體和其他參數,再将共享池,大型池等的值設定為0值,才能由ORACLE自動為SGA元件配置設定記憶體空間

    手動共享記憶體管理

    自動PGA記憶體管理

    PGA_AGGREGATE_TARGET用來控制PGA記憶體數量,這是PGA參數值的最大值

    SYS AS SYSDBA@ORCL>SHOW PARAMETER PGA_AGGREGATE_TARGET;

    pga_aggregate_target             big integer      0

    手動PGA記憶體管理

    WORKAREA_SIZE_POLICY參數設定為MANUAL

    專用伺服器程序(會話記憶體從PGA中配置設定)和共享伺服器程序(會話記憶體從SGA中配置設定)

    資料庫駐留連接配接池(會話記憶體從PGA中配置設定)

    DATABASE RESIDENT CONNECTION POOLING(DRCP):通常為WEB應用程式提供連接配接池

    使用V$SGAINFO視圖檢視SGA基本資訊

    SYS AS SYSDBA@ORCL>SELECT * FROM V$SGAINFO;

NAME              BYTES RES

-------------------- ---------- ---

Fixed SGA Size        1336960 No

Redo Buffers        6094848 No

Buffer Cache Size      75497472 Yes

Shared Pool Size      176160768 Yes

Large Pool Size     4194304 Yes

Java Pool Size        8388608 Yes

Streams Pool Size    4194304 Yes

Shared IO Pool Size          0 Yes

Granule Size        4194304 No    //表示粒度的大小,這裡為4M

Maximum SGA Size      422670336 No

Startup overhead in    58720256 No

Shared Pool

Free SGA Memory Available  146800640

    使用V$SGASTAT視圖檢視SGA統計資訊    //檢視各個池中SGA元件的記憶體使用情況

    shared pool  KKSSP              497144

shared pool  quiesce system conte     300

         xt

shared pool  SGA structure for KP    2824

         ON kp

shared pool  SGA struct - SWRF Me    2160

         trics

    如何啟用自動記憶體管理:

    SYS AS SYSDBA@ORCL>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      404M

memory_target                 big integer      404M

parallel_servers_target          integer          8

pga_aggregate_target             big integer      0

sga_target                 big integer      0

檢視配置設定的最大PGA容量:

SYS AS SYSDBA@ORCL>SELECT VALUE FROM V$PGASTAT WHERE NAME='maximum PGA allocated';

     VALUE

----------

 158905344

計算MEMORY_TARGET參數值的公式:

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

修改值

    1.使用SPFILE啟動資料庫執行個體:使用下面的指令設定MEMORY_MAX_TARGET的值:

    ALTER SYSTEM SET MEMORY_MAX_TARGET=nM SCOPE=SPFILE;

    ALTER SYSTEM SET MEMORY_TARGET=mM

    ALTER SYSTEM SET SGA_TARGET=0

    ALTER SYSTEM SET PGA_AGGREGATE_TARGET=0

    2.使用文本伺服器參數檔案啟動資料庫執行個體:

    memory_max_target=nM

    memory_target=mM

    n代表:MEMORY_MAX_TARGET

    m代表:MEMORY_TARGET

    監測和調整自動記憶體管理

    檢視所有動态記憶體元件的目前大小包括SGA和PGA的總大小

    SYS AS SYSDBA@ORCL>SELECT * FROM V$MEMORY_TARGET_ADVICE ORDER BY MEMORY_SIZE;

MEMORY_SIZE MEMORY_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR    VERSION

----------- ------------------ ------------ ------------------- ----------

    303           .75        276         1.0024      0

    404             1        275              1      0

    505          1.25        275              1      0

    606           1.5        275              1      0

    707          1.75        275              1      0

    808             2        275              1      0

    監測和SGA目标大小:(自動記憶體管理模式)

    SYS AS SYSDBA@ORCL>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

    ---------- --------------- ------------ ------------------- -------------------

       198           .75       6394          1.0203          19427

       264         1       6267           1          19282

       330          1.25       6246           .9966          18231

       396           1.5       6245           .9965          18231

       462          1.75       6245           .9965          18231

       528         2       6245           .9965          18231

    啟動自動共享記憶體管理(ASMM)[自動共享記憶體管理:指自動管理SGA大小] [自動記憶體管理:指自動管理SGA,PGA等的大小]

    運作以下語句得到SGA總的使用量,不是總量

    SYS AS SYSDBA@ORCL>SELECT( (SELECT SUM(VALUE) FROM V$SGA)-(SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY))     "SGA_TARGET" FROM DUAL;

    SGA_TARGET

    ----------

     275869696

    1 row selected.

    啟動手動共享記憶體管理

    1.設定緩沖區高速緩存初始化參數

    一般資料庫塊大小是一定的,如果設定了不同的資料塊的大小,可以通過設定不同資料塊配置設定不同的緩沖區大小級不同的資料塊進行資料緩存

    eg:

    DB_BLOCK_SIZE=4096M    //設定标準資料塊的大小8K

    DB_CACHE_SIZE=1024M    //設定不同塊大小的必選項

    DB_2K_CACHE_SIZE=256M    //2k資料塊配置設定緩沖區的大小

    DB_8K_CACHE_SIZE=512M

    V$BUFFER_POOL:跟蹤不同高速緩存元件的大小和挂起的修改大小的操作

    SYS AS SYSDBA@ORCL>SELECT NAME,BLOCK_SIZE,CURRENT_SIZE FROM V$BUFFER_POOL;

    NAME             BLOCK_SIZE CURRENT_SIZE

    -------------------- ---------- ------------

    DEFAULT            8192       72    //塊大小8k   DATABASE_BUFFER_CACHE大小:72M

    可以使用獨立的緩沖池來配置資料庫緩沖區高速緩存

    使用:1.在緩沖區高速緩區中儲存資料

          2.可以在其他緩沖區中應用新的資料塊後立即用于儲存新的資料

    緩沖池的種類:

        1.保持(KEEP)緩沖池,在記憶體中保留資料庫對象的資料塊

        2.回收(RECYCLE)緩沖池,當不需要使用某些資料塊時,緩沖池将其從記憶體中回收以儲存新的資料

        3.預設(DEFAULT)緩沖池,包含尚未配置設定給其他緩沖池的資料庫對象的資料塊,就好像這些對象被配置設定給預設緩沖池一樣

    配置:

        參數:DB_KEEP_CACHE_SIZE    KEEP緩沖池

            DB_RECYCLE_CACHE_SIZE    RECYCLE緩沖池

    2.指定共享池的大小    

        初始化參數:SHARED_POOL_SIZE是一個動态參數    

        共享池大小=SHARED_POOL_SIZE+系統内部SGA系統開銷值(大約為12M)

    3.設定大型池的大小

        初始化參數:LARGE_POOL_SIZE是一個動态參數

    4.設定JAVA池的大小

        初始化參數:JAVA_POOL_SIZE是一個動态參數

    5.設定流池的大小

        初始化參數:STREAMS_POOL_SIZE是一個動态參數

    6.設定結果集緩存(RESULT CACHE)的最大大小

        初始化參數:RESULT_CACHE_MAX_SIZE是動态參數,如果是0,就是禁用,要啟用設定為非0值,然後重新開機資料庫執行個體

        檢視結果集有沒有啟用:

        SYS AS SYSDBA@ORCL>select dbms_result_cache.status() from dual;

        DBMS_RESULT_CACHE.STATUS()

        -----------------------------------------------------------

        ENABLED

    啟用自動PGA記憶體管理

    設定PGA的總容量

        PGA_AGGREGATE_TARGET    //設定總容量

    有效PGA記憶體的總容量=PGA_AGGREGATE_TARGET值-為其他目的配置設定給PGA的記憶體容量(例如會話記憶體)

    相關統計視圖:

        V$SYSSTAT

        V$SESSTAT

        V$PGASTAT    //PGA内在使用情況的統計資訊

        V$SQL_WORKAREA

        V$SQL_WORKAREA_ACTIVE

    V$PROCESS:檢視ORACLE資料庫程序所配置設定和使用的PGA記憶體使用情況:

    SYS AS SYSDBA@ORCL>SELECT PID,PROGRAM,PGA_USED_MEM,PGA_ALLOC_MEM,PGA_FREEABLE_MEM,PGA_MAX_MEM FROM V$PROCESS;

       PID PROGRAM                        PGA_USED_MEM PGA_ALLOC_MEM PGA_FREEABLE_MEM PGA_MAX_MEM

---------- ------------------------------------------------ ------------ ------------- ---------------- -----------

     1 PSEUDO                               0         0             0       0

     2 oracle@oracle (PMON)                   520972    612508             0      612508

    啟用手動PGA記憶體管理

    将初始化參數;WORKAREA_SIZE_POLICY設定為MANUAL

    通過配置以下參數的大小來手動配置PGA:

        SORT_AREA_SIZE,HASH_AREA_SIZE,BITMAP_MERGE_AREA_SIZE,CREATE_BITMAP_AREA_SIZE  控制SQL工作區的最大大小

    通過初始化參數配置共享伺服器

        SHARED_SERVERS

        MAX_SHARED_SERVERS

        SHARED_SERVER_SESSIONS

        DISPATCHERS

        MAX_DISPATCHERS

        CIRCUITS

    啟用共享伺服器

        将參數SHARED_SERVERS設定為一個大于0

        ALTER SYSTEM SHARED_SERVERS=1

    配置排程器程序

        參數配置如下:

            dispatchers="(PROTOCOL=tcp)"

            dispatchers="(ADDRESS=(PROTOCOL=tcp)(PORT=5000))"

            dispatchers="(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.120))(DISPATCHERS=2)"

        排程器的數量=CELL(<并發會話的最大值>/每個排程器的連接配接數)

    檢視排程器程序的資訊

        V$QUEUE

        V$DISPATCHE

        V$DISPATCHE_RATE

    SYS AS SYSDBA@ORCL>SELECT * FROM V$DISPATCHER;

    顯示處理等待排程器程序和等待的時間

    SYS AS SYSDBA@ORCL>SELECT DECODE(SUM(TOTALQ),0,'NO RESPONSES',SUM(WAIT)/SUM(TOTALQ)) "AVERAGE WAIT TIME"     FROM V$QUEUE Q,V$DISPATCHER D WHERE Q.TYPE='DISPATCHER' AND Q.PADDR=D.PADDR;

    關閉指定的排程器程序

    1.增加調試器

    SYS AS SYSDBA@ORCL>ALTER SYSTEM SET DISPATCHERS='(PROT=TCP)(DISP=2)','(PROT=TCPS)(DISP=2)';

    2.檢視所有排程器的情況

    SYS AS SYSDBA@ORCL>SELECT NAME,NETWORK FROM V$DISPATCHER;

    3.關閉指定的排程器

    SYS AS SYSDBA@ORCL>ALTER SYSTEM SHUTDOWN IMMEDIATE 'D003';

    禁用共享伺服器

    初始化參數SHARED_SERVERS=0 禁用共享伺服器,

    MAX_SHARED_SERVERS=0    //以上如果兩個參數都為0,則所有共享伺服器将終止

    中止排程器程序(所有連接配接到共享伺服器的用戶端斷開連接配接)

    ALTER SYSTEM SET DISPATCHERS='';

    啟用資料庫駐留連接配接池(SYS_DEFAULT_CONNECTION_POOL)

    1.啟用資料庫駐留連接配接池(資料庫重新開機時會自動啟動)

        SYS AS SYSDBA@ORCL>EXECUTE DBMS_CONNECTION_POOL.START_POOL();

        PL/SQL procedure successfully completed.

    2.在用戶端連接配接池中顯示的指定要使用系統的連接配接池

        (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MYHOST)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=SALES)(SERVER=POOLED)))

    3.禁用資料庫駐留連接配接池

        EXECUTE DBMS_CONNECTION_POOL.STOP_POOL();

    配置資料庫駐留連接配接池

    将連接配接池中伺服器的最小數量修改為10

        EXECUTE DBMS_CONNECTION_POOL.ALTER_PARAM('','MINSIZE','10');

    恢複連接配接池的預設設定

        EXECUTE DBMS_CONNECTION_POOL.RESTORE_DEFAULTS();

    檢視資料庫駐留連接配接池的視圖

        DBA_CPOOL_INFO

        V$CPOOL_STATS

        V$CPOOL_CC_STATS

    終止會話

    1.檢視指定使用者的會話SID,SERIAL#

    SYS AS SYSDBA@ORCL>SELECT SID,SERIAL#,STATUS FROM V$SESSION WHERE USERNAME='SYS';

           SID    SERIAL# STATUS

    ---------- ---------- --------

           125        5 ACTIVE/INACTIVE  //ACTIVE:表示在執行SQL語句,INACTIVE:表示沒有執行SQL語句

    2.終止指定的會話:

        ALTER SYSTEM KILL SESSION '<會話SID>,<會話序列号>'

        SYS AS SYSDBA@ORCL>ALTER SYSTEM KILL SESSION '19,122';

        SYS AS SYSDBA@ORCL>SELECT SID,SERIAL#,STATUS FROM V$SESSION WHERE USERNAME='HR';

        19      122 KILLED