Drupal的Views是個非常強大、靈活的工具,但用得不合适也可能導緻數據庫負載的飙升。最近把Drupal站啟用UTF8MB4支持,轉換程序自動把以前的MyISAM引擎轉為InnoDB了,也因此引起阿裡雲RDS的IOPS升高。
又試了一些調整RDS參數等,無效。再看了一些資料、觀察了RDS的進程,還是一些Views的消耗大,特别是數據量大的站。以前在Drupal 6時就在個别網站中啟用過views_litepager這個插件,來替換Views本身的翻頁,犧牲了查看一共有多少頁的功能,不再運行select count(*) ... 這個在InnoDB引擎消耗很大的數據統計,換來性能上的提升。
今天再次在一些Drupal 7站上實施了這個模塊,不過發現設置有緩存的views翻頁出現問題,類似别人的問題帖子:《Going back to "Page 1" displays "Page 0" in pager》,使用其中說到的補丁可以解決。
再觀察看看,有效、沒有其它問題的話,再實施到更多站點上去。
2017年11月6日補充:從MySQL的表現數據來看,views不顯示頁面總數後對降低IOPS确實有明顯效果。已經在多個系列網站中實施,有幾點注意:
- 對于數據量太少的網站(例如頁面總數在幾千、幾萬以下)或者數據量太小的Views(例如Taxonomy Term的分類頁)來說,實施的意義不大,可以不變,有些網站總頁面node數量大,但沒有node的views,隻有分類頁的views,也可以不實施;
- 對于數據量較大的網站(例如頁面數量在數萬、數十萬以上),而且有node做成的views的情況下,就有必要啟用views_litepager模塊并修改views中的翻頁設置為litepager;
- 使用了自定義模塊的網站,可以直接修改default views文件,将pager的數據從full改為lite,然後批量清理緩存;
- 多語言翻譯中需要人工來增加Page 1和Page @count的對應翻譯,以免當前頁都是顯示英語頁數。
评论