Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3387848
  • 博文数量: 631
  • 博客积分: 10716
  • 博客等级: 上将
  • 技术积分: 8397
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-01 22:35
文章分类

全部博文(631)

文章存档

2020年(2)

2019年(22)

2018年(4)

2017年(37)

2016年(22)

2015年(1)

2013年(12)

2012年(20)

2011年(19)

2010年(20)

2009年(282)

2008年(190)

分类: Oracle

2009-02-25 12:59:20

•1、          问题概述

2009年1月22日对dg_vassms进行系统巡检,并对数据库进行了性能分析,发现存在的问题如下:

  • l 问题:

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大小,建议及时清理。

•2、          系统配置

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

•3、          调整建议

综上所述。整个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目录。

•4、           注意事项

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,但需要重启才能生效。

  • 2) 是否进行以上参数的调整?如同意签字,则约定时间,并制定计划表,大约所需时间。

•5、          调整步骤

1)   修改pfile文件,设置如上;

2)    停止应用,关闭监听,关闭oracle server;

3)    修改system文件,重启生效;

4)    检查/var/adm/message,如正常,进行下一步;

5)    启动数据库,检查数据库状态,检查参数设置是否生效;

6)   如正常,则启动监听,启动应用;

7)    进行应用测试;

8)    多次检查io、cpu状态,检查alert文件,/var/adm/message*;

  • 9) 查看udump目录情况,建议清理udump目录下的trc文件;

10)    应用测试如正常,检查没有发现错误,则签收现场服务报告单;

11)    收拾现场,检查无误。

阅读(1593) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~