具有更改查询的 Oracle SQL Tuning Advisor

Posted

技术标签:

【中文标题】具有更改查询的 Oracle SQL Tuning Advisor【英文标题】:Oracle SQL Tuning Advisor with changing query 【发布时间】:2018-08-24 20:28:29 【问题描述】:

我们有一个 C# 应用程序,它将在数据库中搜索几个表中的活动。用户可以指定搜索某些条件,而这些条件又建立在基本 SQL 查询之上。

这个查询需要非常很长时间才能执行,我们想在这个查询上使用 Oracle 的 Tuning Advisor。我们的问题是这个调优顾问是否只适用于给定的查询?

例如,如果我们对应用程序的基本查询进行调整(它们没有指定任何搜索条件):

SELECT Actv, FullName, DOB FROM Pers;

创建的 SQL 配置文件是否仅适用于该语句?如果他们指定搜索条件以使语句扩展为:

SELECT Actv, FullName, DOB FROM Pers WHERE Actv = 'Foo' AND DOB >= :Date;

我们是否需要为此查询创建另一个 SQL 配置文件,或者优化器是否会在创建执行计划时使用部分基线 SQL 配置文件?

【问题讨论】:

【参考方案1】:

根据经验,每个查询都是单独优化的。例如,Tuning Advisor 可能建议的索引可能对某些查询非常有用,但最终可能对其他查询毫无用处。堆集群和数据分区也是如此。

一个简单的解决方案是添加所有查询需要的所有索引。即使可以做到这一点,过多的索引也会减慢所有数据修改 SQL 语句的速度。也就是说,所有INSERTs、UPDATEs 和DELETEs 都会变得缓慢且昂贵。

那么,你应该怎么做?这取决于你的具体情况。我 [非常个人] 的经验法则是每个表不超过 10 个索引。

当然,如果您的表的更新/插入/删除率很高,我会考虑下限。

另一方面,如果您的表数据具有低/无修改率(主要是只读表),那么您可以提高此限制,甚至可以按照 Tuning Advisor 的建议添加尽可能多的索引。

最后,经验法则只是一个指南。您需要尝试看看快速SELECTs 和快速UPDATEs 之间的最佳平衡点是什么。

【讨论】:

以上是关于具有更改查询的 Oracle SQL Tuning Advisor的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 11g 禁用 SQL Tuning Advisor 与 auto space advisor

SQL Tuning 基础概述10

Oracle12c中SQL性能优化(SQL TUNING)新特性之自动重优化(automatic reoptimization)

Oracle SQL 优化之sql tuning advisor (STA)

Oracle SQL 优化之sql tuning advisor (STA)

Oracle调整顾问(SQL Tuning Advisor 与 SQL Access Advisor