Oracle 是目前世界上大型应用系统广泛使用的数据库,Oracle 数据库产品为财富排行榜上的前1000 家公司所采用,许多大型网站也选用了Oracle 系统。Oracle 内部结构比较复杂,如图8.1 所示,出现性能问题的可能性是比较大的。因此在性能测试过程中,应该密切关注Oracle的性能表现,收集和监控Oracle 性能数据。
要通过LoadRunner 监控Oracle,首先必须在Controller 所在的机器上安装Oracle 客户端,然后配置好服务名,用sqlplus 确认可以连接Oracle,之后就可以在Controller 中配置Oracle 连接,配置的方法如下。
(1)打开Controller,选择监控图中的“Database Server Resource Graphs - Oracle”,如图8.2 所示。
(2)添加监控,监控引擎选择“LoadRunner native monitors”单选按钮,如图8.3 所示。
(3)然后添加需要监控的Oracle 所在的服务器IP 地址,如图8.4 所示。
(4)输入Oracle 服务器的登录账号,如图8.5 所示。
(5)选择需要监控的Oracle 计数器,如图8.6 所示。
添加完监控IP 后如图8.7 所示。
确定之后即可在Controller 的监控图表中看到收集的Oracle 性能数据,如图8.8 所示。
(6)修改Oracle 监控数据的收集频率。
LoadRunner 默认间隔10 秒收集一个Oracle 性能数据,数据取样的间隔太短会对Oracle 数据库性能造成一定的影响,如果想调整收集频率,可打开LoadRunner 安装目录中的datmonitorsvmon.cfg 文件,修改其中的sample rate。
需要注意的是LoadRunner 限制监控Oracle 收集性能数据的最小间隔是10 秒,如果设置低于这个值,会按10 秒间隔来收集。
(7)添加自定义计数器。
LoadRunner 在vmon.cfg 文件中设置了可收集的Oracle 性能计数器,如果希望自己定义收集的性能数据,可修改此文件,添加相应的SQL 语句来定义计数器。
例如,可在LoadRunner 安装路径的datmonitors 找到vmon.cfg 文件并修改如下:
[V$ Monitor]
Counters=150
CustomCounters=9
;How many seconds for each data sample?
SamplingRate=10
[Custom0]
;Name must be unique
Name=库快存命中率
Description=该计数器返回当前库快存命中率
Query=SELECT 100*((sum(pins-reloads))/sum(pins)) from v$librarycache
IsRate=0
[Custom1]
;Name must be unique
Name=高速缓存区命中率
Description=oracle database shoot straight
Query=SELECT round(1-SUM(PHYSICAL_READS)/(SUM(DB_BLOCK_GETS) +
SUM(CONSISTENT_GETS)), 4) * 100 FROM (SELECT CASE WHEN NAME='physical reads' THEN
VALUE END PHYSICAL_READS,CASE WHEN NAME = 'db block gets' THEN VALUE END
DB_BLOCK_GETS,CASE WHEN NAME = 'consistent gets' THEN VALUE END CONSISTENT_GETS
FROM V$SYSSTAT WHERE Name IN ('physical reads','db block gets','consistent
gets'))
IsRate=0
[Custom2]
;Name must be unique
Name=共享区库缓存区命中率
Description=命中率应大于0.99
Query=Select round(sum(pins-reloads)/sum(pins) * 100, 2) from v$librarycache
IsRate=0
[Custom3]
;Name must be unique
Name=共享区字典缓存区命中率
Description=命中率应大于0.85
Query=Select round(sum(gets-getmisses-usage-fixed)/sum(gets) * 100, 2) from
v$rowcache
IsRate=0
[Custom4]
;Name must be unique
Name=检测回滚段的争用
Description=应该小于1%
Query=select round(sum(waits)/sum(gets) * 100, 2) from v$rollstat
IsRate=0
[Custom5]
;Name must be unique
Name=检测回滚段收缩次数
Description=应该小于1%
Query=select sum(shrinks) from v$rollstat, v$rollname where v$rollstat.usn
= v$rollname.usn
IsRate=0
[Custom6]
;Name must be unique
Name=监控表空间的I/O 读总数
Description=监控表空间的I/O
Query=select sum(f.phyrds) pyr from v$filestat f, dba_data_files df where
f.file# = df.file_id
IsRate=0
[Custom7]
;Name must be unique
Name=监控表空间的I/O 块读总数
Description=监控表空间的I/O
Query=select sum(f.phyblkrd) pbr from v$filestat f, dba_data_files df where
f.file# = df.file_id
IsRate=0
[Custom8]
;Name must be unique
Name=监控表空间的I/O 写总数
Description=监控表空间的I/O
Query=select sum(f.phywrts) pyw from v$filestat f, dba_data_files df where
f.file# = df.file_id
IsRate=0