Management Studio 和 TableAdapter 之间存储过程的执行时间差异很大

2023-12-02

对于相同的输入,存储过程如何通过 Management Studio 在 10 秒内运行,但通过 TableAdapter 需要 15 分钟?它是可重复的,这意味着我在每个环境中至少运行了 3 次,并且 Management Studio 的速度始终快了 100 倍左右。

我正在使用 .net 2.0 和 SQL Server 2000

在 SQL Server 管理中,我像这样执行它:

EXEC    [dbo].[uspMovesReportByRouteStep]
    @RouteStep = 12000,
    @RangeBegin = N'12/28/08',
    @RangeEnd = N'1/18/9'

在 TableAdapter 中,我使用的是StoredProcedure CommandType and dbo.uspMovesReportByRouteStep为了CommandText。我从 ASP.NET 页面调用表适配器,但如果我也尝试在本地“预览数据”,它会在 30 秒内超时。

提供存储过程是不切实际的,因为它的长度超过 100 行,并且依赖于同一数据库和其他数据库上的许多其他 UDF 和视图。

使用任一方法,所有其他存储过程似乎都在大约相同的时间运行。这怎么可能?


这很可能是由于“参数嗅探”和缓存的查询计划不适合您调用它的参数的特定值。这是怎么发生的?那么,第一次使用一组值调用 SP 时,将生成、参数化并缓存查询计划。如果使用另一组参数值再次调用 SP,这会导致不同的查询计划,但它使用缓存的查询计划,那么性能可能会受到影响。

这通常是因为统计数据已经过时。您可以通过将估计执行计划与实际执行计划进行比较来确定是否属于这种情况;如果不同,那么统计数据很可能已经过时。

我首先尝试重建数据库的索引,或者至少更新统计信息(询问您的 DBA)。重建索引的一种方法(应该适用于 SQL Server 上的所有版本):

exec sp_msforeachtable "dbcc dbreindex ('?')"

如果还是有问题,尝试临时添加语句WITH RECOMPILE到存储过程定义。如果问题消失,请查看使用OPTIMIZE FOR,描述于this博客文章。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Management Studio 和 TableAdapter 之间存储过程的执行时间差异很大 的相关文章

  • 在 foreach 循环中启动一个新线程

    我有一个对象列表 我想循环该列表并启动一个新线程 传入当前对象 我写了一个我认为应该这样做的例子 但它不起作用 具体来说 线程似乎在每次迭代中都被覆盖 但这对我来说并没有什么意义 因为我每次都会创建一个新的 Thread 对象 这是我写的测
  • 如何获取sql server 2005中数据库连接的详细列表?

    如何获取sql server 2005中数据库连接的详细列表 使用系统存储过程sp who2
  • .NET 4.0 代码可以与 .NET 2.0 代码互操作吗?

    NET 4 0 程序集调用 NET 2 0 程序集中的代码是否存在兼容性障碍 反之亦然 更具体地说 我正在研究在使用基于 NET 2 0 的第三方应用程序时升级到 Visual Studio 2010 该应用程序可通过引用我的自定义代码的挂
  • 如何取消 jquery.load()?

    当 load 在 5 秒内没有返回时 我想取消 load 操作 如果是这样 我会显示一条错误消息 例如 抱歉 没有加载图片 我所拥有的是 超时处理 jQuery fn idle function time postFunction var
  • 如何为不存在的值创建一行并用 0 值填充计数?

    在 SQL Server 中 我对数据上的用户年龄组运行查询 其中 在某些年里 每个年龄组的用户数为零 例如 2013 年有 18 21 年龄组的用户 因此查询返回下一个年龄组 22 25 作为第一行 因为没有包含 18 21 的条目 相反
  • 从 DataGridColumn 中绑定到 DataContext 属性

    财产Foo在我的DataContext ViewModel Visibility Foo 但我不知道如何访问Foo里面一个Column 在这种情况下 我认为它可能正在寻找Foo在任何绑定到的对象中DataGrid ItemsSource
  • 如何制作.Net或JVM语言?

    我看到了 NET 和 JVM 的所有这些新语言 一个人如何开始制作一个 我找不到关于 JVM 或 MSIL 规范的任何好的文档 Edit 我已经知道如何解析 我更感兴趣的是如何有这么多人基于这些平台创建新语言 你有点幸运 为 NET 开发的
  • Enumerable.Range 和内存分配

    我有以下代码 IEnumerable
  • Azure 应用服务 - 自定义身份验证 - 不允许 HTTP 动词

    我按照本教程在我的 Xamarin Forms 应用程序中启用身份验证 https adrianhall github io develop mobile apps with csharp and azure chapter2 custom
  • 窗口服务中的全局处理异常

    我有一个 Windows 服务作为服务器运行 但是 服务器有时会因未处理的错误而立即停止 请帮助我如何处理全局异常 谢谢 在我看来 你似乎试图以错误的方式解决问题 当您的程序 或服务 由于未处理的错误而崩溃时 解决方案不是弄清楚在哪里以及如
  • 如何在 SQL Server 2005 Management Studio 中创建 SQL Server 2005 存储过程模板?

    如何在 SQL Server 2005 Management Studio 中创建 SQL Server 2005 存储过程模板 我认为另一个小金块将帮助人们开发并提高数据库开发的效率 当我开发软件解决方案时 我非常喜欢存储过程和函数 我喜
  • 有什么理由不将 pdb 与您的应用程序一起提供吗?

    既然您可以使用 Reflector 对 Net 应用程序进行逆向工程 那么有什么理由不随应用程序一起发送 pdb 文件呢 如果您确实将它们一起发送 那么您的堆栈跟踪将包括出现问题的行号 这在崩溃时很有用 每条评论请仅输入 1 个投票理由 传
  • 为什么在这里使用BeginInvoke?

    我正在研究其他人的代码 并且对与多线程有关的任何事情没有太多经验 我遇到了这行代码 BeginInvoke MethodInvoker delegate btnCalibrate PerformClick 我想知道为什么要这样做 因为这样就
  • FileAttributes.Encrypted 在 C# 中如何工作?

    我在谷歌上没有找到任何例子 任何人都可以展示它是如何工作的吗 当文件夹和文件被加密时如何解密 Link 文件属性枚举 http msdn microsoft com en us library system io fileattribute
  • 如何计算 WPF 中的非客户端窗口大小?

    WPF 有SystemParameters class http msdn microsoft com en us library system windows systemparameters aspx公开了大量的系统指标 在我的计算机上
  • SQL Server 存储过程对象名称无效

    我在尝试修改现有存储过程时收到此错误 Invalid object name dbo BackupDB 我能够创建此存储过程 但是当我单击修改选项来修改此存储过程时 系统显示了上述错误 您会看到所附图片 当尝试执行此命令时 我也遇到同样的错
  • 如何跳过 SSIS 数据流中的最后一行

    我在用FlatFile Source Manager gt Script COmponent as Trans gt OLEDB destination在我的数据流中 源从平面文件读取所有行 我想跳过更新数据库的最后一行 预告片记录 由于它
  • 如何防止 .NET 中的 XPath/XML 注入

    如何防止 NET Framework 中的 XPATH 注入 我们之前使用字符串连接来构建 XPATH 语句 但发现最终用户可以执行一些任意 XPATH 例如 string queryValue pages url USER INPUT V
  • 数据绑定问题,请解释

    public partial class Form1 Form MyClass myClass new MyClass one two public Form1 InitializeComponent textBox1 DataBindin
  • 使用 WaitHandle.WaitAll 时是否可以对 ThreadPool 中的任务进行分组/隔离?

    我面临的情况如下 因为 ThreadPool 每个进程有 1 个实例 所以我的问题是方法 1 会在 3 秒后取消按方法 2 排队的任务 http请求进来 method 1 gets executed first ThreadPool Que

随机推荐