我们做的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
评论