参数嗅探导致缓慢案例

来源:互联网 发布:淘宝售假怎么申诉 编辑:程序博客网 时间:2024/06/18 13:52

日期: 2017-02-22

症状:

  1. 反馈网站登录超时缓慢;
  2. 用活动监视器和 Proc_DBA_GetSlowSQL_ByCPU 都可以看到这条SQL占用了比较多的CPU时间;
  3. 每隔一段时间(时间不定,一个月或几个月)可能就出现一次,重启SQL Server会恢复正常(如是存储过程加个空格修改一下也能恢复正常);
  4. 实际在 SSMS 上执行很快。 

专业上的说法叫:参数嗅探
这种其实出现的机率非常少, 几年也许就能碰到一次, 加上重编译就好。 没有办法根治这种现象。
但有经验了只要出现类似的症状, 基本在 20 分钟内就可以恢复。(只要发现有上面的症状,99.9%的可能就是参数嗅探了)

不能每个语句加重编译, 代价很高。
处理方法相当于一个老年人迷路了回家困难(机率很小), 强行让他在胸前挂块地图就好。但强行在每个人胸前挂地图就不值了。

处理方法(红色部分为重编译,加上就解决了):

存储过程SQL语句

CREATE PROC dbo.Proc_test
--parameters
WITH RECOMPILE
AS
BEGIN
---to do list
END

SELECT * FROM tableName 
OPTION(RECOMPILE)

参考文档:

笔记51-徐 参数嗅探 Parameter Sniffing

实际SQL:略

0 0