跳至正文
WordPress 与 WooCommerce · Google SEO

WordPress 数据库膨胀:哪些数据会变大、怎么处理

// / / 光算科技

数据库体检最容易走偏的地方,是一看到体积数字就想删。真正该做的是先分清:哪些表在正常增长、哪些表只进不出、哪些表大但根本不在你的查询路径上。前两类才是要处理的,第三类删了也不会让页面变快,只会把备份搞小一点。动手顺序错了,站点可能比清理之前更慢。

哪些数据会随时间变大

WordPress 官方的 API 手册把这些能力按分册记录,目录里 Database API、Options、Metadata、Transients 各自独立。顺着这个划分,就能把会膨胀的数据分成四类:

  • 编辑留下的历史:每次保存都会产生的修订记录,属于内容表的一部分,量大但很占空间。
  • 选项与临时数据:站点设置、插件配置,以及 transient 缓存的落地位置。过期数据如果没被回收,会长期堆积。
  • 媒体相关:附件记录、每张图生成的多个尺寸文件,以及不再被任何内容引用的孤立附件。
  • 第三方写入的痕迹:评论、垃圾评论、各类插件自己的日志与队列数据,这部分增长最不可预测。

要说明的是,WordPress 官方没有公布任何"保留多少条算过多"的阈值,也没有对"体积多大算异常"给出标准。这类判断只能来自你自己站点的实际用途:内容部一天发几篇、评论是否开放、媒体库有多大。

第一步:量体积,再分表看排名

不要从"清理"开始,要从"分表"开始。

  1. 先看单表体积排名,把前几名单独拎出来看,行数与体积的差距本身就是线索:一行很小说明存的是大量短记录,一行很大说明有长文本或序列化数据。
  2. 再看这些表最近三个月的增长趋势,只涨不落的表优先处理。
  3. 把候选表和你的实际查询对上:前台页面要查的表,权重最高;只在后台用的表,权重可以放低。
  4. 记录清理前的基线数据(表体积、关键页面的响应表现),否则事后无法证明改善来自清理。

如果第 1 步发现膨胀的表根本不在前台查询路径上,那这次清理的目标就该改成一个目标:把备份和维护成本降下来,而不是提速。web.dev 把 TTFB 列为诊断辅助指标的那一页写明,它的价值之一是判断 LCP 卡在哪一段的服务器响应上。清理的效果也只应该按这条链路去看。

三类数据的不同处理方式

处理方式不能一刀切。

数据类型该做什么不该做什么
修订记录限制保留数量,或按时间批量清理旧记录不要清到只剩一两条,回滚能力会归零
过期的 transient 与选项让它们自然过期,或在改动配置后主动失效重建不要在业务运行时批量删正在使用的缓存键
孤立附件先查清是否还被文章、小窗体或 CSS 引用,再从媒体库与文件两处一起处理不要只删记录而留下文件,或只删文件留下记录

下线页面是第四类,容易被忽略。如果某个 URL 曾经被收录或被外部引用,直接删掉会让访问者撞到错误页。Google 搜索中心关于重定向的说明把这件事定义为"把一个已存在的 URL 解析到另一个位置",并把 301 列为服务端设置永久重定向的方式——确定不再恢复的地址,就该走这条路,而不是留一个空的 404。

清理之前必须准备的东西

三件事,缺一件就别开始:一份可恢复的完整备份,而且要确认这份备份真的能被读回来,不是"文件在那儿"就算完成;一份被清理对象的清单,精确到 ID 而不是按条件模糊匹配;一个可以马上回滚的方案。迁移和清库这类操作对备份的要求,站内旧文WordPress 托管验收清单里已经列过验收口径,这里不重复。

另外两件经验:先在预发布环境跑一遍同样的脚本并记录输出,再在正式环境执行;执行时避开有真实访问的时段,并且按小批量分次做,不要一条语句扫全表。

什么时候不要清

四种情况先停手。一是站点刚完成一次批量导入,孤立附件的比例天然偏高,此时分不清哪些是真垃圾。二是业务处于旺季或投放期,任何批量写操作都可能和真实请求抢资源。三是表体积大但查询一直是走索引的,删它对响应时间没有影响,只会增加风险。四是清理理由只是"看着别扭"——如果第 1 步的分表结果指不出它在增长还是在阻塞查询,这次清理就没有目标。

还要把预期放对:web.dev 讲最有效的优化做法那篇把"就近分发加缓存"列为降低首字节时间的主要手段,这条是结构性的;清理数据库能回收空间,但官方没有任何文档把清理和核心网页指标达标直接连起来,也不要指望它替代缓存与服务器层面的处理。

怎么确认清理没伤到站点

验证分两轮。第一轮查数据:随机抽查几篇文章的前台输出、几张图片的显示、后台的设置页、评论列表,以及一次提交表单的动作,确认没有内容丢失或报错。第二轮看表现:对比清理前后的表体积,重新测一次首字节时间,再按 URL 分组看这一组的状态有没有变化,并确认移动与桌面两端一致。

还有一个容易被忽略的检查点:清理之后备份是否仍然可用。体积变小不等于备份能恢复,两件事要分别验证。需要更系统的排查顺序时,可以看缓存、数据库与前端文件的按需优化,媒体侧的判断另见WordPress 附件页关了图片会消失吗。

图中左边是按体积排序的若干张表的横条,右边按是否在前台查询路径上分成两栏,只有落在查询路径上的那张被标为优先处理
原创示意:图中为按表体积排序后再按是否在前台查询路径上分流的处理顺序,不是真实后台截图或数据。