【深入解析--eygle】學習筆記
Large Pool-大池是SGA的一個可選組件,通常用於共享服務器模式(MTS)、 並行計算或
RMAN的備份恢復等操作。
Java Pool-Java池主要用於JVM等Java選件。
Streams Pool-Streams pool是Oracle10g引入的概念,為Oracle的Streams功能所使用,如果不定義該參數,這部分內存將從Shread Pool中分配
對於SGA各部分內存分配,可以從數據庫的視圖中查詢得到:
17:46:03 sys@felix SQL>select * from v$sga;
NAME VALUE
--------------------------------------------------
Fixed Size 2228944
Variable Size 335547696
Database Buffers 75497472
Redo Buffers 4272128
18:00:20 sys@felix SQL>
在Oracle9i中,Variable Size 包括shared_pool_size,java_pool_size和large_pool_size部分,SGA_MAX_SIZE去除db_cache_size部分也被歸入可變部分,所以很多時候我們看到的可變部分內存要遠高於可變內存組件大小;
Redo Buffers指日志緩沖區分配的內存大小,這個參數值通常比log_buffers參數設置略大;因為Log Buffer並非按照數據塊大小分配,在內存中通常需要設置保護頁對Log Buffer進行保護。
18:00:20 sys@felix SQL>select * from v$sgainfo;
NAME BYTESRESIZE
-------------------------------------------------- ------
Fixed SGA Size 2228944 No
Redo Buffers 4272128 No
Buffer Cache Size 75497472 Yes
Shared Pool Size 171966464 Yes
Large Pool Size 4194304 Yes
Java Pool Size 4194304 Yes
Streams Pool Size 8388608 Yes
Shared IO Pool Size 0 Yes
Granule Size 4194304 No
Maximum SGA Size 417546240 No
Startup overhead in Shared Pool 65418776 No
Free SGA Memory Available 146800640
12 rows selected.
18:06:23 sys@felix SQL>
當前SGA的分配和使用具體信息我們還可以通過V$SGASTAT視圖查詢得到:
select *
FROM(SELECT *
FROM v$sgastat
WHERE pool = 'shared pool'
ORDER BY BYTES DESC)
WHERE ROWNUM<= 5
18:06:23 sys@felix SQL>select *
18:08:05 2 FROM (SELECT *
18:08:05 3 FROM v$sgastat
18:08:05 4 WHERE pool = 'sharedpool'
18:08:05 5 ORDER BY BYTES DESC)
18:08:05 6 WHERE ROWNUM <= 5;
POOL NAME BYTES
---------------------------------------------------------------- ----------
shared pool free memory 30868336
shared pool SQLA 21540248
shared pool KGLH0 19496600
shared pool row cache 7593704
shared pool PLMCD 6275624
18:08:07 sys@felix SQL>
SGA的設置在Linux/Unix上和一個操作系統內核參數有關,這個參數是:shmmax。不同操作系統,該參數設置的位置不同,在Solaris 上,該參數由/etc/system 文件中shmsys:shminfo_shmmax定義;在Linux上,該參數由/proc/sys/kernel/shmmax參數定義。
很多人將該參數理解為共享內存的大小,這是不對的。實際上shmmax內核參數定義的是系統允許的單個共享內存段的最大值,如果該參數設置小於Oracle SGA設置,那麼SGA仍然可以創建成功,但是會被分配多個共享內存段。我們通常推薦通過調整shmmax設置,將SGA限制在一個共享內存段中。
在Windows系統中,由於系統采用多線程服務器(所有oracle server process 實際上都是一個進程中的線程),所以不存在共享內存的問題,無需進行特殊設置。
以64位Linux平台為例來看一下shmmax參數對於數據庫的影響。
[root@felix kernel]# uname -a
Linux felix 2.6.39-200.24.1.el6uek.x86_64 #1 SMPSat Jun 23 02:39:07 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux
[root@felix kernel]#
[root@felix kernel]# pwd
/proc/sys/kernel
[root@felix kernel]# ls shm*
shmall shmmax shmmni
[root@felix kernel]# cat shmmax
4398046511104
[root@felix kernel]#
可以通過ipcs 命令查看此設置下共享內存的分配,我們可以看到Oracle分配了多個共享內存段以滿足SGA設置的需要
[root@felix kernel]# ipcs -sa
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x6c6c6536 0 root 600 4096 0
0x00000000 32769 gdm 600 393216 2 dest
0x00000000 65538 gdm 600 393216 2 dest
0x00000000 98307 gdm 600 393216 2 dest
0x00000000 131076 gdm 600 393216 2 dest
0x00000000 163845 gdm 600 393216 2 dest
0x00000000 229382 oracle 640 4096 0
0x00000000 262151 oracle 640 4096 0
0xb875ccb0 294920 oracle 640 4096 0 --在此可以看出,該oracle數據庫使用了3個內存段
------ Semaphore Arrays --------
key semid owner perms nsems
0x00000000 0 root 600 1
0x00000000 32769 root 600 1
0x549cc314 163842 oracle 640 154
------ Message Queues --------
key msqid owner perms used-bytes messages
[root@felix kernel]
通過以上輸出看到為了創建Oracle的SGA,系 統 共 分 配 了3個共享內存段。接下來針對一個後台進程,使用pmap工具查看一下每個共享內存段的地址空間:
[root@felix kernel]# ps -ef | grep dbw
oracle 2493 1 0 10:22 ? 00:00:00 ora_dbw0_felix
root 2688 2201 0 10:31 pts/0 00:00:00 grep dbw
[root@felix kernel]#
[root@felix kernel]# pmap 2493
2493: ora_dbw0_felix
0000000000400000 183412K r-x-- /u01/app/oracle/product/11.2.0/db_1/bin/oracle
000000000b91d000 1884K rwx-- /u01/app/oracle/product/11.2.0/db_1/bin/oracle
000000000baf4000 304K rwx-- [ anon ]
000000000d796000 444K rwx-- [ anon ]
0000000060000000 4K r-xs- /dev/shm/ora_felix_229382_0
0000000060001000 4092K rwxs- /dev/shm/ora_felix_229382_0
0000000060400000 4096K rwxs- /dev/shm/ora_felix_229382_1
0000000060800000 4096K rwxs- /dev/shm/ora_felix_262151_0
0000000060c00000 4096K rwxs- /dev/shm/ora_felix_262151_1
0000000061000000 4096K rwxs- /dev/shm/ora_felix_262151_2
0000000061400000 4096K rwxs- /dev/shm/ora_felix_262151_3
0000000061800000 4096K rwxs- /dev/shm/ora_felix_262151_4
0000000061c00000 4096K rwxs- /dev/shm/ora_felix_262151_5
0000000062000000 4096K rwxs- /dev/shm/ora_felix_262151_6
0000000062400000 4096K rwxs- /dev/shm/ora_felix_262151_7
0000000062800000 4096K rwxs- /dev/shm/ora_felix_262151_8
0000000062c00000 4096K rwxs- /dev/shm/ora_felix_262151_9
0000000077400000 4096K rwxs- /dev/shm/ora_felix_262151_91
0000000077800000 4096K rwxs- /dev/shm/ora_felix_262151_92
0000000077c00000 4096K rwxs- /dev/shm/ora_felix_262151_93
0000000078000000 4096K rwxs- /dev/shm/ora_felix_262151_94
0000000078400000 4096K rwxs- /dev/shm/ora_felix_262151_95
0000000078800000 4096K rwxs- /dev/shm/ora_felix_262151_96
0000000078c00000 4096K rwxs- /dev/shm/ora_felix_262151_97
0000000079000000 4096K rwxs- /dev/shm/ora_felix_294920_0
注意:這裡的229382、262151等就是ipcs裡所看到的共享內存ID(shmid)。
00000030a0800000 128K r-x-- /lib64/ld-2.12.so
00000030a0a21000 4K rwx-- [ anon ]
00000030a0c00000 4K r-x-- /lib64/libaio.so.1.0.1
00000030a138c000 4K rwx-- /lib64/libc-2.12.so
00000030a138d000 20K rwx-- [ anon ]
00000030a1400000 524K r-x-- /lib64/libm-2.12.so
00000030a1a18000 4K rwx-- /lib64/libpthread-2.12.so
00000030a1a19000 16K rwx-- [ anon ]
00000030a2207000 4K rwx-- /lib64/librt-2.12.so
00000030b1800000 32K r-x-- /usr/lib64/libnuma.so.1
00000030b2000000 88K r-x-- /lib64/libnsl-2.12.so
00000030b2016000 2044K ----- /lib64/libnsl-2.12.so
00000030b2215000 4K r-x-- /lib64/libnsl-2.12.so
00000030b2216000 4K rwx-- /lib64/libnsl-2.12.so
00000030b2217000 8K rwx-- [ anon ]
00007f7f3c5d0000 64K rwx-- /dev/zero
00007f7f3c5e0000 64K rwx-- /dev/zero
00007f7f3c5f0000 144K rwx-- /dev/zero
00007f7f3c614000 7588K rwx-- [ anon ]
00007f7f3cf8a000 4K rwx-- /lib64/libnss_files-2.12.so
00007f7f3cfab000 4K rwxs- /u01/app/oracle/product/11.2.0/db_1/dbs/hc_felix.dat
00007f7f3cfac000 1296K rwx-- [ anon ]
00007f7f3d0f0000 8K r-x-- /lib64/libdl-2.12.so
00007f7f3d0f2000 2048K ----- /lib64/libdl-2.12.so
00007f7f3d2f2000 4K r-x-- /lib64/libdl-2.12.so
00007f7f3d2f3000 4K rwx-- /lib64/libdl-2.12.so
00007f7f3d2f4000 4K rwx-- [ anon ]
00007f7f3d2f5000 44K r-x-- /u01/app/oracle/product/11.2.0/db_1/lib/libocrutl11.so
00007f7f3d300000 1024K ----- /u01/app/oracle/product/11.2.0/db_1/lib/libocrutl11.so
00007f7f3d400000 4K rwx-- /u01/app/oracle/product/11.2.0/db_1/lib/libocrutl11.so
00007f7f3d401000 652K r-x-- /u01/app/oracle/product/11.2.0/db_1/lib/libocrb11.so
00007f7f3d4a4000 1020K ----- /u01/app/oracle/product/11.2.0/db_1/lib/libocrb11.so
00007f7f3d5a3000 8K rwx-- /u01/app/oracle/product/11.2.0/db_1/lib/libocrb11.so
00007f7f3d5a5000 4K rwx-- [ anon ]
00007f7f3d5a6000 668K r-x-- /u01/app/oracle/product/11.2.0/db_1/lib/libocr11.so
00007f7f3df1c000 1020K ----- /u01/app/oracle/product/11.2.0/db_1/lib/libhasgen11.so
00007f7f3e01b000 136K rwx-- /u01/app/oracle/product/11.2.0/db_1/lib/libhasgen11.so
00007f7f3e03d000 28K rwx-- [ anon ]
00007f7f3e044000 136K r-x-- /u01/app/oracle/product/11.2.0/db_1/lib/libdbcfg11.so
00007f7f3e066000 1020K ----- /u01/app/oracle/product/11.2.0/db_1/lib/libdbcfg11.so
00007f7f3e609000 264K rwx-- /u01/app/oracle/product/11.2.0/db_1/lib/libnnz11.so
00007f7f3e64b000 144K rwx-- [ anon ]
00007f7f3e66f000 864K r-x-- /u01/app/oracle/product/11.2.0/db_1/lib/libskgxp11.so
00007f7f3e9ab000 40K rwx-- /u01/app/oracle/product/11.2.0/db_1/lib/libcell11.so
00007f7f3e9b5000 8K rwx-- [ anon ]
00007f7f3eab8000 4K rwx-- /u01/app/oracle/product/11.2.0/db_1/lib/libodmd11.so
00007f7f3eab9000 4K rwx-- [ anon ]
00007fffba5e0000 132K rwx-- [ stack ]
00007fffba7a6000 4K r-x-- [ anon ]
ffffffffff600000 4K r-x-- [ anon ]
total 656228K
為了避免多個共享內存段,可以修改shmmax內核參數,使SGA存在於一個共享內存段中。通過修改/proc/sys/kernel/shmmax參數可以達到此目的。
以下是一個環境中的設置:
[root@danaly root]# echo 1610612736 >/proc/sys/kernel/shmmax
[root@danaly root]# more /proc/sys/kernel/shmmax
1610612736
這裡修改為1.5G。對於shmmax 文件的修改,系統重新啟動後會復位。可以通過修改/etc/sysctl.conf 文件使更改永久化。在該文件內添加以下一行,這個更改在系統重新啟動後生效:
kernel.shmmax =1610612736
修改shmmax之後,需要重起數據庫使更改生效。
通常,如果沒有修改shmmax參數,Oracle在啟動過程中就會在告警日志文件中記錄如下警告:
Starting ORACLE instance (normal)
Thu Nov 17 09:27:29 2005
WARNING: EINVAL creating segment of size 0x0000000033400000
fix shm parameters in /etc/system or equivalent
這是一個WARNING的?示,說明是建議修正,但並非強制的內容。在Solaris平台上,有時候也會看到類似的警報:
Sun Apr 30 05:35:20 2006
Starting ORACLE instance (normal)
Sun Apr 30 05:35:20 2006
WARNING: Not enough physical memory forSHM_SHARE_MMU segment of size 0x000000006d400000
[flag=0x4000]
這通常是因為SGA設置過大,超過了物理內存而導致的,這種情況通過修正參數即可解決。有時候這類警告也可能是因為數據庫異常關閉,後台進程未正常退出,共享 內 存 未 及 時 釋放引起的,對於這種情況,可以通過ipcs命令找到共享內存段id(shared memory id),然後通過ipcrm命令可以強制釋放該共享內存段,完成這些特殊處理後,數據庫通常就可以正常啟動了。
從Oracle9i開始,Oracle 推出了動態SGA調整,也就是說,允許我們不重新啟動數據庫而使得SGA的修改生效
在Oracle9i中,我們可以設置參數SGA_MAX_SIZE,該參數用以控制各緩沖池使用的內存總和,本質上是在進程中預先分配一段虛擬地址備用而不分配物理內存,目的是防止和進程私有地址段的沖突:
11:00:10 sys@felix SQL>show parameter sga_max
NAME TYPE VALUE
---------------------------------------------------------- ------------------------------
sga_max_size big integer 400M
11:00:15 sys@felix SQL>
11:08:02 sys@felix SQL>select tname from tab where tname like'%ADVICE%';
TNAME
------------------------------------------------------------
WRH$_STREAMS_POOL_ADVICE
WRH$_SHARED_POOL_ADVICE
WRH$_SGA_TARGET_ADVICE
WRH$_PGA_TARGET_ADVICE
WRH$_MTTR_TARGET_ADVICE
WRH$_MEMORY_TARGET_ADVICE
WRH$_JAVA_POOL_ADVICE
WRH$_DB_CACHE_ADVICE_BL
WRH$_DB_CACHE_ADVICE
V_$STREAMS_POOL_ADVICE
V_$SHARED_POOL_ADVICE
V_$SGA_TARGET_ADVICE
V_$PX_BUFFER_ADVICE
V_$PGA_TARGET_ADVICE_HISTOGRAM
V_$PGA_TARGET_ADVICE
V_$MTTR_TARGET_ADVICE
V_$MEMORY_TARGET_ADVICE
V_$JAVA_POOL_ADVICE
V_$DB_CACHE_ADVICE
SAM_SPARSITY_ADVICE
GV_$STREAMS_POOL_ADVICE
GV_$SHARED_POOL_ADVICE
GV_$SGA_TARGET_ADVICE
GV_$PX_BUFFER_ADVICE
GV_$PGA_TARGET_ADVICE
GV_$PGATARGET_ADVICE_HISTOGRAM
GV_$MTTR_TARGET_ADVICE
GV_$MEMORY_TARGET_ADVICE
GV_$JAVA_POOL_ADVICE
GV_$DB_CACHE_ADVICE
DBA_HIST_STREAMS_POOL_ADVICE
DBA_HIST_SHARED_POOL_ADVICE
DBA_HIST_SGA_TARGET_ADVICE
DBA_HIST_PGA_TARGET_ADVICE
DBA_HIST_MTTR_TARGET_ADVICE
DBA_HIST_MEMORY_TARGET_ADVICE
DBA_HIST_JAVA_POOL_ADVICE
DBA_HIST_DB_CACHE_ADVICE
38 rows selected.
11:08:24 sys@felix SQL>
其中和SGA相關的是V$DB_CACHE_ADVICE和V$SHARED_POOL_ADVICE,這些新功能通過在數據庫運行時持續不斷的收集信息,從而對內存的設置?供建議。
緩沖區高速緩存建議(buffer cacheadvisory) 受初始化參數DB_CACHE_ADVICE控制。該參數為動態參數,可用的值有三個OFF、ON 和READY。
DB_CACHE_ADVICE 不同參數值的含義分別如下:
OFF-關閉建議並且不為建議分配內存
ON-開啟建議並且CPU 和內存開銷都會發生
READY-關閉建議但是仍保留為建議分配的內存
在某些版本中,如果在參數為OFF 狀態時嘗試將其設置為ON 可能會出現ORA-4031錯誤,無法從共享池中分配內存;如果參數處於READY 狀態則可以將其設置為ON 而不會發生錯誤,這是因為需要的內存已經分配。
11:08:24 sys@felix SQL>show parameterdb_cache_ad
NAME TYPE VALUE
---------------------------------------------------------- ------------------------------
db_cache_advice string ON
11:13:35 sys@felix SQL>
我們看一下一個數據庫中,Oracle收集的buffer cache建議信息:
11:13:35 sys@felix SQL>select id,
11:17:28 2 name,
11:17:28 3 block_size,
11:17:28 4 size_for_estimate sfe,
11:17:28 5 size_factor sf,
11:17:28 6 estd_physical_read_factor eprf,
11:17:28 7 estd_physical_reads epr
11:17:28 8 from v$db_cache_advice;
ID NAME BLOCK_SIZE SFE SF EPRF EPR
------------ ---------- ---------- ---------- ---------- ----------
3DEFAULT 8192 4 .0588 1.4798 20700
3DEFAULT 8192 8 .1176 1.3237 18517
3DEFAULT 8192 12 .1765 1.2074 16890
3DEFAULT 8192 16 .2353 1.1395 15940
3 DEFAULT 8192 20 .2941 1.1236 15717
3DEFAULT 8192 24 .3529 1.1033 15434
3DEFAULT 8192 28 .4118 1.0896 15242
3DEFAULT 8192 32 .4706 1.0838 15161
3DEFAULT 8192 36 .5294 1.0759 15050
3DEFAULT 8192 40 .5882 1.0715 14990
3DEFAULT 8192 44 .6471 1.0643 14889
3DEFAULT 8192 48 .7059 1.0614 14848
3DEFAULT 8192 52 .7647 1.0542 14747
3DEFAULT 8192 56 .8235 1.0441 14606
3DEFAULT 8192 60 .8824 1.0412 14565
3 DEFAULT 8192 64 .9412 1.0094 14120
3 DEFAULT 8192 68 1 1 13989
3DEFAULT 8192 72 1.0588 .9964 13938
3DEFAULT 8192 76 1.1176 .9942 13908
3DEFAULT 8192 80 1.1765 .9877 13817
20 rows selected.
11:17:28 sys@felix SQL>
我們可以看到,伴隨db_cache_size的增大,估計的物理讀(estd_physical_reads)在逐漸減少,我們的選擇就在於在db_cache_size的設置和physical_reads之間尋找一個邊際效益最高點,使用可以接受的內存設置,獲得盡量低的物理讀。
而對於Shred Pool 的建議則受到另外一個初始化參數的影響,這個參數是: STATISTICS_LEVEL。STATISTICS_LEVEL控制數據庫收集的統計信息的級別,該參數有三個選項:
(1)BASIC-收集基本的統計信息
(2)TYPICAL-收集大部分的統計信息,這是系統的缺省設置,為了從Oracle不斷增加的新特性中受益,始終應該將該參數設置為典型.
(3)ALL-收集全部的統計信息.
可以通過v$statistics_level視圖來查看該參數的影響范圍,在Oracle11g中該視圖中的條目已經增加到24個:
11:35:29 sys@felix SQL>col STATISTICS_NAME fora30;
11:35:52 sys@felix SQL>select STATISTICS_NAME,
11:36:00 2 SESSION_STATUS,
11:36:00 3 SYSTEM_STATUS,
11:36:00 4 ACTIVATION_LEVEL,
11:36:00 5 SESSION_SETTABLE
11:36:00 6 from v$statistics_level;
STATISTICS_NAME SESSION_STATUS SYSTEM_STATUS ACTIVATION_LEV SESSIO
------------------------------ -------------------------------- -------------- ------
Buffer Cache Advice ENABLED ENABLED TYPICAL NO
MTTR Advice ENABLED ENABLED TYPICAL NO
Timed Statistics ENABLED ENABLED TYPICAL YES
Timed OS Statistics DISABLED DISABLED ALL YES
Segment Level Statistics ENABLED ENABLED TYPICAL NO
PGA Advice ENABLED ENABLED TYPICAL NO
Plan Execution Statistics DISABLED DISABLED ALL YES
Shared Pool Advice ENABLED ENABLED TYPICAL NO
Modification Monitoring ENABLED ENABLED TYPICAL NO
Longops Statistics ENABLED ENABLED TYPICAL NO
Bind Data Capture ENABLED ENABLED TYPICAL NO
Ultrafast Latch Statistics ENABLED ENABLED TYPICAL NO
Threshold-based Alerts ENABLED ENABLED TYPICAL NO
Global Cache Statistics ENABLED ENABLED TYPICAL NO
Active Session History ENABLED ENABLED TYPICAL NO
Undo Advisor, Alerts and Fast ENABLED ENABLED TYPICAL NO
Ramp up
Streams Pool Advice ENABLED ENABLED TYPICAL NO
Time Model Events ENABLED ENABLED TYPICAL YES
Plan Execution Sampling ENABLED ENABLED TYPICAL YES
Automated Maintenance Tasks ENABLED ENABLED TYPICAL NO
SQL Monitoring ENABLED ENABLED TYPICAL YES
Adaptive Thresholds Enabled ENABLED ENABLED TYPICAL NO
V$IOSTAT_* statistics ENABLED ENABLED TYPICAL NO
23 rows selected.
可以看到在TYPICAL設置下,除Timed OS Statistics 和 Plan Execution Statistics 信息不收集外,其他信息都被收集。其中, Buffer Cache Advice 受 db_cache_advice 參數獨立控制, Timed Statistics 受 timed_statistics 參數獨立控制。其他統計信息的收集都受到STATISTICS_LEVEL 參數的控制。當STATISTICS_LEVEL為Basic時,除受獨立參數影響的Buffer Cache Advice 和TimedStatistics 外,其他信息收集都將被禁止。
我們可以通過查詢V$SHARED_POOL_ADVICE視圖獲得關於Shared Pool的建議信息:
11:36:01 sys@felix SQL>selectSHARED_POOL_SIZE_FOR_ESTIMATE SPSFE,
11:47:38 2 SHARED_POOL_SIZE_FACTOR SPSF,
11:47:38 3 ESTD_LC_SIZE,
11:47:38 4 ESTD_LC_MEMORY_OBJECTS ELMO,
11:47:39 5 ESTD_LC_TIME_SAVED ELTS,
11:47:39 6 ESTD_LC_TIME_SAVED_FACTOR ELTSF,
11:47:39 7 ESTD_LC_MEMORY_OBJECT_HITS ELMOH
11:47:39 8 from v$shared_pool_advice;
SPSFE SPSF ESTD_LC_SIZE ELMO ELTS ELTSF ELMOH
---------- ---------- ------------ -------------------- ---------- ----------
104 .6341 8 834 814 .8781 25081
124 .7561 28 1903 843 .9094 25874
128 .7805 32 2109 848 .9148 25951
132 .8049 35 2318 861 .9288 26110
136 .8293 39 2508 867 .9353 26201
140 .8537 42 2715 873 .9417 26293
144 .878 46 2914 882 .9515 26404
148 .9024 50 3162 889 .959 26515
152 .9268 50 3221 897 .9676 26787
156 .9512 50 3221 904 .9752 27085
160 .9756 50 3221 916 .9881 28117
164 1 50 3221 927 1 29153
168 1.0244 50 3221 927 1 29157
172 1.0488 50 3221 927 1 29157
176 1.0732 50 3221 927 1 29157
180 1.0976 50 3221 927 1 29157
184 1.122 50 3221 927 1 29157
188 1.1463 50 3221 927 1 29157
192 1.1707 50 3221 927 1 29157
196 1.1951 50 3221 927 1 29157
200 1.2195 50 3221 927 1 29157
204 1.2439 50 3221 927 1 29157
224 1.3659 50 3221 927 1 29157
244 1.4878 50 3221 927 1 29157
264 1.6098 50 3221 927 1 29157
284 1.7317 50 3221 927 1 29157
304 1.8537 50 3221 927 1 29157
324 1.9756 50 3221 927 1 29157
344 2.0976 50 3221 927 1 29157
29 rows selected.
11:47:40 sys@felix SQL>
通過以上統計數據分析,當shared_pool_size設置為304M時即可達到和現在相同的效果,
目前的shared_pool_size設置浪費了部分內存,那麼我們就可以動態調整shared_pool_size參數,
釋放這部分內存,留給其他內存組件使用。
SQL> alter system setshared_pool_size=304M;
當進行動態參數修改時,修改Session會處於等待狀態,等待事件為background parameter
adjustment:
SQL> selectsid,seq#,event,SECONDS_IN_WAIT,state
2 from v$session_waitwhere sid=80;
SID SEQ# EVENT SECONDS_IN_WAIT STATE
---------- ------------------------------------------------------------------------80 46479 background parameter adjustment 928 WAITING
這個調整的時間可能極其漫長,從v$lock視圖中,我們還可以獲得相關鎖定信息:
SQL> select * fromv$lock where sid=80;
ADDR KADDR SID TYPE ID1ID2 LMODE
REQUEST CTIME BLOCK
-------------------------------- ---------- ---- ---------- ---------- ------------------------------ ----------00000003CF3D6048 00000003CF3D6068 80 PE 44 0 4
0 1437 0
鎖定類型為PE,即Kernel Service system Parameters ENQUEUE,在修改系統參數時需要獲取該鎖定。
需要提醒的是,雖然Oracle9i中,Oracle提供了動態內存修改的功能,但是仍然建議在系統規劃時做好設置,盡量避免運行時的動態調整。動態調整某些系統參數(如undo_retention 等)在繁忙的系統中可能觸發bug而造成系統掛起。