Oracle8.1.7 SGA 参数调整(附结合医院单位HIS数据库服务器的实际应用)

○、案例分析:(2010-03-03)

 

因为执行HIS程序太慢,医院HIS的护理管理完成“一日清单批量打印”需要340秒,而且一旦执行此项操作就会让服务器硬盘满负荷(根据查看MS自带的性能监视器),其它HIS用户,如门诊,住院收费都会

 

卡住,每做一项操作(如项目显示,保存)都要等几秒钟。所以我们认为需要升级医院HIS服务器,尤其是更换高I/0速度的硬盘或增加磁盘阵列柜。呵呵,造的升级服务器预算达10万!

 

但有专家提醒,增加内存,调整oracle,让执行HIS程序所需要的数据来自内存,而不去费时地读硬盘来获取。

 

最后的疑问就是:医院HIS服务器太慢需要升级,但不知道仅仅靠增加内存是否就能完成?

 

一、oracle数据库的内存结构即SGA

  它包含数个重要区域分别是:Database Buffer Cache (数据库缓冲区)Redo Log Buffer (重做日志缓冲区)Shared Pool (共享区);其它,如Java pool Large pool

 

二、Database Buffer Cache (数据库缓冲区)
  数据库缓冲区的作用主要是在内存中缓存从数据库中读取的数据块。数据库缓冲区越大,为用户已经在内存里的共享数据提供的内存就越大,这样可以减少所需要的磁盘物理读。


  在9i以前数据库缓冲区的大小是由db_block_buffers*db_block_size来决定大小的。db_block_size参数是在创建数据库时设置的,OLTP系统的db_block_size一般设置为8k


  在9i中,数据库缓冲区的大小由db_cache_size决定,8i中的db_block_buffers被取消。db_cache_size的单位是字节,它直接决定了数据库缓冲区的大小,而不再是块的数量。


三、如何查看sgadb_block_sizedb_block_buffers

SQL> show sga

SQL> show parameter db_block_size;

SQL> show parameter db_block_buffers;

 

 

Total System Global Area 530020380 bytes

Fixed Size                   75804 bytes

Variable Size            120266752 bytes

Database Buffers         409600000 bytes

Redo Buffers                 77824 bytes

 

四、如何修改8i数据库缓冲区(data buffer cache)的大小

修改init.ora文件(路径例如$OracleHome/admin/tyyb/pfile/inittyyb.ora)

中的:

db_block_buffers = ******

最后重启实例即可。

 

五、Data buffer命中率检查(没怎么用,因为白天和晚上命中率的变化好大)

   语句如下:

  select 1 - ((physical.value - direct.value - lobs.value) / logical.value)

 2   "Buffer Cache Hit Ratio"

 3   from v$sysstat physical,v$sysstat direct,v$sysstat lobs,v$sysstat logical

 4  where physical.name = 'physical reads'

 5  and direct.name='physical reads direct'

 6  and lobs.name='physical reads direct (lob)'

 7  and logical.name='session logical reads';

调整原则:
  命中率不应该低于90%.
  如果该值过低,应该调高初始化参数。8i调整db_block_buffer9i调整db_cache_size

 

六、创建数据库(Database Configuration Assistant)时,亦可设置

    

    创建数据库时有一个步骤是用来配置SGA参数信息的。如图,这里设置的块大小(字节)就是db_block_size参数,为4k

   块缓冲区就是db_block_buffers参数,为77691

   这样Database Buffers就为:4096* 77691= 318,222,336

 

 

七、结合我们医院HIS数据库服务器的实际应用

   服务器先前的DatabaseBuffers94M,我根据服务器新增1G内存后,尚有400M空闲,把DatabaseBuffers增加380M,调至474M。(具体就是在init.ora中增加db_block_buffers的值

 

   结果:  ^_^

   之前医院HIS完成“一日清单批量打印”需要340秒(数据完全靠读硬盘)。

 

   现在,执行一次“一日清单批量打印”(也就是将相关数据全部存储在内存的SGA)以后,再执行“一日清单批量打印”就只要3秒钟了~

 

2012-07-24

现在服务器又开始慢了,药房发药要等几分种。

查看sga,db_block_size,db_block_buffers

SQL> show sga

SQL> show parameter db_block_size;

SQL> show parameter db_block_buffers;

 

 

Total System Global Area  526395380 bytes

Fixed Size                    75804 bytes

Variable Size             120266752 bytes

Database Buffers          473997312 bytes

Redo Buffers                  77824 bytes

db_block_size                                4096

db_block_buffers                      115722

服务器的物理内存是                  2000M

已用                                              1078M

这样就有922M 空闲空间,再给database buffers700M,达到1200M左右。(1173997312=4096*286620.4375)

那么db_block_buffers 就应该调整为286620

 

注意,关闭实例时,千万别选“正常关闭”,因为很可能是无限期等待,用户断开连接

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值