Access插件会严重拖慢Typecho运行

2021-04-11T23:19:11

年初的时候博客切换到了国内服务器运行,按理而言访问速度应该更快了,但我总感觉有什么不太对劲的...

前言

一开始只是看各大搜索引擎爬虫的耗时时间,一路来到了1s/请求,我寻思我这Typecho也不至于跑这么慢吧,但一直没找到具体原因。
直到前段时间我用17ce测我首页速度的时候,CPU直接满了,17ce达到了喜人的平均3s+的好成绩,全国都红了。
这谁受得了?难怪蜘蛛爬取耗时巨大。

原因

经过反复测试,瓶颈在数据库上。真是奇了怪了,我数据库是有查询缓存(Query Cache)的,而且就一个首页,怎么会搞成这个样子?
打开sql慢日志,时间直接设置为1s,17ce再来一发。
好家伙,慢日志直接写了几百kb上去...

点开查看发现是以下语句:

SELECT DISTINCT `content_id` as `cid`, COUNT(1) as `count`, typecho_contents.`title`  FROM typecho_access_log
INNER JOIN typecho_contents ON typecho_access_log.`content_id` = typecho_contents.`cid` 
WHERE  (typecho_access_log.`content_id` <> '' )
GROUP BY typecho_access_log.`content_id` 
ORDER BY `count`  DESC;

看完了之后直接人都炸了,这是人写的SQL?
typecho_access_log这个表就是Access插件的日志表,详细记录了每一个访客的各种信息。
这个SQL 执行了,全 盘 扫 描!
对于我这个小博客而言,也就是15w进行全盘扫描,对于InnoDB数据引擎而言简直就是灾难!
最离谱的是,由于每次访问都会增加一条,所以,Query Cache直接失效,每个访问都会重新计算。

于是,我的数据库就炸了。。。

解决

解决个锤子,直接删插件删表,麻溜的!

当前页面是本站的「Baidu MIP」版。查看、发表评论或购买附件请点击:完整版 »