我們選用Drupal的一個重要原因是其對多語言的支持,在實際使用中也發現多語言支持的一些問題,特别是對數據庫負載的影響很大,我們已經想過不少辦法了。例如:Drupal設置Memcache緩存、修改緩存翻譯詞的長度、減少翻譯相關數據表的尺寸等。
這兩天對一台阿裡雲RDS負載問題進行排查的時候,再次開啟Devel來查看IP Location系列典型頁面的SQL查詢語句,從幾個方面進行了優化:
- 關閉不是很必要的模塊,例如theme color, dashboard, comment等,可以減少幾次數據庫查詢次數;
- 發現amp版本顯示模闆中的問題:已經不用的内容,沒有輸出,但卻沒有去掉或者注釋掉,ip的留言功能的一些代碼,在web版本注釋掉了,但在amp/mip版本中沒有注釋掉,現在注釋掉後,一個amp的sql查詢數量從60多下降到30多;
- locale翻譯功能調用數據庫查詢的次數特别多,對這個文檔詳細看了源代碼,了解了原理,對翻譯詞進行精簡、合并,降低了幾次數據庫查詢;
- 有個地方默認是75個字符進行緩存到memcache,我改為30個字符後,這個設置緩存的語句就不卡了,但會導緻30個字符以上就不緩存,我還原到75就可以緩存更多的内容,但設置緩存的這句又引起查詢過慢,反複測試,現在從30改為55了,降低了不少SQL查詢次數到20次左右。
這樣就将部分頁面的數據庫查詢次數降低了一大半,應該對RDS負載降低起到很好的作用。後面還可以再詳細看memcache服務及Drupal與memcache接口的文檔,看能否調整緩存的大小等,讓速度進一步加快。
2021年3月24日補充:可以通過修改Drupal的locale_cache_length變量,讓memcache緩存更多的翻譯内容,如果安裝了drush就很簡單:執行drush vset locale_cache_length 200,就可以把默認的75改為200。
评论