Oracle是世界上应用范围最广的关系型数据库管理系统。它的强大功能,广泛的应用,使得Oracle以及各种与之相关的工具和功能成为众多IT人员和企业不可或缺的一部分。其中,AWR是Oracle中用来诊断和优化性能的一个工具。
AWR简介:
AWR即Oracle自带的性能诊断工具,能够自动收集大量需要的系统运行时数据库实例和系统资源的指标和统计数据。这样的话,我们就可以通过AWR来获得数据库性能的分析和优化建议,比如指出问题的模块,异常的会话,还有问题的相关SQL语句等等。AWR能够收集性能数据分为两类:
- 基础包(Statspack)
- 性能包(AWR)
Statspack需要使用统计报表解释工具才能解释,而AWR可以使用awrrpt.sql生成AWR报表文件来解决。AWR可以简单地访问和收集数据库指标,然后支持更高级别的SQL检查并在单个报表中提供某些年度的历史。”
AWR的使用:
现在我们需要通过AWR工具来分析一个案例。假设在某个客户案例中,我们有一个名为“PUB_PRICE_HISTORY”的表。该表中有约50万行数据。查询该表数据的SQL语句如下:
select price_type, max(price_effective_date), price from pub_price_history where product_id = :p1 group by price_type, price order by max(price_effective_date);
客户抱怨说,他们经常使用该查询,但它总是非常缓慢。我们不确定发生了什么,所以我们打算使用AWR来分析单个查询,然后通过AWR报告来揭示潜在的问题。
展示AWR报告:
从AWR报告中,我们可以看到我们正在使用的SQL语句。此外,该报告还清楚地显示了我们要优化哪个事务。
SQL ID: 65n6rj53j6sfh Plan Hash: 11635450 select price_type, max(price_effective_date), price from pub_price_history where product_id = :p1 group by price_type, price order by max(price_effective_date)
AWR报告的第一部分通常是建议优化措施。您将看到哪些问题需要解决,如何解决它们,以及所需时间/资源。该报告还会列出每个问题的解决方案指南,以及任何因执行优化方案而可能发生的更改。
AWR清楚地显示出我们SQL语句正在进行大量的连接操作,因此我们需要优化该过程。我们可以使用如下的SQL查询语句进行优化:
select DISTINCT price_type, max(price_effective_date) OVER ( PARTITION BY price_type, price ORDER BY price_effective_date ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), price from pub_price_history WHERE product_id = :p1;
我们可以使用AWR来发现并解决许多问题,包括但不限于SQL查询的优化,连接操作的修改,索引和元数据的更改。AWR的必要性和功能性在优化数据库性能方面无可替代。