gpt4 book ai didi

linq - Entity Framework LINQ 查询开始超时 - 数据库服务器重启后再次加速

转载 作者:行者123 更新时间:2023-12-04 19:36:10 25 4
gpt4 key购买 nike

这是一个奇怪的地方。我们有一个使用 EntityFramework 连接到 MS SQL Server 数据库 (SQL2010) 的 C# ASP.NET 网站应用程序。我们最近遇到了一个案例,应用程序中通常运行非常快(< 2 秒)的 LINQ 查询突然开始运行太长时间以至于连接超时。数据库大小或从查询返回的数据量没有重大变化。此外,当我们在 SQL Mgmt Studio 中运行查询的 SQL 版本时,它运行正常(快速)。

问题并未发生在我们的开发或暂存数据库中,但当我在 Visual Studio 中连接到 Prod 数据库并在 Debug模式下运行代码时,我会在同一查询中遇到超时。作为测试,我对 WHERE 语句做了一个小改动,应该不会影响查询逻辑(即:在末尾添加一行:'&& table.fieldname != "FOOBAR"'),然后查询运行通常(快速)。当我从WHERE语句中去掉多余的无用行,再次运行时,又回到超时(来回试了几次)。

DBA 尝试在数据库上执行 DROPCLEANBUFFERS,但没有效果。无奈之下,我们重新启动了生产数据库服务器,这解决了问题(查询再次快速运行)。

我了解 EF 和 LINQ 在数据库服务器上缓存查询。基于以上内容,我觉得这个查询的缓存版本不知何故被破坏了。我原以为 DROPCLEANBUFFERS 会修复它,但似乎还有其他东西保存着通过重新启动清理/重置的查询信息,但不是通过 DROPCLEANBUFFERS。

还有其他人遇到过这个问题吗?有办法防止吗?除了重启之外,是否有更简单的方法来刷新缓存的 EF/LINQ 查询?

附带说明一下,在使用常规存储过程提取数据的应用程序的早期非 EF/非 LINQ 版本中,我们在同一数据库中遇到了类似的问题。每隔一段时间(一年 2-3 次),通常在几秒钟内运行的 SP 之一会开始超时,但只有在从应用程序运行时才会发生。直接从 SQL Mgmt Studio 执行的相同 SP 仍会正常运行。修复它的唯一方法是完全删除并重新创建 SP。 DBA 得出结论,数据库正在为同一个 SP 创建两个执行计划,这是问题的根源(尽管我们从未确切了解它发生的原因或如何防止它)。

如有任何帮助或建议,我们将不胜感激!

萨斯科兹

最佳答案

您的开发/暂存服务器与生产服务器之间还有什么不同 - 可能是在硬件资源不足的 VM 上进行生产?

因为这适用于开发/暂存,并且我假设您的数据库结构在所有 3 个上都完全相同,所以开始超越您的数据库。

我只是想发表评论,但我是菜鸟,没有 stackoverflow 的魔力。

关于linq - Entity Framework LINQ 查询开始超时 - 数据库服务器重启后再次加速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19260634/

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