拦截和重写查询SQL Server 2005中(Intercept and Rewrite Quer

2019-09-16 20:58发布

我们必须建立在SQL Server 2005中,我们无法控制的顶部的应用程序。 我们最近发现,这个应用程序发送一些非常低效的SELECT查询SQL导致该数据库上严重的产能问题。 我知道正确的解决方案是破解打开应用程序的代码,并更改查询,但理由必须清楚交代要花费很长的时间,我就不去了。 有没有一些方法,我们可以拦截SQL服务器上的这个特定的查询,并有选择地将其重新写的东西更优?

Answer 1:

你可以使用这种方法。 它的工作原理就像是我一个魅力:)

而不是试图截获并修改从应用程序发起SQL调用,或许可以改为在不改变应用程序的SQL实现一个抽象层。 例如,如果你可以修改DSN或登录连接字符串的应用程序,然后connsider以下。 假设当前数据库是[A]。 创建一个新的数据库[B]包含具有相同的名称是什么[A]视图和函数(但不表),然后修改它们以引用[A]表。 添加到您的实现(什么我假设)基于行的安全任何额外的连接,过滤等是必要的。 然后,修改该应用程序DSN使用数据库[B]而不是[A]。

链接



Answer 2:

你可以尝试计划指南 。 这可能让你调整/优化查询,而不改变实际通话。

从“ 了解计划指南 ”

这个程序可以用来当你不能或不想直接更改查询的文本。 当数据库应用程序从第三方供应商部署查询的一小部分不按预期执行计划指南是有用的。 计划通过查询提示附加到引导他们查询的影响优化。

这也可能是使查询真正运行就像一个瘸腿狗有用,使开发人员来问您的帮助... ;-)



Answer 3:

这取决于他们在做什么,什么查询是。 当然,如果他们使用存储过程或UDF的可以取代那些无需更改应用程序。 您也可以考虑加入一些指标被“优化”为自己的坏SQL(尽管可能会影响数据库的合法用户)。 你也可以检查他们正在做的查询,看看是否可以取代它们与更高效的视图打表,但后来你与你的DDL搞乱只是为了对付一个坏苹果。 你最好的选择可能是迁移的合法应用程序关闭特定的服务器,并独自离开罪犯腐烂。



Answer 4:

你已经采取了资源编辑器/反射器可执行文件? 如果你够幸运和SQL语句是静态的你可以改变它们。

没有程序更多信息很难确定这是否是可能的。 如果SQL是动态生成的,然后这是不是一种选择。



文章来源: Intercept and Rewrite Queries in SQL Server 2005