最近老是有一台阿里云的RDS数据库服务器有偶然主备切换的情况,网站也有偶尔很慢的情况,总体这台RDS的负载很轻,就是不知道偶尔有什么SQL语句触发了问题,这些天和同事一起排查、测试,把一些办法记录下来:
- Drupal站的Views是检查重点,检测办法还是以开启Devel插件为主,寻找慢查询语句,找到对应Views来改进;
- 在Views中使用Views PHP字段,发现会让Litepager失效,还有查询的Limit消失,改用views-view-field--field_name.tpl.php可以解决;
- Views高级设置里面的Debug签名在测试完成后的生产网站上需要关掉,避免引起(包含聚合的Views)性能大幅下降;
- Views里面调用Views Block再调用其它Views Block,甚至更多嵌套调用、更多并行调用,都要尽量简化;
- 在RDS的慢查询日志中看到有返回几百万行的查询语句,是自己写的生成sitemap.xml文件的程序引起的,改为第一次用专门的COUNT语句来计算总数,而不是SELECT返回全部内容再在PHP里面计数;
- 使用GROUP BY语句来替代DISTINCT语句,对分类页面、列表页面的网站地图提升sitemap.php的效率;
- 为大数据量的网站采用人工写COUNT和SELECT语句的办法单独生成sitemap;
- 对爬虫过多的网站进行了一些反爬措施或者爬取速度限制。
使用了很多种办法,应该有一些效果,但是否完全解决了还有待观察。
评论