loadrunner监控oracle数据库计数器要点.docx
- 文档编号:24183122
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:10
- 大小:20.12KB
loadrunner监控oracle数据库计数器要点.docx
《loadrunner监控oracle数据库计数器要点.docx》由会员分享,可在线阅读,更多相关《loadrunner监控oracle数据库计数器要点.docx(10页珍藏版)》请在冰豆网上搜索。
loadrunner监控oracle数据库计数器要点
计数器介绍:
1、sorts(disk)(V$SYSSTAT)
Ifthenumberofdiskwritesisnon-zeroforagivensortoperation,thenthisstatisticisincremented.SortsthatrequireI/Otodiskarequiteresourceintensive.TryincreasingthesizeoftheinitializationparameterSORT_AREA_SIZE.Formoreinformation,see"SORT_AREA_SIZE".
sorts(memory)andsorts(disk):
sorts(memory)是在SORT_AREA_SIZE(因此不需要在磁盘进行排序)的排序操作的数量。
sorts(disk)则是由于排序所需空间太大,SORT_AREA_SIZE不能满足而不得不在磁盘进行排序操作的数量。
这两项统计通常用于计算in-memorysortratio。
2、sort(memory)(V$SYSSTAT)
Ifthenumberofdiskwritesiszero,thenthesortwasperformedcompletelyinmemoryandthisstatisticisincremented.Thisismoreanindicationofsortingactivityintheapplicationworkload.Youcannotdomuchbetterthanmemorysorts,exceptmaybenosortsatall.SortingisusuallycausedbyselectioncriteriaspecificationswithintablejoinSQLoperations.
In-memorysortratio:
该项显示内存中完成的排序所占比例。
最理想状态下,在OLTP系统中,大部分排序不仅小并且能够完全在内存里完成排序。
公式:
sorts(memory)/(sorts(memory)+sorts(disk))
执行:
selecta.value/(b.value+c.value)
fromv$sysstata,v$sysstatb,v$sysstatc
wherea.name='sorts(memory)'and
b.name='sorts(memory)'andc.name='sorts(disk)';
对于要做大量排序操作的SQL语句的执行(例如select*fromttorderby1,2,3,4;),可监控到sort(disk)和sort(memory)都会有所上升。
性能好的话,应该是大部分排序在内存中进行。
查询PGA统计信息:
SELECT*FROMv$pgastat;
查看bytesprocessed、extrabytesread/written的增量值和cachehitpercentage的值
如果cachehitpercentage偏低,则要考虑调整PGA
PGA
(ProgramGlobalArea程序全局区)是一块包含一个服务进程的数据和控制信息的内存区域。
它是Oracle在一个服务进程启动时创建的,是非共享的。
一个Oracle进程拥有一个PGA内存区。
一个PGA也只能被拥有它的那个服务进程所访问,只有这个进程中的Oracle代码才能读写它。
因此,PGA中的结构是不需要Latch保护的。
3、dbblockgets(V$SYSSTAT)
NumberofblocksaccessedinbuffercacheforINSERT,UPDATE,DELETE,andSELECTFORUPDATE.Representblocklogicalreads(fromcache).ThelogicalreadsALWAYSincludethephysicalreads.Lownumberofphysicalreadsispreferable.
在Oracle的文档中有这样一段解释:
dbblockgets:
NumberoftimesaCURRENTblockwasrequested.
consistentgets:
Numberoftimesaconsistentreadwasrequestedforablock.
physicalreads:
Totalnumberofdatablocksreadfromdisk.Thisnumberequalsthevalueof"physicalreadsdirect"plusallreadsintobuffercache.
---------------------------------------------------------------
针对以上3个概念进行的说明解释及关系如下:
1、DBBlockGets(当前请求的块数目)
当前模式块意思就是在操作中正好提取的块数目,而不是在一致性读的情况下而产生的块数。
正常的情况下,一个查询提取的块是在查询开始的那个时间点上存在的数据块,当前块是在这个时刻存在的数据块,而不是在这个时间点之前或者之后的数据块数目。
2、ConsistentGets(数据请求总数在回滚段Buffer中的数据一致性读所需要的数据块)
这里的概念是在处理你这个操作的时候需要在一致性读状态上处理多少个块,这些块产生的主要原因是因为由于在你查询的过程中,由于其他会话对数据块进行操作,而对所要查询的块有了修改,但是由于我们的查询是在这些修改之前调用的,所以需要对回滚段中的数据块的前映像进行查询,以保证数据的一致性。
这样就产生了一致性读。
3、Physicalreads(物理读)
就是从磁盘上读取数据块的数量,其产生的主要原因是:
1)、在数据库高速缓存中不存在这些块
2)、全表扫描
3)、磁盘排序
它们三者之间的关系大致可概括为:
逻辑读指的是Oracle从内存读到的数据块数量。
一般来说是'consistentgets'+'dbblockgets'。
当在内存中找不到所需的数据块的话就需要从磁盘中获取,于是就产生了'physicalreads'。
BufferCacheHitRatio
查看oracle缓存的命中率(大于90%)
select1-((physical.value-direct.value-lobs.value)/logical.value) "BufferCacheHitRatio"
fromv$sysstatphysical,v$sysstatdirect,v$sysstatlobs,v$sysstatlogical
wherephysical.name='physicalreads'
anddirect.name='physicalreadsdirect'
andlobs.name='physicalreadsdirect(lob)'
andlogical.name='sessionlogicalreads';
该项显示buffercache大小是否合适
4、parsecount(hard)(V$SYSSTAT)
Totalnumberofparsecalls(realparses).Ahardparseisaveryexpensiveoperationintermsofmemoryuse,becauseitrequiresOracletoallocatea
workheapandothermemorystructuresandthenbuildaparsetree.Shouldbeminimized.TheratioofHardParsetoTotalshouldbelessthan20%.
parsecount(hard):
在sharedpool中解析调用的未命中次数。
当sql语句执行并且该语句不在sharedpool或虽然在sharedpool但因为两者存在部分差异而不能被使用时产生硬解析。
如果一条sql语句原文与当前存在的相同,但查询表不同则认为它们是两条不同语句,则硬解析即会发生。
硬解析会带来cpu和资源使用的高昂开销,因为它需要oracle在sharedpool中重新分配内存,然后再确定执行计划,最终语句才会被执行。
parsecount(total):
解析调用总数,包括软解析和硬解析。
当session执行了一条sql语句,该语句已经存在于sharedpool并且可以被使用则产生软解析。
当语句被使用(即共享)所有数据相关的现有sql语句(如最优化的执行计划)必须同样适用于当前的声明。
这两项统计可被用于计算软解析命中率。
Softparseratio:
这项将显示系统是否有太多硬解析。
该值将会与原始统计数据对比以确保精确。
例如,软解析率仅为0.2则表示硬解析率太高。
不过,如果总解析量(parsecounttotal)偏低,这项值可以被忽略。
公式:
1-(parsecount(hard)/parsecount(total))
执行:
select1-(a.value/b.value)
fromv$sysstata,v$sysstatb
Wherea.name='parsecount(hard)'andb.name='parsecount(total)';
Theparseprocessincludesthefollowingphases:
CheckingthattheSQLstatementissyntacticallyvalid(thatis,thattheSQLconformstotherulesoftheSQLlanguage,andthatallkeywordsandoperatorsarevalidandcorrectlyused).
CheckingthattheSQLissemanticallyvalid.Thismeansthatallreferencestodatabaseobjects(suchastablesandcolumns)arevalid.
Checkingsecurity(thatis,thattheuserhaspermissiontoperformthespecifiedSQLoperationsontheobjectsinvolved).
DetermininganexecutionplanfortheSQLstatement.TheexecutionplandescribestheseriesofstepsthatOracleperformsinordertoaccessandupdatethedatainvolved.
Parsingcanbeanexpensiveoperation.ItsoverheadisoftenmaskedbythegreateroverheadofhighI/Orequirements.However,eliminatingunnecessaryparsingisalwaysdesirable.
Theparse/executeratioreflectstheratioofparsecallstoexecutecalls.Becauseparsingisanexpensiveoperation,itisbettertoparsestatementsonceandthenexecutethemmanytimes.Highparseratios(greaterthan20%)canresultfromthefollowingcircumstances:
Ifliterals,ratherthanbindvariables,areusedasqueryparameters,theSQLmustbere-parsedoneveryexecution.Youshouldusebindvariableswheneverpossible,unlessthereisapressingreasonforusingcolumnhistograms.
SomedevelopmenttoolsortechniquesresultinSQLcursorsbeingdiscardedafterexecution.Ifacursorisdiscarded,thentheparseisrequiredbeforethestatementcanbere-executed.
诊断:
查找不能被充分共享利用的SQL语句(查询LibraryCache中执行次数偏低的SQL语句):
SELECTsql_textFROMv$sqlareaWHEREexecutions<5ORDERBYUPPER(sql_text);
查找SQL执行次数和SQL解释次数(hardparse),对比两个值的差:
SELECTsql_text,parse_calls,executionsFROMv$sqlareaORDERBYparse_calls;
查询v$librarycache视图的Reloads值(reparsing)的值,值应该接近0,否则应该考虑调整sharedpoolsize,通过调整SharedPool来调整LibraryCache
invalidations的值也应该接近0
SQL>selectnamespace,gethitratio,pinhitratio,reloads,invalidationsfromv$librarycache;
SELECTgethitratioFROMv$librarycacheWHEREnamespace='SQLAREA';
SELECTsql_text,users_executing,executions,loadsFROMv$sqlarea;
进一步查询该SQL的完整信息:
SELECT*FOMv$sqltextWHEREsql_textLIKE'SELECT*FROMhr.employeesWHERE%'
5、CPUusedbythissession(V$SYSSTAT)
AmountofCPUtime(intensofmilliseconds)usedbyasessionfromthetimeausercallstartsuntilitends.Ifausercallcompleteswithin10milliseconds,thestart-andend-usercalltimesarethesameforpurposesofthisstatistic,and0millisecondsareadded
ParseCPUtototalCPUratio:
该项显示总的CPU花费在执行及解析上的比率。
如果这项比率较低,说明系统执行了太多的解析。
公式:
1-(parsetimecpu/CPUusedbythissession)
执行:
select1-(a.value/b.value)
fromv$sysstata,v$sysstatb
wherea.name='parsetimecpu'and
b.name='CPUusedbythissession';
V$SYSSTATshowsOracleCPUusageforallsessions.Thestatistic"CPUusedbythissession"showstheaggregateCPUusedbyallsessions.
V$SESSTATshowsOracleCPUusagepersession.YoucanusethisviewtodeterminewhichparticularsessionisusingthemostCPU.
Ifyoucan,determinewhytheprocessesusesomuchCPUtimeandattempttotunethem.Possibleareastoresearchinclude,butarenotlimitedto,thefollowing:
ReparsingSQLStatements
ReadConsistency
ScalabilityLimitationsWithintheApplication
WaitDetection
LatchContention
---------------------------------------------------------------------------------------------
修改samplerate:
Tochangethelengthofeachmonitoringsample(inseconds),editthe dat\monitors\vmon.cfg fileintheLoadRunnerrootfolder.Thedefaultrateis10seconds.
TheminimumsamplingratefortheOracleMonitoris10seconds.Ifyousetthesamplingrateatlessthan10seconds,theOracleMonitorwillcontinuetomonitorat10secondintervals.
添加自定义计数器:
在LoadRunner安装路径的\dat\monitors找到vmon.cfg文件并修改:
[V$Monitor]
Counters=150
CustomCounters=9
;Howmanysecondsforeachdatasample?
SamplingRate=10
[Custom0]
;Namemustbeunique
Name=库快存命中率
Description=该计数器返回当前库快存命中率
Query=SELECT100*((sum(pins-reloads))/sum(pins))fromv$librarycache
IsRate=0
[Custom1]
;Namemustbeunique
Name=高速缓存区命中率
Description=oracledatabaseshootstraight
Query=SELECTround(1-SUM(PHYSICAL_READS)/(SUM(DB_BLOCK_GETS)+SUM(CONSISTENT_GETS)),4)*100FROM(SELECTCASEWHENNAME='physicalreads'THENVALUEENDPHYSICAL_READS,CASEWHENNAME='dbblockgets'THENVALUEENDDB_BLOCK_GETS,CASEWHENNAME='consistentgets'THENVALUEENDCONSISTENT_GETSFROMV$SYSSTATWHERENameIN('physicalreads','dbblockgets','consistentgets'))
IsRate=0
[Custom2]
;Namemustbeunique
Name=共享区库缓存区命中率
Description=命中率应大于0.99
Query=Selectround(sum(pins-reloads)/sum(pins)*100,2)fromv$librarycache
IsRate=0
[Custom3]
;Namemustbeunique
Name=共享区字典缓存区命中率
Description=命中率应大于0.85
Query=Selectround(sum(gets-getmisses-usage-fixed)/sum(gets)*100,2)fromv$rowcache
IsRate=0
[Custom4]
;Namemustbeunique
Name=检测回滚段的争用
Description=应该小于1%
Query=selectround(sum(waits)/sum(gets)*100,2)fromv$rollstat
IsRate=0
[Custom5]
;Namemustbeunique
Name=检测回滚段收缩次数
Description=应该小于1%
Query=selectsum(shrinks)fromv$rollstat,v$rollnamewherev$rollstat.usn=v$rollname.usn
IsRate=0
[Custom6]
;Namemustbeunique
Name=监控表空间的I/O读总数
Description=监控表空间的I/O
Query=selectsum(f.phyrds)pyrfromv$filestatf,dba_data_filesdfwheref.file#=df.file_id
IsRate=0
[Custom7]
;Namemustbeunique
Name=监控表空间的I/O块读总数
Description=监控表空间的I/O
Query=selectsum(f.phyblkrd)pbrfromv$filestat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- loadrunner 监控 oracle 数据库 计数器 要点