如何解决sql server性能问题

2024-03-19

好吧,这个普遍问题在过去 6 个月里已经出现了两次(不同的存储过程)。我们的内部用户报告了应用程序中的超时错误。我们可以在受控环境中重现应用程序中的问题。因此,我们使用 sp_who2 执行检查阻塞的正常步骤。一切看起来都很好,没有阻塞。因此,我们进行 sql 跟踪来准确查看该过程是如何执行的。我们将其复制到 SQL Management Studio 中的新窗口中,并执行 sql 跟踪告诉我们 ADO.Net 正在执行的操作,并且在几毫秒内完成。我们的应用程序超时为 30 秒。几个月前发生此问题时,我们使用的是 SQL Server 2005。现在我们已升级到 SQL Server 2008 R2。诊断此类问题的下一步是什么?

@马丁:感谢您的回复。我会详细阅读您的帖子,并让您知道我发现了什么。在此之前,这是您请求的 SP 中的 sql:

Select 
    @Exists=0, 
    @EarnRecId=0,
    @SuppStatusId = 0,
    @SLRecId = 0,
    @EarnRecDS = Null

Select
    @EarnRecId = er.EarningsId,
    @EarnRecDS = Convert(Varchar(26),er.Datestamp, 109),
    @SuppStatusId = s.SuppStatusId,
    @SLRecId = s.SLId
From
    Tracking tr
    Inner Join Supps s On s.SuppId = tr.SuppId
    Inner Join Earnings er On er.EarnRecId = s.SuppId
Where
    tr.ClaimId = @ClaimId
    and er.FiscalYr = @FiscalYr
    And er.EmplyrId In (@EmpId1,@EmpId2)

If @EarnRecId > 0
    Begin
        Set @Exists=1
    End

可能是参数嗅探。

当调用存储过程并且缓存中没有与该存储过程匹配的现有执行计划时set连接的选项将使用该调用中传入的参数值来编译新的执行计划。

有时,当传递的参数不典型(例如具有异常高的选择性)时会发生这种情况,因此生成的计划将不适合具有不同参数的大多数其他调用。

SSMS 对该选项有不同的默认值SET ARITH_ABORT因此,当您在 SSMS 内执行存储过程时,不会遇到同样有问题的计划。

下次发生这种情况时,调查该问题的最简单方法可能是使用 2 个独立的 SSMS 窗口,并启用“包括实际执行计划”选项,并在一个窗口中执行以下操作:

SET ARITHABORT OFF
EXEC YourProc ...

而在另一个

SET ARITHABORT ON
EXEC YourProc ...

假设使用默认的 ADO.NET 和 SSMS 连接选项,第一个选项应使用缓存中的错误计划。

如果这对您不起作用,您可以使用探查器查看您需要修改哪些其他设置选项才能获得错误计划,或者仅使用探查器直接获取执行计划 - 或者您可以从 DMV 检索它们,如下所示。

select p.query_plan, *
from sys.dm_exec_requests r
cross apply sys.dm_exec_query_plan(r.plan_handle) p
where r.session_id = <spid of your ADO.NET connection>

例如,您可能会发现有问题的计划正在执行数以万计的单独索引搜索,而好的计划则避免了这种情况。

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

如何解决sql server性能问题 的相关文章

  • SQL:如何在按部分分组的查询中使用子查询?

    如何在按部分分组的查询中使用子查询 我使用 SQL Server 2008 R2 和 Delphi 2010 我收到此错误 Cannot perform an aggregate function on an expression cont
  • SQL 中基于下一条记录和上一条记录的复杂排序

    这是一个后续问题根据 SQL 中的下一条记录和上一条记录进行排序 https stackoverflow com questions 30477803 sorting based on next and previous records i
  • 在c#中创建sql连接

    我是这个网站的新手 也是编程的新手 我目前正在通过销售点创建库存系统 它使用模态和非模态形式 我的问题是 我正在研究change password对话框必须连接到数据库才能覆盖密码字段 我使用的数据库是Microsoft SQL Serve
  • 当跳转在 32 字节上不完全对齐时,使用 MITE(传统管道)代替 DSB(微指令缓存)

    这个问题曾经是这个 现已更新 问题 https stackoverflow com questions 59883527 unrolling 1 cycle loop reduces performance by 25 on skylake
  • SQL返回两行之间的秒差

    这个问题与SQL Server有关 我有下表 id size batch code product code additiontime 1 91 55555 BigD Red 2017 05 15 13 00 00 2 91 55555 B
  • 同一索引操作上的不同估计行?

    简介和背景 我必须优化一个简单的查询 下面的示例 重写几次后 我认识到同一个索引操作的估计行数会根据查询的编写方式而有所不同 最初 该查询执行了聚集索引扫描 因为生产中的表包含二进制列 该表相当大 大约 100 GB 并且全表扫描执行起来需
  • C# 中处理 SQL 死锁的模式?

    我正在用 C 编写一个访问 SQL Server 2005 数据库的应用程序 该应用程序是数据库密集型的 即使我尝试优化所有访问 设置适当的索引等 我预计迟早会遇到死锁 我知道为什么会发生数据库死锁 但我怀疑我能否在某个时候发布不发生死锁的
  • 快速查询最新记录的方法?

    我有一张这样的表 USER PLAN START DATE END DATE 1 A 20110101 NULL 1 B 20100101 20101231 2 A 20100101 20100505 在某种程度上 如果END DATE i
  • 1.2.840.113556.1.4.1941 (LDAP_MATCHING_RULE_IN_CHAIN) 存在性能问题?

    LDAP 搜索有一些内置规则 其中之一是LDAP MATCHING RULE IN CHAIN From MSDN https msdn microsoft com en us library aa746475 v vs 85 aspx 1
  • SQL Server 连接其他表中不存在的位置

    Service Asset AssetService Id Name Id Name AssetId ServiceId
  • SELECT max(x) 返回 null;我怎样才能让它返回0?

    运行以下命令时如何返回 0 而不是 null SELECT MAX X AS MaxX FROM tbl WHERE XID 1 假设没有XID 1的行 or SELECT coalesce MAX X 0 AS MaxX FROM tbl
  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • 同时从2个表中删除?

    我正在使用 asp net 和 sql 服务器 我有 2 个表 类别和产品 在产品表中 我的categoryId 为FK 我想要做的是 当我从类别表中删除类别时 我希望该类别中的所有产品都将在产品表中删除 如何才能做到这一点 我更喜欢使用存
  • 计算 Richtextbox 中所有单词的最有效方法是什么?

    我正在编写一个文本编辑器 需要提供实时字数统计 现在我正在使用这个扩展方法 public static int WordCount this string s s s TrimEnd if String IsNullOrEmpty s re
  • 从 Sharepoint 到 SQL Server 的实时同步

    我见过许多将 SQL Server 数据同步到 SharePoint 的解决方案 但没有见过将 SharePoint 列表同步到 SQL Server 的解决方案 有谁知道解决方案吗 商业化就好了 或者 我需要编写一个 Web 部件来创建多
  • SQL Server:应用正则表达式替换

    这是我的 SQL 查询 select codi nivell from anc documents 示例数据是 06080100000000 06080100000000 06080100000000 06080100000000 0608
  • GWT 在开发模式下运行缓慢

    我在开发模式下使用最新的 GWT 2 0 版本的 Eclipse Galileo 但它运行速度非常慢 我需要等待大约一分钟才能打开一个页面 但编译后 当我使用 Tomcat 5 5 运行它时 我的应用程序运行得很好 我的代码不太重 我猜有一
  • SQL Server 是否在复杂视图中传播 WHERE 条件?

    我在这个问题之后提供了一个完整的示例 以防不清楚我的问题的意思 我创建了一个视图 它连接了大约五个表中的数据 这些表包含大量数据 查询运行速度很慢 我的问题是 如果我这样做 SELECT FROM myView WHERE PersonID
  • 批量插入,asp.net

    我需要获取与会员相对应的 ID 号列表 在任何给定时间处理的数量可能在 10 到 10 000 之间 我可以毫无问题地收集数据 解析数据并将其加载到 DataTable 或任何内容 C 中 但我想在数据库中执行一些操作 将所有这些数据插入表
  • 发布Oracle和SQL Server性能测试是否违反许可? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想对Oracle和SQL Server中的空间索引进行性能测试 我想将其纳入我的理学硕士工作中 发布此类结果是否违反 dbms 的许可 也许有人已经

随机推荐