非常抱歉,昨天 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% , 造成几分钟全站访问故障,由此您带来麻烦,请您谅解。

【故障公告】再次遭遇SQL语句执行超时引发网站首页访问故障的更多相关文章

  1. 【故障公告】SQL语句执行超时引发网站首页访问故障

    非常抱歉,今天早上 6:37~8:15 期间,由于获取网站首页博文列表的 SQL 语句出现突发的查询超时问题,造成访问网站首页时出现 500 错误,由此给您带来麻烦,请您谅解. 故障的情况是这样的. ...

  2. Oracle sql语句执行顺序

    sql语法的分析是从右到左 一.sql语句的执行步骤: 1)词法分析,词法分析阶段是编译过程的第一个阶段.这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构 ...

  3. Oracle SQL语句执行步骤

    转自:http://www.cnblogs.com/quanweiru/archive/2012/11/09/2762345.html Oracle中SQL语句执行过程中,Oracle内部解析原理如下 ...

  4. Jenkins工程中SQL语句执行的方法

    前言 网上很多jenkins工程中基于shell或批处理方式调用sql文件执行sql命令的方式,大部分都是需要基于sql文件来完成的,因此在sql语句发生变化时需要去jenkins服务端修改对应的sq ...

  5. 转:Oracle中SQL语句执行过程中

    Oracle中SQL语句执行过程中,Oracle内部解析原理如下: 1.当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法.表名.字 ...

  6. html5 webDatabase 存储中sql语句执行可嵌套使用

    html5 webDatabase 存储中sql语句执行可嵌套使用,代码如下: *); data.transaction(function(tx){ tx.executeSql("creat ...

  7. mysql优化(三)–explain分析sql语句执行效率

    mysql优化(三)–explain分析sql语句执行效率 mushu 发布于 11个月前 (06-04) 分类:Mysql 阅读(651) 评论(0) Explain命令在解决数据库性能上是第一推荐 ...

  8. 统计sql语句执行效率

    --统计sql语句执行效率SELECT (total_elapsed_time / execution_count)/1000 N'平均时间ms' ,total_elapsed_time/1000 N ...

  9. SQL语句执行顺寻

    SQL语句执行的时候是有一定顺序的.理解这个顺序对SQL的使用和学习有很大的帮助. 1.from 先选择一个表,或者说源头,构成一个结果集. 2.where 然后用where对结果集进行筛选.筛选出需 ...

随机推荐

  1. jquery简单实现复选框的全选与反选

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. DEVOPS技术实践_19:Pipeline的多参数json调用

    在上一篇学习了把参数写进Json文件,然后通过去Json文件,调用参数的方法 1. 三元运算符介绍 调用的方法是通过一个三元运算符实现的 gender = prop.GENDER? prop.GEND ...

  3. 012 Ceph多区域网关

    一.基本概念 1.1 多区域概念 Multi-Size功能是从J版本开始的.一个single zone配置通常由一个zone group组成,该zone group包含一个zone和多个用于负载均衡的 ...

  4. EasyMock.replay()有什么用

    现在很多项目都使用EasyMock来作为单元测试框架. EasyMock一个方法,基本上是三步:EasyMock.expect().EasyMock.replay().EasyMock.verify( ...

  5. 使用宝塔搭建nextcloud的过程(搭建、优化、问题)

    宝塔部署教程 参考网址: 使用NextCloud来搭建我们的私有网盘.并结合Redis优化性能(宝塔) https://www.moerats.com/archives/175/ 宝塔面板下nextc ...

  6. [MariaDB]MHA高可用部署-实验

    目录 一.简介 1.1MHA角色 二.MHA的工具 三.MHA部署过程 3.1.1 配置 3.1.2 环境规划 3.1.3 配置一主多从 3.2 MHA配置 3.2.1 master权限授予 3.2. ...

  7. 你知道Java中的CopyOnWriteArrayList吗?

    CopyOnWrite CopyOnWrite是什么? CopyOnWriteArrayList源码分享? CopyOnWriteArrayList使用场景? CopyOnWriteArrayList ...

  8. Java 基础(一)| 使用泛型的正确姿势

    前言 为跳槽面试做准备,今天开始进入 Java 基础的复习.希望基础不好的同学看完这篇文章,能掌握泛型,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆. 一.什么是泛型 泛型,即&qu ...

  9. P1551 亲戚 并查集

    P1551 亲戚 题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 题目描述 规定:x和y是亲戚,y和z是亲戚,那么 ...

  10. Logback源码分析

    在日常开发中经常通过打印日志记录程序执行的步骤或者排查问题,如下代码类似很多,但是,它是如何执行的呢? package chapters; import org.slf4j.Logger; impor ...