發新話題
列印

[分享] ecshop缓存过多的原因及简单解决方法

ecshop缓存过多的原因及简单解决方法

ecshop缓存过多的原因及简单解决方法

经过简单测试发现,大量类似这样的语句被缓存

SELECT act_id, act_name, act_type, start_time, end_time FROM `ecs`.`ecs_goods_activity` WHERE is_finished=0 AND start_time <= '1216338055' AND end_time >= '1216338055'

SELECT act_id, act_range, act_range_ext, act_name, start_time, end_time FROM `ecs`.`ecs_favourable_activity` WHERE start_time <= '1216338055' AND end_time >= '1216338055'

其中'1216338055'是时间,随着时间的变化,这些sql语句也在发生变化,所以他们会被当作不同的语句而被缓存,然后文件就会越来越多。

而这些语句超过当前时间就不会再被执行,缓存起来没有意义。也许还有其他没必要缓存的sql,测试网站数据太少,可能没发现。

官方出了禁止缓存的补丁,但是缓存还是有一定实际效果的,完全禁用也不可取。

所以只对favourable_activity,goods_activity这2个表禁止缓存即可。

简单解决方法:
打开include/init.php
找到
$db->set_disable_cache_tables(array($ecs->table('sessions'), $ecs->table('sessions_data'), $ecs->table('cart')));
修改为
$db->set_disable_cache_tables(array($ecs->table('sessions'), $ecs->table('sessions_data'), $ecs->table('cart'), $ecs->table('favourable_activity'), $ecs->table('goods_activity')));
即可



复杂点的方法:
只对类似上面2条的sql语句禁止缓存,这样上面2个表其他类型的sql仍然可以被缓存。
有兴趣的可到 http://bbs.w3zz.com/thread-206-1-1.html 查看,不熟悉的初学者建议用简单的方法.


测试数据太少无法做更多测试,被生成大量缓存的可以用此方法试试,然后说下效果,谢谢。

原文http://bbs.ecshop.com/thread-61111-1-1.html
本文最近評分記錄
  • 00992266 貢獻 +1 感謝炮大的分享~ 2008-8-6 01:09

TOP

(點上方按鈕開啟)億商互動售前諮詢MSN帳號為: [email protected] ,歡迎您詢問主機、金流、物流、維護服務上的問題
也可試試這官方補丁

属性过多 导致mysql负载过大
http://bbs.ecshop.com/thread-60902-1-1.html

[ 本文最後由 c8902054 於 2008-8-6 20:35 編輯 ]
發新話題