分类: Oracle
2009-02-25 12:59:20
2009年1月22日对dg_vassms进行系统巡检,并对数据库进行了性能分析,发现存在的问题如下:
1) 缓冲区命中率非常低,54.5%;
SQL> select round((1-(phy.value/(cur.value+con.value)))*100,1)||'%' ratio
2 from v$sysstat phy,v$sysstat cur,v$sysstat con
3 where phy.name='physical reads' and cur.name='db block gets' and con.name='consistent gets';
RATIO
-----------------------------------------
54.5%
2) 当前系统sort_area_size值较低,造成磁盘排序较高;
SQL> select a.value "Sort(Disk)", b.value "Sort(Memory)",
2 round(100*(a.value/decode((a.value+b.value), 0,1,(a.value+b.value))),2) "% Ratio (STAY UNDER 5%)"
3 from v$sysstat a, v$sysstat b
4 where a.name = 'sorts (disk)'
5 and b.name = 'sorts (memory)';
Sort(Disk) Sort(Memory) % Ratio (STAY UNDER 5%)
---------- ------------ -----------------------
6526 141481 4.41
3) 本系统属于业务比较繁忙的系统,solaris有4个双核CPU,建议修改初始化参数db_writer_processes;
4) 本系统日志切换较频繁,每天200次左右,建议修改各日志组文件的大小,由50M改为150M,保持原来的3组;
5) udump目录下trc文件接近4G大小,建议及时清理。
Sun-Fire-V490 --- CPU :4*1350Mhz 双核 MEMORY:16G,ORACLE 8.1.7.4 64bit
ORACLE几个重要的参数设置:
CPU_COUNT 8
db_block_buffers 450000
db_block_size 8192
shared_pool_size 314572800
db_writer_processes 1
db_file_multiblock_read_count 8
整个SGA 4116197052
综上所述。整个SGA区的大小大概为4.1G。整个物理内存大小为16G,SGA占总内存的大小仅为25%左右,这样造成了性能低下和硬件资源的浪费,因此有必要对个别的参数进行调整,以满足数据库性能需要,所以调整的建议如下:
1) 将db_file_multiblock_read_count的值由8改到16;
提高全表扫描性能,因为全表扫描时,Oracle会一次读取多个Blocks。每次读取的块数将受初始化参数DB_FILE_MULTIBLOCK_READ_COUNT和操作系统的I/O缓冲区大小的限制。
2) db_writer_processes=3;
由于V490是4个CPU,且是双核处理器,当前db_writer_processes为1,这样发挥不了多双核CPU带来的性能提高,建议增加到3,这样增加了数据库的写带宽。
3) db_block_buffers =800000;
正如上面所说,性能瓶颈大部分体现在数据库高速缓存的命中率非常的低,仅有54%左右,数据库缓存(Block Buffer)对于Oracle数据库的运转和性能起着非常关键的作用,它占据Oracle数据库SGA(系统共享内存区)的主要部分。Oracle数据库通过使用LRU算法,将最近访问的数据块存放到缓存中,从而优化对磁盘数据的访问效率,使之接近于内存访问的速度。由于数据库应用的核心操作就是数据的访问和处理,因此如果应用系统访问的大部分数据块已在缓存中,也就是数据在缓存中命中,那么应用在数据访问上的磁盘I /O等待和瓶颈将可以消除。
因此加大数据库高速缓存,提高数据库高速缓存的命中率对数据库的性能有极大的提高。基于现在的环境,建议调整db_block_buffers 为800000,大概占6.3G左右的内存空间。
4) sort_area_size=8388608;
针对每个session,排序首先会使用sort_area_size ,假如不足则会使用临时表空间。导致了排序性能下降。
5) root用户修改/etc/system文件:set shmsys:shminfo_shmmax= 12884901888;
6) 清理udump目录。
1) Root用户检查system文件,查看相关参数的配置情况,建议调整共享内存段
当前配置情况:
set shmsys:shminfo_shmmax=4294967295
set shmsys:shminfo_shmseg=50
set semsys:seminfo_semmns=2010
set semsys:seminfo_semmni=200
set semsys:seminfo_semmsl=1010
set semsys:seminfo_semvmx=32767
set semsys:seminfo_semopm=100
set msgsys:msginfo_msgmnb=409600
set msgsys:msginfo_msgtql=200
建议调整set shmsys:shminfo_shmmax = 12884901888,但需要重启才能生效。
1) 修改pfile文件,设置如上;
2) 停止应用,关闭监听,关闭oracle server;
3) 修改system文件,重启生效;
4) 检查/var/adm/message,如正常,进行下一步;
5) 启动数据库,检查数据库状态,检查参数设置是否生效;
6) 如正常,则启动监听,启动应用;
7) 进行应用测试;
8) 多次检查io、cpu状态,检查alert文件,/var/adm/message*;
10) 应用测试如正常,检查没有发现错误,则签收现场服务报告单;
11) 收拾现场,检查无误。