当前位置: 首页 > 面试题库 >

在您使用SQL Server的职业生涯中的某个时刻,参数嗅探是否会跳出来攻击?

惠野
2023-03-14
问题内容

再次今天,我遇到了一个重大问题,似乎是SQL Server 2005中的参数嗅探。

我有一个查询,将一些结果与已知的良好结果进行比较。我在结果和已知的良好结果中添加了一个列,这样,每个月我都可以在双方加载新的月结果,并仅比较当月。新列在聚集索引中排在第一位,因此新的月份将添加到末尾。

我在我的WHERE子句中添加了一个条件-这是代码生成的,因此它是一个文字常量

WHERE DATA_DT_ID = 20081231 -这是多余的,因为现在所有DATA_DT_ID均为20081231。

性能至关重要。从7秒钟比较大约150万行到2个小时,什么也没完成。直接在SSMS中运行生成的SQL-无SP。

我一直使用SQL
Server已有12年了,自10月以来,我从未在此生产服务器上遇到过如此多的参数嗅探问题(内部版本9.00.3068.00)。而且在每种情况下,这都不是因为它是第一次使用不同的参数运行或更改了表。这是一个新表,仅在使用此参数或根本没有WHERE子句的情况下运行。

而且,不,我没有DBA访问权限,并且他们没有给我足够的权限来查看执行计划。

到现在为止,我不确定是否只有几年的经验才能将这个系统提供给SQL Server用户。

UPDATE 结果表明,尽管统计信息声称是最新的,但使用FULLSCAN运行UPDATE STATISTICS可以解决此问题。

最终更新 即使使用WITH RECOMPILE和UPDATE STATISTICS重新创建SP,也发现必须以另一种方式重写查询,才能使用NOT
IN而不是带有NULL检查的LEFT JOIN。


问题答案:

答案还不完全,但是我会分享我的经验。

当我转向主要从事DBA的工作后,我回到Developer DBA时,参数嗅探花了我几年的SQL
Server来e住我。我对引擎,SQL的工作方式,对客户的最佳了解等方面的知识更多,而我是一个更好的SQL编码器。

例如,动态SQL或CURSOR或普通的错误SQL代码可能永远不会遭受参数嗅探。但是更好的集合编程或如何避免动态SQL或更优雅的SQL的可能性更大。

我注意到它适用于复杂的搜索代码(大量条件)和复杂的报告,其中参数默认值影响了计划。当我看到经验不足的开发人员将如何编写此代码时,它就不会受到参数嗅探的困扰。

无论如何,与WITH
RECOMPILE相比,我更喜欢使用参数掩码。无论如何,更新统计信息或索引都会强制重新编译。但是为什么要一直重新编译呢?我已经在其他地方用一个链接回答了您的一个问题,其中提到在编译过程中会嗅探到参数,因此我也不相信它。

是的,参数屏蔽是一项开销,但是,它允许优化器根据情况评估查询,而不是一揽子重新编译。特别是在SQL Server 2005的语句级重新编译的情况下

SQL Server 2008中的“未知”优化似乎与屏蔽完全相同。我和我的SQL Server MVP同事花了一些时间进行调查,并得出了这个结论。



 类似资料:
  • 本文向大家介绍何谓SQLSERVER参数嗅探问题,包括了何谓SQLSERVER参数嗅探问题的使用技巧和注意事项,需要的朋友参考一下 大家听到“嗅探”这个词应该会觉得跟黑客肯定有关系吧,使用工具嗅探一下参数,然后截获,脱裤o(∩_∩)o 。 事实上,我觉得大家太敏感了,其实这篇文章跟数据库安全没有什么关系,实际上跟数据库性能调优有关 相信大家有泡SQLSERVER论坛的话不多不少应该都会见过“参数嗅

  • Cooja中的错误 我正在使用Contiki ng和示例udp服务器和udp客户端。我想做几件事:1-我希望客户端节点嗅探数据包,然后一旦嗅探到数据包,就向服务器发送数据包。我成功地做到了这一点,但有一些事情我不明白:a-当我在udp客户端中启动嗅探时,通过向代码中添加以下位: 这似乎只捕获udp客户端应用程序级别的数据包,当我增加QUEUEBUF\u CONF\u NUM以允许服务器接收这些数据

  • 问题内容: 使用Python嗅探网络数据包的最佳方法是什么? 我从几个地方听说,最好的模块是一个名为Scapy的模块,不幸的是,它使python.exe在我的系统上崩溃。我认为这只是我的安装方式的问题,除了许多其他人告诉我,它在Windows上不能很好地工作。(如果有人感兴趣,我正在运行WindowsVista,这可能会影响某些事情)。 有谁知道更好的解决方案? UPD: 阅读了告诉我要安装PyP

  • 有什么方法可以在持续时间对象上使用moment.js方法吗?我在文档中的任何地方都找不到它,它也不是持续时间对象的属性。 我希望能够做到以下几点: 此外,如果有任何其他库可以轻松容纳这种功能,我会对推荐感兴趣。 谢谢

  • 我一直在切换模板工厂函数来使用(和理解)d::f支持右值和移动语义学。我常用的模板类样板工厂函数总是将参数标记为const: 按预期编译。最初,我将MakeMyPair转换为以const形式传递参数,但这不会使用XCode 4.6在我的Mac上编译: 没有用于调用“MakeMyPair\U Forward”候选函数的匹配函数[具有T=int,U=bool]不可行:没有从“int”到“const i

  • 探索您的数据 单击侧面导航中的 Discover 进入 Kibana 的数据探索功能: 在查询框里,您可以输入 Elasticsearch 查询语句 来搜索您的数据。您可以在 Discover 页面下查看搜索结果并在 Visualize 页面下生成已保存搜索的可视化效果。 当前索引模式显示在查询栏下面。索引模式决定了当您提交查询时搜索哪些索引。要搜索一组不同的索引,可以从下拉菜单中选择不同的模式。