北京一家规模不大的医院,使用了IBM的P550小型机,在业务高峰期性能急剧下降.
2.性能下降很明显,部分业务无法正常开展。
WORKLOAD REPOSITORY report for
DB Name DB Id Instance Inst num Release RAC Host
ORCL 1247897117 orcl 1 10.2.0.4.0 NO HISDB01
Snap Id Snap Time Sessions Cursors/Session
Begin Snap: 13055 22-Nov-11 08:00:03 212 99.1
End Snap: 13056 22-Nov-11 09:00:03 245 101.5
Elapsed: 59.99 (mins)
DB Time: 2,377.04 (mins)
从awr来看db time是间隔时间的近40倍,性能确实无法接受了。
3.cpu占用率不高。
1.load profile部分:
Instance Efficiency Percentages (Target 100%)
Buffer Hit %: 97.75 In-memory Sort %: 100.00
Library Hit %: 98.62 Soft Parse %: 97.15
Execute to Parse %: 69.23 Latch Hit %: 99.73
Parse CPU to Parse Elapsd %: 0.68 % Non-Parse CPU: 95.96
主要的问题在于Parse CPU to Parse Elapsd只有0.68%,说明大多数的时间花费在了sql的解析上了。
2.Top 5 Events部分:
Top 5 Timed Events
latch: library cache 499,350 139,280 279 97.7 Concurrency
latch free 282,082 82,252 292 57.7 Other
latch: shared pool 136,826 33,818 247 23.7 Concurrency
latch: session allocation 37,423 10,858 290 7.6 Other
db file sequential read 289,996 4,273 15 3.0 User I/O
再次映证了load profile部分,相关的latch非常严重;问题就出在共享池上。
3.看相关的参数,发现了几个参数经过了一些调整,经询问客户,原来是他们先前已经请过Oracle维保的工程师做了一些调整:
session_cached_cursors 1000
open_cursors 3000
session_cached_cursors控制pga/uga中缓存的cursor数量,sql可以不用到共享池进行parse,可减轻共享池的压力;但1000这个值相对ZLHIS太高了;
Open_cursors控制session同时打开的cursors数;这位工程师也认为问题是出在sql parse上。但不幸的是,调整基本没有效果。
4.os相关的分析,通过vmstat发现有一定的swap in /out的发生,服务器只有16g的内存,而sga的设置达到13g;这样os的占用与pga部分很有可能使用到swap,
sga特别是共享池被swap到交换分区,对性能是非常大的损失。同时,查看到了一下aix中vmo的设置,发现相关的设置也有问题,将大量的内存作为文件系统
缓存;需要做一些调整。 一般的数据库服务器,文件型内存可以使用较少的空间,因为文件型内存并不主动释放,可能造成内存资源的短缺及Paging Space使用率过高,所以数据库服务器上maxclient、maxperm、minperm的值不宜过大,典型值如下:
maxclient% = 8
maxperm% = 12
minperm% = 5
如何更改这三个参数呢, 在AIX5.3上,可以使用 vmo 命令,此命令设置或显示所有虚拟内存管理器调整参数的当前值或下一个引导值。还可以用此命令进行永久性更改,或将更改推迟到下一次重新引导之后生效。此命令是设置参数还是显示参数,要由所带标志来决定。带 -o 标志的话,两个操作都执行。同时需要注意AIX5.3与AIX6.1的差异.在AIX6下,部分VMO参数变成了固定参数,需要加F开关才能修改.
vmo -p -o minperm%=3
vmo -p -o maxperm%=90
vmo -p -o maxclient%=90
vmo -p -o strict_maxperm=0
vmo -p -o strict_maxclient=1
vmo -p -o lru_file_repage=0
vmo -p -o page_steal_method=1
alter system set processes=1000 scope=spfile;
alter system set sessions=1200 scope=spfile;
alter system set open_cursors=300 scope=spfile;
alter system set session_cached_cursors=100 scope=spfile;
alter system set pga_aggregate_target=4g scope=spfile;
alter system set shared_pool_size=4g scope=spfile;
alter system set db_cache_size=3g scope=spfile;
alter system set sga_max_size=8g scope=spfile;
alter system set sga_target=0 scope=spfile;
alter system set large_pool_size=300m scope=spfile;
alter system set java_pool_size=100m scope=spfile;
alter system set log_buffer=16777216 scope=spfile;
alter system set "_library_cache_advice"=false scope=spfile;
alter system set cursor_sharing=exact scope=spfile;
Begin Snap: | 13424 | 07-12月-11 10:00:13 | 297 | 98.2 |
End Snap: | 13425 | 07-12月-11 11:00:59 | 297 | 99.9 |
Elapsed: | 60.77 (mins) | |||
DB Time: | 175.39 (mins |