??xml version="1.0" encoding="utf-8" standalone="yes"?>国内精品伊人久久久久影院对白,99精品国产一区二区三区,一卡二卡三卡日韩欧美http://www.aygfsteel.com/zhuyuanxiang/archive/2008/03/06/184354.htmlp?Apusic技术顾?/dc:creator>p?Apusic技术顾?/author>Thu, 06 Mar 2008 13:37:00 GMThttp://www.aygfsteel.com/zhuyuanxiang/archive/2008/03/06/184354.htmlhttp://www.aygfsteel.com/zhuyuanxiang/comments/184354.htmlhttp://www.aygfsteel.com/zhuyuanxiang/archive/2008/03/06/184354.html#Feedback0http://www.aygfsteel.com/zhuyuanxiang/comments/commentRss/184354.htmlhttp://www.aygfsteel.com/zhuyuanxiang/services/trackbacks/184354.html 前言Q?/span>

通过紧张的网通、移动性能试Q虽然测试准备和讨论的环节很多,应用服务器测试如果要体现应用服务器的性能Q那么在试环节中,其他环节不能成ؓ(f)瓉Q否则应用服务器的性能很隑ֱ现。但实际在我们的试实践中,无论准备情况Q数据库调优都是永恒的话题,数据库的优劣直接影响整个试的性能表现。本文结合了(jin)一些测试经验和一些资料的整理Q给Z(jin)个h的一些经验,共大家分享,本文重?/span> Unix 环境?/span>

一般问题的发现?qing)解冻I(x)

Oracle 数据库服务器是整个系l的核心(j)Q它的性能高低直接影响整个pȝ的性能Qؓ(f)?jin)调?/span> Oracle 数据库服务器的性能Q主要从以下几个斚w考虑Q?/span>

W一步:(x)

    调整操作pȝ以适合 Oracle 数据库服务器q行Q?/span> Oracle 数据库服务器很大E度上依赖于q行服务器的操作pȝQ如果操作系l不能提供最好性能Q那么无论如何调_(d) Oracle 数据库服务器也无法发挥其应有的性能?/span>

W二步:(x)

     ?/span> Oracle 数据库服务器规划pȝ资源Q据已有计算机可用资?/span> ,  规划分配l?/span> Oracle 服务器资源原则是Q尽可能?/span> Oracle 服务器用资源最大化 , 特别?/span> Client/Server 中尽量让服务器上所有资源都来运?/span> Oracle 服务。调整计机pȝ中的内存配置Q多数操作系l都用虚存来模拟计算Z更大的内存,它实际上是硬盘上的一定的盘I间。当实际的内存空间不能满_用Y件的要求Ӟ操作pȝ将用这部分的磁盘空间对内存中的信息q行面替换Q这引起大量的盘 I/O 操作Q整个服务器的性能下降。ؓ(f)?jin)避免过多地使用虚存Q应加大计算机的内存?/span>

W三步:(x)

    ?/span> Oracle 数据库服务器讄操作pȝq程优先U,不要在操作系l中调整 Oracle q程的优先Q因为在 Oracle 数据库系l中Q所有的后台和前台数据库服务器进E执行的是同{重要的工作Q需要同{的优先U。所以在安装Ӟ让所有的数据库服务器q程都用缺省的优先U运行?/span>

W四步:(x)

     调整内存分配Q?/span> Oracle 数据库服务器保留 3 个基本的内存高速缓存,分别对应 3 U不同类型的数据Q库高速缓存,字典高速缓存和~冲区高速缓存。库高速缓存和字典高速缓存一h成共享池Q共享池再加上缓冲区高速缓存便构成?jin)系l全E区 (SGA) ?/span> SGA 是对数据库数据进行快速访问的一个系l全E区Q若 SGA 本n需要频J地q行释放、分配,则不能达到快速访问数据的目的Q因此应?/span> SGA 攑֜d中,不要攑֜虚拟内存中。内存的调整主要是指调整l成 SGA 的内存结构的大小来提高系l性能Q由?/span> Oracle 数据库服务器的内存结构需求与应用密切相关Q所以内存结构的调整应在盘 I/O 调整之前q行?/span>

1 、库~冲区的调整

  库缓冲区中包含私用和׃n SQL ?/span> PL/SQL 区,通过比较库缓冲区的命中率军_它的大小。要调整库缓冲区Q必首先了(jin)解该库缓冲区的活动情况,库缓冲区的活动统计信息保留在动态性能?/span> v$librarycache 数据字典中,可通过查询该表来了(jin)解其zd情况Q以军_如何调整?/span>

   Select sum(pins),sum(reloads) from v$librarycache;

   Pins 列给?/span> SQL 语句Q?/span> PL/SQL 块及(qing)被访问对象定义的L敎ͼ Reloads 列给?/span> SQL ?/span> PL/SQL 块的隐式分析或对象定义重装蝲时在库程序缓冲区中发生的错误。如?/span> sum(pins)/sum(reloads) ?/span> 0 Q则库缓冲区的命中率合适;?/span> sum(pins)/sum(reloads)>1, 则需调整初始化参?/span> shared_pool_size 来重新调整分配给׃n池的内存量?/span>

2 ?/span> 数据字典~冲区的调整

  数据字典~冲区包含了(jin)有关数据库的l构、用戗实体信息。数据字典的命中率,对系l性能影响极大。数据字典缓冲区的用情况记录在动态性能?/span> v$librarycache 中,可通过查询该表来了(jin)解其zd情况Q以军_如何调整?/span>

   Select sum(gets),sum(getmisses) from v$rowcache;

   Gets 列是对相应项hơ数的统计; Getmisses 列是引v~冲区出错的数据的请求次数。对于频J访问的数据字典~冲区, sum(getmisses)/sum(gets)<10% ?/span> 15% 。若大于此百分数Q则应考虑增加数据字典~冲区的定wQ即需调整初始化参?/span> shared_pool_size 来重新调整分配给׃n池的内存量?/span>

3 ?/span> ~冲区高速缓存的调整

  用户q程所存取的所有数据都是经q缓冲区高速缓存来存取Q所以该部分的命中率Q对性能臛_重要。缓冲区高速缓存的使用情况记录在动态性能?/span> v$sysstat 中,可通过查询该表来了(jin)解其zd情况Q以军_如何调整?/span>

   Select name,value from v$sysstat where name in ('dbblock gets','consistent gets','physical reads');

   dbblock gets ?/span> consistent gets 的值是h数据~冲ZȝL数?/span> physical reads 的值是h数据时引起从盘中L件的ơ数。从~冲区高速缓存中ȝ可能性的高低UCؓ(f)~冲区的命中率,计算公式Q?/span>

   Hit Ratio=1-(physical reds/(dbblock gets+consistent gets))

  如果 Hit Ratio<60% ?/span> 70% Q则应增?/span> db_block_buffers 的参数倹{?/span> db_block_buffers 可以调整分配l缓冲区高速缓存的内存量,?/span> db_block_buffers 可设|分配缓冲区高速缓存的数据块的个数。缓冲区高速缓存的d节数 =db_block_buffers 的?/span> *db_block_size 的倹{?/span> db_block_size 的DC数据块大小的字节数Q可查询 v$parameter 表:(x)

   select name,value from v$parameter where name='db_block_size';

  在修改了(jin)上述数据库的初始化参C后,必须先关闭数据库Q在重新启动数据库后才能使新的设|v作用?/span>

IO 问题的发现及(qing)解决Q?/span>

很多的时侯,当应用很慢、数据库很慢的时侯,我们到数据库时做几个CZ?/span> Select 也发现同L(fng)问题Ӟ有些时侯我们?x)无从下手,因?f)我们认ؓ(f)数据库的各种命种率都是满?/span> Oracle 文的徏议。实际上如今的优化己l向优化{待 (waits) 转型?jin),实际中性能优化最Ҏ(gu)的出现点也都集中?/span> IO Q这是媄(jing)响性能最主要的方面,ql中的等待去发现 Oracle 库中的不뀁操作系l某些资源利用的不合理是一个比较好的办法。在Ud的测试中Q?/span> Sun 的工E师也推荐这L(fng)做法?/span>

 

W一步:(x)

通过操作pȝ的一些工h查系l的状态,比如 CPU 、内存、交换、磁盘的利用率,Ҏ(gu)l验或与pȝ正常时的状态相比对Q有时系l表面上看v来看I闲q也可能不是一个正常的状态,因ؓ(f) cpu 可能正等?/span> IO 的完成。除此之外我们还应观注那些占用系l资?/span> (cpu 、内?/span> ) 的进E?/span>

 

1 、如何检查操作系l是否存?/span> IO 的问题?使用的工h sar, q是一个比较通用的工兗?/span>

Rp1#sar -u 2 10

x?/span> 2 U检察一ơ,共执?/span> 20 ơ。示例返回:(x)

 

Linux 2.4.21-20.ELsmp (YY075) 05/19/2005

10:36:07 AM CPU %user %nice %system %idle

10:36:09 AM all 0.00 0.00 0.13 99.87

10:36:11 AM all 0.00 0.00 0.00 100.00

10:36:13 AM all 0.25 0.00 0.25 99.49

10:36:15 AM all 0.13 0.00 0.13 99.75

10:36:17 AM all 0.00 0.00 0.00 100.00

10:36:17 AM CPU %user %nice %system %idle

10:36:19 AM all 0.00 0.00 0.00 100.00

10:36:21 AM all 0.00 0.00 0.00 100.00

10:36:23 AM all 0.00 0.00 0.00 100.00

10:36:25 AM all 0.00 0.00 0.00 100.00

 

其中?/span> %usr 指的是用戯E用的 cpu 资源的百分比Q?/span> %sys 指的是系l资源?/span> cpu 资源的百分比Q?/span> %wio 指的是等?/span> io 完成的百分比Q这是值得我们观注的一, %idle 即空闲的癑ֈ比。如?/span> wio 列的值很大,如在 35% 以上Q说明你的系l的 IO 存在瓉Q你?/span> CPU p?jin)很大的旉ȝ?/span> IO 的完成?/span> Idle 很小说明pȝ CPU 很忙?/span>

当你的系l存?/span> IO 的问题,可以从以下几个方面解?/span>

1 、查?/span> Oracle 中不合理?/span> sql 语句Q对其进行优化?/span>

2 、对 Oracle 中访问量频繁的表除合理徏索引外,再就是把q些表分表空间存放以免访问上产生热点Q再有就是对表合理分区?/span>

 

W二步:(x)

x一下内存,常用的工具便?/span> vmstat Q对?/span> hp-unix 来说可以?/span> glance,Aix 来说可以?/span> topas, 当你发现 vmstat ?/span> pi 列非Ӟ memory 中的 free 列的值很, glance,topas 中内存的利用率多?/span> 80% Ӟq时说明你的内存斚w应该调节一下了(jin)Q方法大体有以下几项?/span>

 

1 、划l?/span> Oracle 使用的内存不要超q系l内存的 1/2, 一般保在系l内存的 40% 为益?/span>

为系l增加内?/span>

2 、如果你的连接特别多Q可以?/span> MTS 的方?/span>

3 、打全补丁,防止内存漏洞?/span>

 

W三步:(x)

如何扑ֈ点用pȝ资源特别大的 Oracle ?/span> session ?qing)其执行的语句?/span> Hp-unix 可以?/span> glance,top Q?/span> IBM AIX 可以?/span> topas Q此外可以?/span> ps 的命令。通过q些E序我们可以扑ֈ占用pȝ资源特别大的q些q程的进E号Q我们就可以通过以下?/span> sql 语句发现q个 pid 正在执行哪个 sql Q这?/span> sql 最好在 pl/sql developer,toad {Y件中执行 , ?/span> <> 中的 spid 换成你的 spid 可以了(jin)?/span>

SELECT a.username,a.machine,a.program,a.sid,a.serial#,a.status,c.piece,c.sql_text from v$session a,v$process b,v$sqltext c WHERE b.spid='<>' AND b.addr=a.paddr AND a.sql_address=c.address(+)order BY c.piece

我们可以把得到的这?/span> sql 分析一下,看一下它的执行计划是否走索引Q对其优化避免全表扫描,以减?/span> IO {待Q从而加快语句的执行速度?/span>

另一个有用的脚本Q查扑։十条性能差的 sql:

SELECT * FROM (select PARSING_USER_ID,EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea

order BY disk_reads DESC )where ROWNUM<10 ;

 

注意Q在做优?/span> sql Ӟl常到使用 in 的语句,q时我们一定要?/span> exists 把它l换掉,因ؓ(f) Oracle 在处?/span> In 时是?/span> Or 的方式做的,即使用?jin)?ch)引也?x)很慢?/span> ( q个很有用,我在烟草目中,大量?/span> not in 操作对大数据量的查询是相当的慢,改ؓ(f) exists 后,性能提高 100 倍左叻I视图中的数量Uؓ(f)百万 )  

ȝ

  在性能试中应当指出,׃客户机、网l、服务器q?/span> 3 个相互依存的l成部分都必调整和同步才能产生最佳的性能Q因此还应根据系l的具体情况Q具体分析和调整。本文涉?qing)?/span> Oracle 调优是数据库调优的一部分,希望同事们不断的补充我们的知识库?/span>

 

 

 

 



]]>
վ֩ģ壺 | | Ͻ| ӱ| ̨| ͼ| Ԫ| | ̫| | | | ۩| Ͻ| | Ϸ| | | | | غ| ƽң| | ɽ| | | Դ| ̶| Ӫɽ| Ϋ| ʯ| Ǭ| | | ̨| | | ±| | | |