早上挤地铁的时候收到了阿里云的监控报警,RDS 的 CPU 的负载达到了 90%mysql
由于是昨天晚上上的线,微信公众号也是在晚上才放出活动连接,当时也是考虑了可能会到来的使用量,把后台活动负载到了 3 台服务器,但是没想到居然是 mysql 报出了告警。linux
查看了数据库的使用量,发现总共有 3 w 多条的插入记录,而 CPU 的使用率确一直保持在 90% 不下来,正常状况下,2核4G 的一台 mysql 数据库不可能被这点插入量就给干趴下了,并且只是 CPU 的使用率特别高,内存的使用率确不多,问题可能出在 SQL 执行上面,部分 SQL 没有优化好致使的。sql
百万级别的访问量才算是大数据,须要从架构的层面去考虑,3万的访问量并不须要在架构上优化,直连可能均可以顶住。数据库
看了下阿里云自带的 RDS 监控,里面的 SQL 执行记录,发现有几条 sql 的执行特别慢,每条语句执行的时间快 3 秒了,没有优化好。服务器
检查了表结构,发现是缺乏索引致使的,添加了索引,RDS 的CPU 这才恢复了正常。微信
当一张表的数据过大的时候,添加索引须要选择半夜用户量少的时候,由于百万级别的表添加索引可能须要 七、8个小时才能建好索引。架构
一开始也怀疑了是遭到了攻击,后台想一想是错的,由于生产的数据库是添加过白名单的,没有在白名单里面的 IP 是不可能操做数据库的。大数据
简单来讲就是经过屏蔽攻击的 IP 地址来保护服务器。优化
linux中iptables屏蔽指定ip及ip段。阿里云
屏蔽某个 IP:
iptables -I INPUT -s xxx.xxx.xxx.xxx -j DROP
屏蔽指定 IP 段:
iptables -I INPUT -s 192.168.0.0/24 -j DROP