Mik*_*keC 4 sql-server index-tuning lock-escalation sp-blitzindex
我一直在运行dbo.sp_BlitzIndex并且在我的数据库的主表上有 4 个有点相似的索引。每个都有大量的等待和升级尝试。我不确定这些来自哪里。我没有缺少索引。我没有看到这个表上的搜索需要很长时间,所以不确定这些是来自选择还是插入。需要一些关于下一步看哪里的指示。
CORE.tblCase.idx_tblCase_bClosed_nUserID_PrimaryAgent (2):
行锁等待:1;总持续时间:0 秒;平均持续时间:0 秒;
页面锁定等待:85;总时长:92分钟;平均时长:1分钟;
锁升级尝试:100,965;
实际升级:1. 表上的 NC 索引:1CORE.tblCase.idx_tblCase_bClosed_nActionID_Last_nWorkflowID (27):
行锁等待:3;总持续时间:26 秒;平均持续时间:8 秒;
页面锁定等待:15;总时长:10分钟;平均持续时间:42 秒;
锁升级尝试:31,908;
实际升级:0。表上的 NC 索引:1CORE.tblCase.idx_tblCase_bClosed_nWorkflowID_nActionID_Last(28):
页面锁定等待:112;总时长:85 分钟;平均持续时间:46 秒;
锁升级尝试:31,748;
实际升级:0。表上的 NC 索引:1CORE.tblCase.idx_tblCase_bClosed_nCaseID_INC (35):
行锁等待:2;总时长:13分钟;平均时长:6 分钟;
页面锁定等待:307;总时长:399分钟;平均时长:1分钟;
锁升级尝试:43,090;
实际升级:0。表上的 NC 索引:1
首先附注 - 嗯,这些结果有点可疑。他们都说同一个表,但同时,他们说“表上的 NC 索引:1”。这意味着我们认为表中只有 1 个索引 - 但您在这里显示了 4 个。这些可能位于不同的数据库中,或者 sp_BlitzIndex 代码中可能存在错误。
除此之外,你在这里有几个不同的问题。
我怎么知道我是否有阻塞问题?查看等待统计信息,它跟踪您的 SQL Server 一直在等待的内容。我个人最喜欢的工具是sp_Blitz @CheckServerInfo = 1, @OutputType = 'markdown'因为你可以在 Stack 上发布你的问题的结果。(免责声明:我为启动这些脚本的公司工作。)其中一个部分将显示您最重要的等待 - 首先关注那些。如果您的主要等待类型包括 LCK*,那么您可能遇到了阻塞问题。
如何找到正在锁定的查询?如果没有监控软件,这可能会有点困难。我会从sp_BlitzCache @SortOrder = 'duration'开始, 这将显示运行时间最长的查询,有时可以指出与阻塞有关的查询。但是,您不能真正按表过滤,至少不能很快。
如何设计正确的索引来支持这些查询?这是一个很大的问题。通常,您需要尽可能多的索引来支持您的工作负载,但不要太多,以至于删除/更新/插入 (DUI) 操作由于必须获得大量锁定而减慢。如果您的表确实只有一个索引,那么 DUI 查询可能正在执行表扫描以找到他们想要更新的行。是时候看看在更新时如何访问这些表了。
例如,假设您有电话簿的经典白页 - 按姓氏、名字组织。如果您尝试更新名字为“Brent”的所有用户,您将不得不扫描整个电话簿,最终可能会遇到一些令人讨厌的锁定情况。您希望在名字上创建一个单独的索引,以便您可以快速找到需要更新的行,然后退出表。
| 归档时间: |
|
| 查看次数: |
4286 次 |
| 最近记录: |