frankieta Asked: 2016-07-14 08:28:59 +0800 CST2016-07-14 08:28:59 +0800 CST 2016-07-14 08:28:59 +0800 CST 全扫描/秒指标似乎非常高,在杀死 2 个查询后下降 772 我们今天的应用程序(java spring web 应用程序)遭遇了严重的衰退,调查 SQL Server 指标我发现在我看来一个非常高的完整扫描/秒值。 我杀死了负责查询的 2 个 SPID(执行后用 Jasper Report 编写的大报告),值立即下降。 这是杀死前后的两个屏幕截图: 前: 后: 由于我不是 DBA,所以我不是 SQL Server 的专家,但我觉得这个值非常令人担忧,你能确认一下吗? 实例是 SQL Server 2014。 谢谢 performance sql-server-2014 1 个回答 Voted Best Answer Ali Razeghi - AWS 2016-07-14T08:58:08+08:002016-07-14T08:58:08+08:00 这些指标通常必须与其他指标同时考虑。简单地进行表扫描本身并不是一件坏事。通常查询引擎会选择一个表扫描,即使索引存在,如果它更快,例如在一个小表上。您需要查看其他指标,例如Disk Read/Sec&Disk Write/Sec以及其他指标PLE。 请注意,您的内存指标根本没有改变,并且您仍然处于 100% 的缓存命中率,假设您在截取屏幕截图之前等待。它确实影响了 CPU 使用率,我没有注意到您提到这个问题,但如果您担心它,那就是它。请注意,您减少了 3 毫秒的闩锁等待时间,这意味着您很可能有某种写入或高隔离级别。 如果您的表扫描导致性能问题,它可能会显示在其他指标中或根据您的隔离级别显示在您的阻止报告中。如果您查看您的 PLE,似乎扫描次数的减少对它没有任何影响。也许你需要给它更多的时间,但看看它是否急剧上升。这将是 1 个迹象表明由于扫描而存在压力。收集其他指标并在前后进行检查。 此外,我相信您已经知道,但在使用 kill 命令时要非常小心。在这种情况下,它是一个只读查询,在写入时它不会执行回滚,从而使您的 ACID 合规性无效。DBCC INPUTBUFFER('spid')如果您还没有使用它,请先考虑一下。
这些指标通常必须与其他指标同时考虑。简单地进行表扫描本身并不是一件坏事。通常查询引擎会选择一个表扫描,即使索引存在,如果它更快,例如在一个小表上。您需要查看其他指标,例如
Disk Read/Sec
&Disk Write/Sec
以及其他指标PLE
。请注意,您的内存指标根本没有改变,并且您仍然处于 100% 的缓存命中率,假设您在截取屏幕截图之前等待。它确实影响了 CPU 使用率,我没有注意到您提到这个问题,但如果您担心它,那就是它。请注意,您减少了 3 毫秒的闩锁等待时间,这意味着您很可能有某种写入或高隔离级别。
如果您的表扫描导致性能问题,它可能会显示在其他指标中或根据您的隔离级别显示在您的阻止报告中。如果您查看您的 PLE,似乎扫描次数的减少对它没有任何影响。也许你需要给它更多的时间,但看看它是否急剧上升。这将是 1 个迹象表明由于扫描而存在压力。收集其他指标并在前后进行检查。
此外,我相信您已经知道,但在使用 kill 命令时要非常小心。在这种情况下,它是一个只读查询,在写入时它不会执行回滚,从而使您的 ACID 合规性无效。
DBCC INPUTBUFFER('spid')
如果您还没有使用它,请先考虑一下。