最近老是有一台阿裡雲的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;
- 對爬蟲過多的網站進行了一些反爬措施或者爬取速度限制。
使用了很多種辦法,應該有一些效果,但是否完全解決了還有待觀察。
评论