日期:2014-05-16  浏览次数:20514 次

在 Oracle 数据库 10g中轻松进行响应时间分析(转)

作者:Robin Schumacher

通过 Oracle 数据库 10g,许多以前难以获得的响应时间度量现在唾手可得。

本文相关下载:
Oracle 数据库 10g

过去,在努力获得最佳数据库性能的过程中,Oracle 数据库管理员和性能分析员为获得系统和用户会话活动的可靠响应时间度量历尽艰辛。数据库管理员所面临的问题通常包括两个方面:第一,准确确定数据库或用户会话将时间用在“何处”;第二,确定用户体验的客观本质。

对数据库中所有可能的活动和交互而言,这些任务是非常重要的。Oracle Wait Interface(早在多个版本前就引入了)一直是了解其用法的管理员的得力助手,但它在告知数据库管理员系统或用户会话处理事务或查询的效率方面还是不够理想。启用并研究跟踪文件可以获得此级别的详细信息,但对于大多数必须管理大型数据库群、工作负担较重的数据库管理员而言,此做法有点奢侈。

幸运的是,那些已经升级到 Oracle 数据库 10g 的 Oracle 数据库管理员将看到重大的响应时间改进,从而可以更好地描绘系统和会话级响应时间度量。最显著的是,Oracle 自动数据库诊断监视器 (ADDM) 通过自动分析收集的统计信息、标识问题区域甚至通过 Oracle 企业管理器网格控制 GUI 提供建议,使您详细了解响应时间及更多内容。

此外,与本文关系最为密切的是,Oracle 数据库 10g 中的历史机制使数据库管理员能够按时间回顾以执行他们自己的响应时间趋势分析,这些分析可以帮助他们确定高峰和非高峰事务/系统时间以及定位延长批处理周期或 ETL 作业的恶性进程和 SQL。

?

在本文中,我将探讨一些这种历史机制在系统级、会话级和 SQL 级中的使用。有关 ADDM 的更多信息,请参阅 Oracle 文档以及 Arup Nanda 的“Oracle 数据库 10g:为 DBA 提供的 20 个最重要的特性”的“ADDM 和 SQL Tuning Advisor”部分。

系统级响应时间分析

从全局或系统级出发,数据库管理员通常想解决以下问题:

  • 总的来讲,我的数据库运行状况如何?哪些因素影响效率?
  • 我的用户获得的平均响应时间是多少?
  • 哪些活动对总响应时间的影响最大?

在 Oracle 数据库 10g 推出之前,数据库管理员很难准确回答这些问题,但现在如果您碰巧正在使用最新、最可靠的 Oracle 数据库,则可以轻松获得这样的度量。

首先,通过在 Oracle 数据库 10g 中发出以下查询可以大体上获知数据库的运行状况:

select  METRIC_NAME,
VALUE
from    SYS.V_$SYSMETRIC
where   METRIC_NAME IN ('Database CPU Time Ratio',
'Database Wait Time Ratio') AND
INTSIZE_CSEC = 
(select max(INTSIZE_CSEC) from SYS.V_$SYSMETRIC); 

METRIC_NAME                         VALUE
------------------------------ ----------
Database Wait Time Ratio                6
Database CPU Time Ratio                94

Oracle 数据库 10g V$SYSMETRIC 视图包含几个优秀的响应时间度量,其中包括 Database Wait Time Ratio(数据库等待时间比)和 Database CPU Time Ratio(数据库 CPU 时间比)这两个时间度量。以上查询显示了这两个统计信息的最新快照,它们可帮助您确定数据库当前是正经历高等待/瓶颈比还是平稳运行的操作。数据库 CPU 时间比是用数据库消耗的 CPU 量除以“数据库时间”量 — 数据库在用户级调用(不包括实例后台进程活动)上花费的时间。高值(90%-95% 以上)比较理想并显示较少的等待/瓶颈操作,但由于每个系统各有不同,因此只可将此阈值看作是一个粗略的值。

?

还可以使用以下查询快速了解数据库在前一个小时运行时整体性能是否下降过:

select  end_time,
value
from    sys.v_$sysmetric_history
where   metric_name = 'Database CPU Time Ratio'
order by 1;

END_TIME                  VALUE
-------------------- ----------
22-NOV-2004 10:00:38         98
22-NOV-2004 10:01:39         96
22-NOV-2004 10:02:37         99
22-NOV-2004 10:03:38        100
22-NOV-2004 10:04:37         99
22-NOV-2004 10:05:38         77
22-NOV-2004 10:06:36        100
22-NOV-2004 10:07:37         96
22-NOV-2004 10:08:39        100
.
.

同时,您可以使用如下查询来查询 V$SYSMETRIC_SUMMARY 视图以充分了解整个数据库效率的最小值、最大值和平均值:

select  CASE METRIC_NAME
WHEN 'SQL Service Response Time' then 'SQL Service Response Time (secs)'
WHEN 'Response Time Per Txn' then 'Response Time Per Txn (secs)'
ELSE METRIC_NAME
END METRIC_NAME,
		CASE METRIC_NAME
WHEN 'SQL Service Response Time' then ROUND((MINVAL / 100),2)
WHEN 'Response Time Per Txn' then ROUND((MINVAL / 100),2)
ELSE MINVAL
END MININUM,
		CASE METRIC_NAME
WHEN 'SQL Service Response Time' then ROUND((MAXVAL / 100),2)
WHEN 'Response Time Per Txn' then ROUND((MAXVAL / 100),2)
ELSE MAXVAL
END MAXIMUM,
		CASE METRIC_NAME
WHEN 'SQL Service Response Time' then ROUND((AVERAGE / 100),2)
WHEN 'Response Time Per Txn' the