程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle內存管理(之五)

Oracle內存管理(之五)

編輯:Oracle教程

Oracle內存管理(之五)


【深入解析--eygle】學習筆記

1.4. 2其他內存組件

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>

1.4.3 SGA 與共享內存

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命令可以強制釋放該共享內存段,完成這些特殊處理後,數據庫通常就可以正常啟動了。

1.4.4 9i SGA管理 

從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而造成系統掛起。

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