今天上午 10: 40 左右,我们所使用的阿里云 RDS 实例的 CPU 突然飙高到近 100% ,造成大量数据库查询操作缓慢、超时,在这个恶劣条件下大量 memcached 缓存无法建立,这样的雪上加霜让 Web 服务器的 CPU 跟着不堪重负,于是要么访问缓慢,要么直接 503 。。。造成网站无法正常访问,由此给您带来了很大的麻烦,请您谅解。
问题非常奇怪,昨天同样的时间段,RDS CPU 占用却少很多,平时 RDS CPU 的占用通常都在 60% 以下,而今天我们网站的访问量并没有明显的突增。
面对这个突发故障,我们实在找不出可能的线索。在前几年使用阿里云 RDS 曾经遇到过很少几次类似数据库访问突发缓慢的问题,当时都通过主备切换神奇地解决了。这次,我们最终还是采用了主备切换的方法,在 11:20 左右启动了主备切换。
主备切换后,CPU 很快就降了下来,但由于 SQL Server 预热需要一定的时间(建立缓存),所以在切换后的一段时间,访问网站依然缓慢,直到 11:40 左右才恢复正常。
我们所使用的 RDS 实例规格是 SQL Server 2008 R2 ,20核CPU ,12G内存,6000 IOPS ,一直没有升级到 Server Server 2012 或 2016 ,就是因为阿里云只有 2008 R2 才提供了高可用版(支持主备切换),而 2012 与 2016 只有基础版。而使用高可用版,在出现突发故障进行主备切换是一个简单有效的方式。
【更新】
我们在故障恢复后,开启了 RDS 的 SQL 审计功能,正在根据审计情况对查询与索引进行优化。