gpt4 book ai didi

sql - NHibernate 应用程序中的相同 SQL 查询比 SQL Studio 慢?

转载 作者:行者123 更新时间:2023-12-02 21:06:15 24 4
gpt4 key购买 nike

我们的应用程序发出 NHibernate 生成的 SQL 查询。在应用程序运行时,针对 SQL Server 数据库运行查询大约需要 12 秒。 SQL Profiler 显示超过 500,000 次读取。

但是,如果我使用 SQL Profiler 捕获准确的查询文本,然后从 SQL Studio 再次运行它,则需要 5 秒,并且显示的读取次数少于 4,600 次。

该查询使用了几个参数,其值在 SQL 文本末尾提供,我读过一些有关参数嗅探和低效查询计划的内容,但我认为这与存储过程有关。也许 NHibernate 在实例化其实体时保持结果集打开,这可以解释更长的持续时间,但是什么可以解释 NHibernate 执行的同一查询的额外 494,000 次“读取”呢? (SQL Profiler 跟踪中不会出现其他查询。)

该查询被指定为使用 NHibernate 3.1 的 LINQ 工具的 LINQ 查询。我没有包含查询本身,因为它似乎是一个基本的哲学问题:什么可以解释如此巨大的差异?

如果相关的话,结果中也恰好有一个 varbinary(max) 列,但在我们的情况下它始终包含 null。

非常感谢任何见解!

最佳答案

请务必阅读:http://www.sommarskog.se/query-plan-mysteries.html

相同的规则适用于 procs 和 sp_executesql。劣质计划的一个重要原因可能是为 varchar 字段传递 nvarchar 参数,它会导致索引扫描而不是搜索。

我非常怀疑输出是否影响这里的性能,这可能是发送的参数之一或基础表的选择性的问题。

在测试探查器的输出时,请务必包含 sp_executesql 并确保您的设置匹配(例如 SET ARITHABORT),否则您将导致新的计划被生成。

您始终可以通过sys.dm_exec_query_stats从执行缓存中挖掘出劣质计划

关于sql - NHibernate 应用程序中的相同 SQL 查询比 SQL Studio 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6130094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com