Oracle10G的Sga_max_size和sga_target应该如何设置啊!

1调整缘由sql

咱们的客户反应如今咱们公司的软件使用起来比较漫。目前他们已经用快要两年了。根据用户反应的状况,公司派我到现场作数据库调优。我在现场走访了几个部门,也向操做人员了解了一些状况。我初步分析认定为是数据库性能存在问题。数据库

认定的理由是在用户操做的时候,不是每次操做都漫,也有快的时候,根据这样特色我下定结论是数据库问题。在操做漫的时候确定是使用的人多(也可说是并发多),因此数据库资源有些紧张,因此使用时就漫了。缓存

2数据库分析服务器

我也在网上找了一些资料,对数据库的性能指标进行了评估,结果几项指标都没达到要求。(也不知道我分析的对不对,若有不对的地方,还请大侠多多指教,小弟我刚出道,之前是搞开发的。)session

2.1性能指标架构

性能指标并发

参考办法oracle

查询语句性能

原值测试

2010-4-2
8:01:00

2010-4-2
9:56:00

v$librarycache

v$librarycache中reloads/pins的比率应该小于1%,若是大于1%,应该增长参数shared_pool_size的值。

Select sum(pins) “executions”,sum(reloads) “cache misses”,sum(reloads)/sum(pins) from v$librarycache;

0.028362

0.011563686

0.026409799

监视共享池的性能

SQL AREA部分的gethitratio、pinhitratio要> 90%。

select namespace,gethitratio,pinhitratio,reloads,invalidations
from v$librarycache where namespace in (‘SQL AREA’,’TABLE/PROCEDURE’,’BODY’,’TRIGGER’);

0.666566

0.539428

0.655988245

从新装载率Reload Ratio要< 1%。

select SUM(reloads)/SUM(pins)“Reload Ratio”from V$librarycache;

2.83662

0.011831132

0.0264695

调整缓冲区高速缓存(Buffer Cache)的性能

“Buffer Cache Hit Ratio”的值要> 90%。

select 1-((physical.value–direct.value–lobs.value)/logical.value)“Buffer Cache Hit Ratio”from V$SYSSTAT physical, V$SYSSTAT direct,V$SYSSTAT lobs, V$SYSSTAT logical where physical.name =‘physical reads’
And direct.name =‘physical reads direct’and
lobs.name =‘physical reads direct (lob)’
And logical.name =‘session logical reads’;

0.793315

0.786405701

0.698056181

2.2如今的Sgainfo信息

Fixed SGA Size

No

1251172

Redo Buffers

No

7135232

Buffer Cache Size

Yes

1317011456

Shared Pool Size

Yes

125829120

Large Pool Size

Yes

8388608

Java Pool Size

Yes

8388608

Streams Pool Size

Yes

0

Granule Size

No

8388608

Maximum SGA Size

No

1468006400

Startup overhead in Shared Pool

No

58720256

Free SGA Memory Available

0

正是由于根据上面的分析结果,因此就更确定了是数据库问题。我就把目光放在了Sga_max_size和sga_target它俩上,经过调整它俩来加大共享池(shared_pool_size)。

3应用环境描述

服务器

型号/类型:IBM SYSTEM 3650 CPU:Intel® Xean® E5430 2.66(4颗单核)

内存:4G 硬盘:146G*7(使用磁盘阵列)

网卡:NetXtreme II GigE(2块) 是否RIAD:是,RIAD5

操做系统:

名称:Windows 32位 版本:2003 SP1

数据库:

名称:Oracle 版本:E10.2.0.1

所属行业:

行业名称:医院办公系统(HIS)

系统架构:C/S

客户端数:150台,实际应用120台左右(经过会话看的,也不知道还能怎么看)

4参数修改

经过对以上内容的分析和在网上找了一些参考资料,决定将sga_max_size和sga_target调整到2200M,可是操做结果失败了,告诉我内存不够,数据库启不来了,还有备份机,要否则我就惨了(我事先没作备份,当时老突突了,原本在操做前都想到要备份了,结果仍是没备,后怕。)。

4.1备份

这步是我后加在的,必须得作。呵呵~~可别让本身后怕了。

把这个文件考那都行“D:\oracle\product\10.2.0\db_1\dbs\SPFILEORCL.ORA”,要是改完以后启不了数据库了那就在把文件考回去。固然还有其它方法。

根据初化参数文件spfile建立pfile文件,此文件能够进行编辑,修改初始化参数。

开始——》运行——》cmd

>sqlplus / as sysdba

SQL>create pfile='c:\orcl.ora' from spfile;

根据修改后的pfile文件建立spfile文件。

SQL>create spfile from pfile='c:\orcl.ora';

4.2修改参数

开始——》运行——》cmd

>sqlplus / as sysdba;

SQL>ALTER system SET sga_max_size=2200mscope=spfile;

SQL>ALTER system SET sga_target=2000mscope=spfile;

4.3关闭数据库

SQL>shutdown immediate;

4.4开启数据库

SQL>startup;

就在这一步出现问题了,报内存不够用,当时很不能理解,明明是4G内存,我才设置到2.2G,怎么能不够呢!由于比较着急,因此就用备份机上的文件“SPFILEORCL.ORA”给恢复了,数据库启来了。就那样用了。优化失败。(也不知道这样用有没有问题,若是有问题还请你们给指点指点,说明一下存在问题的缘由和解决办法,小弟多谢了。)

面对失败我很是不甘心,回去后在本身的笔记本上好个试(机器配置就不详说了,2.53双核,2G内存,XP sp3,Oracle Database10gEnterprise Edition Release10.2.0.1.0,32-bit),测试结果是,个人机子最多能够设置到1700M,当设置到1800M的时候,就启不了数据库了。本觉得我就能设置到1700M呢!在次日我又测试了一遍,又设置到了1800M,此次我没有直接用startup启动数据库,而是在“服务”中把数据库服务从新启动了一下,呵呵~~数库也启动了。试过1900M,是启不来的(我这只是测试,设置到这么大是不合理的,我看的资料说大小等于物理内存-1.5么!也不知道这样是否是最合理的,有机会必定得试试。呵呵~~)。

经过这个测试,让我忽然间想起了,前一天晚上对服务器的设置,我当时也是在命令行中直接用startup启动的数据库,若是我在服务中将数据库服务重启一下,会不会也能够启来呢?????有这个可能性。我在想,是否是即便我关闭了数据库,服务是否是也会点用内存(经过下面的测试,没看出有关系来),并无释放内存呢!正是由于这样,因此物理内存可用的并很少了,而我设置的值却大于了可用内存,这一点我没有验证,只是推测。(写完了,我就试试,哈哈……)

测试状况

一、先把我本机的数据库设置的值恢复到合理的值。(登陆SQLPLUS我就不说了)

SQL>ALTER system SET sga_max_size=600mscope=spfile;

SQL>ALTER system SET sga_target=600mscope=spfile;

二、关闭数据库,把服务也重启一下,让一切恢复到原始状态。

SQL>shutdown immediate;

三、记录内存如今占用的状况。

系统共用:1.2G;ORACLE:222876K

四、修改数据库的那俩个参数。

SQL>ALTER system SET sga_max_size=1600mscope=spfile;

SQL>ALTER system SET sga_target=1600mscope=spfile;

五、关闭数据库。

SQL>shutdown immediate;

六、记录如今内存使用状况。(看如今这种状况,现用内存+我设置的,已经大于物理内存了。)

系统共用:597M;ORACLE:76916K

七、启动数据库。

SQL>startup;

八、结果。并记录如今内存使用状况。

能够启动。

系统共用:2.18G;ORACLE:246384K

九、分析内存的使用状况。

如今使用的内存已经大于我实际内存(2G,只能看到1.93G)了。怪怪怪……这是怎么回事啊!阿,知道了,哈哈……是否是把虚拟内存也算上了。个人虚拟内存是2046~4092(至关于2G~4G)。

十、增大SGA到1700,重复第四步,到第8步。

能够启动。

系统共用:2.28G;ORACLE:248568K

十一、增大SGA到1800,重复第四步,到第8步。

报错,数据库没法启动。

ORA-27102: out of memory

十二、在服务中把数据库服务中止。记录内存使用状况。

系统共用:560M;

1三、在服务中启动数据库服务。

启动成功能。

系统共用:2.35G;ORACLE:278292K

1四、结论。

关于最大能加到多大我就不试了,反证加到1900确定是不行的。最后的结论是,没弄明白究竟是什么原理,究竟是和个人内存大小有关,仍是和这个值设置的上限有关,呜呜呜~~~~~那位高人知道,那就说说吧!很想知道为何,还会继续研究的,颇有意思。哈哈~~

若是是和个人内存大小有关,那么我以为个人那台服务器设置到2200是有戏的。若是是那个值(仍是别那个值了,就是sga_max_size的值)有上限……

我也把个人分析和用户那个管事的说了,可是因为要放假了,因此我就不能验证了。正好这也是给我个机会,有充足的时间,我能够多问问了,呵呵~~

4.5查看修改后的参数

SQL>select * from v$sga;

SQL>show parameter sga_max_size;

SQL>show parameter sga_target;

4.6分析修改后的性能指标状况

根据第2节的性能指标,检查如今的数据库。

请前辈们多多指教,看看我那台服务器的配置,参数sga_max_size和sga_target设置为多大更合理(如今是1400M)。另外,有没有什么更好办法能够测试出服务器性能的、有没有其它参数须要修改的或者是有现成的很是实用的文档,请不要保留,发出来让俺也学学。多谢。(网上也看了不少,可是没找到我相要的,多是我太笨了,呜呜~~)

转载:http://space.itpub.net/14769796/viewspace-631265

相关文章
相关标签/搜索