非常抱歉,昨天 18:40~19:10 再次遭遇上次遇到的 SQL 语句执行超时引发的网站首页访问故障,由此您带来麻烦,请您谅解。

上次故障详见之前的故障公告,上次排查下来以为是 SQL Server 参数嗅探问题引起的,但在引起参数嗅探的漏洞被修复后再次出现故障说明上次的判断是错误的。

今天出现故障时的表现与上次一样,唯一不同的地方是这次比上次更糟糕,即使主备切换也无法恢复。

后来我们从 SQL 语句本身下手,给查询首页博文列表的 SQL 语句添加了时间条件才恢复正常。

SET @StartDate = dateadd(day, -2, getdate())
SELECT ...
FROM
blog_Content bc WITH(NOLOCK)
...
WHERE
bc.DateAdded >= @StartDate AND ...
ORDER BY
bc.[DateAdded] DESC

DateAdded 是博文表 blog_Content 的聚集索引字段,这段 SQL 语句之前长时间都使用了这个时间条件,但前段时间这个时间条件有时会造成数据库 CPU 占用高,后来去掉了。

加了 DateAdded 时间查询条件后,虽然恢复了正常,但查询速度不太理想,在执行计划被缓存后耗时也要 800-900 毫秒。

今天上午我们进一步对 SQL 语句进行了优化,还是基于通过时间条件减少检索范围的思路,对博文与首页的关联表增加了查询时间条件。

SELECT ...
FROM
blog_Content bc WITH(NOLOCK)
INNER JOIN blog_Site_Links bl WITH(NOLOCK) on bc.ID = bl.EntryID
WHERE
bc.DateAdded >= @StartDate AND ...
AND bl.CreatedTime > @StartDate ...
ORDER BY
bc.[DateAdded] DESC

这一优化效果明显,查询耗时降到了 50 毫秒以内。

另外,昨天在处理故障时,进行了一个索引修改的操作引发索引重建,结果造成数据库 CPU 100% , 造成几分钟全站访问故障,由此您带来麻烦,请您谅解。

最新文章

  1. 在MFC中使用GDI+的一般方法,以VC6.0编译器为例
  2. 堆排序Heap sort
  3. 小甲鱼python视频弟十二讲(关于字符串的方法及注释下)
  4. Ubuntu下配置L2TP
  5. he time that it takes to bring a block from disk into main memory
  6. Python 类的一些BIF
  7. poj 2431 Expedition 贪心
  8. Typecho 代码阅读笔记(一) - 页面渲染及路由机制
  9. 原生js 实现 Ajax 跨浏览器使用
  10. 浅谈移动端适配-rem
  11. mysql生成日期的辅助表
  12. Netty(二) 从线程模型的角度看 Netty 为什么是高性能的?
  13. docker--centos镜像安装tomcat jdk1.8 mysql部署java web项目
  14. Date相关
  15. turnserver 配置说明记录
  16. AndroidStudio制作欢迎界面与应用图标
  17. 连接Oracle时ORA-12541 TNS 无监听程序
  18. lua -- table.nums
  19. 27-x的y次方的后三位数
  20. Go语言目录

热门文章

  1. Jmeter阶梯加压监听
  2. win服务器管理工具,服务器vps管理
  3. 解决mariadb字符级不是utf8问题
  4. Linux下卸载oracle需要删除的文件
  5. 删除资源管理器中,设备和驱动器与左侧边栏中存在的WPS网盘等图标
  6. Idea 注册方式,亲测可用
  7. Jquery图片上传功能整理
  8. Go 每日一库之 go-flags
  9. PQSQL 按照时间进行分组
  10. JS的var和let的区别(详细讲解)