我們做的Drupal網站多是數據查詢、展示類型的,當數據量大的時候,導入就需要很長時間,而随着站點的建立、訪問,還會産生一些日志、緩存等數據,一些站點的MySQL數據庫占用空間會越來越大,部分甚至都超過10G了,導緻訪問很慢、備份困難。
雖然說Drupal的Cron可以做一些清理的工作,但實際上有些數據表還是清理不了,這幾天我就人工删除了一些數據表,例如BoostCache相關的表、Cache相關的表。
另外有些非英文站的locales_source表也極大,我打開這個表發現很多重複的、Views頁面整個都成了翻譯的source,而locales_target表中并沒有對應的翻譯文本。我就先把這些Views頁面産生的數據項全部删除了 DELETE FROM locales_source WHERE location LIKE '%/postcode/%' OR location LIKE '%/area/%' ,不過随着再次訪問,又會出現新的,還沒有完全解決。
2013年2月19日補充:*.chn.youbianku.com系列網站再次出現服務器負載高的情況,數據庫中locales_source表達到數G至上十G,先還是采取上述辦法删除,以後再想法徹底解決。
2月21日繼續查資料依然沒有找到很好的解決辦法,就先做了一個drush命令,對幾個非英文站都定時每天執行一次删除操作,暫時就不會出現數據庫過大、服務器負載過高的問題。
drush sql-query "DELETE FROM locales_source WHERE location LIKE '%/postcode/%' OR location LIKE '%/area/%'"; drush sql-query "OPTIMIZE TABLE locales_source";
2013年3月8日補充:上面的問題已經可以徹底解決,情況博文《Drupal多語言網站中MySQL數據庫locales_source表過大的問題》。
2016年8月16日補充:再删除locales_target中lid字段在locales_source中已經删除的記錄,可以進一步加快sql命令的執行速度,語句:
delete from locales_target where lid not in(select lid from locales_source);
2019年7月24日補充:在Drupal 7 Performance: Blown up locales_source table這篇文章裡面看到可以用這樣的語句來删除locales_target中找不到對應翻譯的locales_source裡面的記錄:
DELETE locales_source FROM locales_source left join locales_target lt using (lid) where lt.lid is null
评论