2015-06-08 69 views
2

使用Oracle 11.2。构建sql执行计划历史

有没有建立一个执行计划的历史就像一个执行计划可能会如何变化奥弗时间的标准方法?我想过跟踪dba_hist_sql_plan中的更改(计划在我们的环境中保留了10天)。但是所有计划都存储在dba_hist_sql_plan中,还是依赖于awr配置?或者有没有一个标准的做法(可能没有dba_hist_sql_plan)。 我对Oracle很陌生,所以每个想法都是受欢迎的。

+0

如果你只是寻找一个快速的方式来显示单个SQL_ID所有执行计划:'选择表*(dbms_xplan.display_awr_cursor(SQL_ID =>“a_sql_id”));' –

回答

1

并非所有的计划都存储在AWR。但是,通常情况下,您感兴趣的所有计划都是。很少有人有兴趣跟踪对特定快照窗口中不占用大量资源的查询的查询计划更改。他们通常只对顶级资源消费者的行为感兴趣。您可以在每个快照中AWR捕获的前N个查询中调整N个值。

如果你正在寻找一个单一的数据库,最简单的方法是将数据保存在AWR只要你可能需要它。如果您希望数据能够在10天后恢复,最简单的选择是增加AWR保留。 AWR数据不占用太多的磁盘空间,因此让Oracle保留更多数据比写自己的任何东西容易得多。

有时候,人们配置,从许多单个的数据库采取AWR数据,并将其写入到一个中央数据库的复制过程。这需要相当数量的设置,但它使跨数据库比较信息变得容易(要么比较dev/test/staging /生产环境中的数据,要么跨多个客户端特定实例比较数据)。