Jas*_*per 6 performance oracle
我有一个(Java)Web 应用程序,它当然会对 Oracle 数据库执行许多查询(选择、插入、更新、删除)。
我想了解过去 7 天的以下内容:
SQLQuery Times-Executed Average-Resp-Time Average-Rows-Returned
====================================================================================
SELECT whatever 981 330ms 1201
UPDATE whatever 45 99ms 0
Run Code Online (Sandbox Code Playgroud)
这是 Oracle 可以给我的东西吗?如果是这样,我怎样才能得到它?如果不是 Oracle,我应该看看 JDBC 驱动程序吗?
Chr*_*xon 10
注意:使用 AWR 数据需要您购买诊断包许可选项。没有必要的许可证也可以运行下面的查询。在使用这些之前,请务必与您的 DBA/许可经理核对。
Automatic Workload Repository (AWR) 包含数据库活动的详细信息。这些存储在各种dba_hist*
视图中。
您要查找的信息类型主要在dba_hist_sqlstat
视图中可用。通过加入它,dba_hist_snapshot
您可以获得特定时期内可用的信息:
select *
from dba_hist_sqlstat t, dba_hist_snapshot s
where t.snap_id = s.snap_id
and t.dbid = s.dbid
and t.instance_number = s.instance_number
and s.begin_interval_time between trunc(sysdate)-1 and trunc(sysdate) -- yesterday's stats
Run Code Online (Sandbox Code Playgroud)
此视图包含多个*_elapsed
列,这些列说明给定快照(时间段)的增加。例如:
时间以微秒为单位。您可以将这些结合起来获得平均时间/执行统计数据等等。例如,这为您提供给定 sql 语句的平均时间/执行时间:
select sql_id, sum(t.elapsed_time_delta/1000000)/sum(t.executions_delta)
from dba_hist_sqlstat t, dba_hist_snapshot s
where t.snap_id = s.snap_id
and t.dbid = s.dbid
and t.instance_number = s.instance_number
and s.begin_interval_time between trunc(sysdate)-1 and trunc(sysdate) -- yesterday's stats
group by sql_id
Run Code Online (Sandbox Code Playgroud)
该sql_id
是SQL本身的文本的哈希值。您可以从以下位置找到实际声明:
select * from dba_hist_sqltext where sql_id = :sqlid
Run Code Online (Sandbox Code Playgroud)
请注意,AWR 中仅保留“消耗最高”的语句。因此,如果您感兴趣的查询不是最慢、执行最多、磁盘访问最多等的查询,那么它可能不在 AWR 数据中。您可以通过“着色”感兴趣的 sql_id 来解决这个问题。这可确保只要您设置了保留期,它们就会一直保留在 AWR 中。你可以通过运行来做到这一点:
exec DBMS_WORKLOAD_REPOSITORY.ADD_COLORED_SQL(:sqlid);
Run Code Online (Sandbox Code Playgroud)
如果您只想了解某个时间段内的系统概览(包括“最重”的 SQL 语句),AWR 报告本身就提供了这一点。您可以在oracle-base上找到对此的介绍。