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