具有更改查询的 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 语句的速度。也就是说,所有INSERT
s、UPDATE
s 和DELETE
s 都会变得缓慢且昂贵。
那么,你应该怎么做?这取决于你的具体情况。我 [非常个人] 的经验法则是每个表不超过 10 个索引。
当然,如果您的表的更新/插入/删除率很高,我会考虑下限。
另一方面,如果您的表数据具有低/无修改率(主要是只读表),那么您可以提高此限制,甚至可以按照 Tuning Advisor 的建议添加尽可能多的索引。
最后,经验法则只是一个指南。您需要尝试看看快速SELECT
s 和快速UPDATE
s 之间的最佳平衡点是什么。
【讨论】:
以上是关于具有更改查询的 Oracle SQL Tuning Advisor的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 11g 禁用 SQL Tuning Advisor 与 auto space advisor
Oracle12c中SQL性能优化(SQL TUNING)新特性之自动重优化(automatic reoptimization)
Oracle SQL 优化之sql tuning advisor (STA)