Drupal網站的Views模塊非常有用,我們一直用它來生成一些列表,包括node的列表、term的列表等。最近在搬遷一個系列網站到阿裡雲美國數據中心的服務器過程中,發現RDS的磁盤IOPS一直非常高影響了使用,經過仔細排查,發現造成堵塞的主要原因都是帶sort的SQL語句使得不斷生成大的臨時文件,再把Devel打開,找到這句SQL所在的頁面,從而發現是網站的node全列表views有問題,打開views編輯發現Sort一欄中有内容,而去掉Sort條件再報錯、運行就發現極少出現原來的問題了。
查了一些資料,在運行帶有sort的select語句是需要産生臨時文件,如果内存不夠放置的話就需要寫入到磁盤從而引起效率急劇下降,而我們的一些網站數據量很大,數據在幾十萬、幾百萬都有,這時臨時文件也很大了,隻有讀寫硬盤,因而讓RDS的IOPS達到限制。
分析了一下,這個sort其實不是很必要,隻是把所有node列出來,不是必須進行按時間排序,于是在Views中去掉了sort項,然後持續幾天的IOPS過高就解決了,我準備如果還是不解決的話,甚至把這個Views整個都删除掉,即使删除也不影響網站的核心功能,用戶一般還是通過搜索引擎以及各種分類頁或者搜索頁進到内頁的,成千上萬的Views頁面人工不可能翻頁來查看。
聯想到其它網站系列在其它服務器上也造成MySQL負載高,也可能存在同樣或者類似的問題,我又檢查了以前做的其它一些網站系列,也确實找出這樣的問題,用module或者菜單的方式修改Views後再持續觀察一段。
评论