最近做了一个许愿活动,由于入口是在支付宝,主要针对大学生,没想到活动效果特别好,每天有将近100w pv,加上运营做了推广,在同一个时间点推了10w短信,瞬间高并发,数据库连接达到2000。加上我写的一个SQL三张表做了关联,关联字段没有索引,产生了慢查询,导致数据库连接池的资源被沾满,数据库被拖垮。服务不可用。
事故主要是因为的SQL引起的,我做了一些总结和反思:
1 对数据库的索引一直没有引起重视认为可有可无
2 对连表查询没有想过风险,没有做过执行计划分析
3 没有做相关压测,也没有考虑性能和压力问题
4 没有合理使用缓存,没有对缓存做很好的测试
5 过于乐观,盲目的乐观,代码质量不高,代码健壮性不够
6 自测不够全面,过于依赖测试,认为流程跑通就可以,没有覆盖到所有测试点,对缓存的测试不够全面
7 不够仔细,不够细心不是一个程序员应该有的毛病
反思:
1 加强数据库这边知识学习,每次创建表的时候必须考虑索引,每次需要做连接的时候必须做SQL分析,考虑连接是否走索引。
2 每一个接口,每一个功能都要考虑到并发问题,对高并发有相应的处理措施。
3 规范的打印日志,需要有入参和出参,关键点日志情况,以及Linux查询线上日志,学习Linux命令。快速定位线上问题。
4 对缓存的使用需要特别的谨慎,在自己测试的时候需要,第一次无缓存的裸奔测试,加上缓存的测试,加上缓存和缓存过期的测试。
5 认真仔细,细心,不盲目乐观。
对于一个工作两年多的程序员了,我觉得这些错误真的是不应该犯得低级错误,我觉得这次的错误对我的信心是极大的打击,我以前觉得自己技术很不错,现在看来我还是很初级的水平,我那些自信都是盲目的,希望这次教训会让我深深的记住。
接下来我需要加强,MySQL这块的学习(特别重要),Linux的学习(特别重要),redis,memcache的学习(特别重要)。