database - 大型 WordPress 数据库
问题描述
我的数据库大小超过 10GB,这会降低网站速度。我想拆分它并将这些数据库分离到专用服务器。我正在使用 MariaDB。
如何拆分 WordPress 数据库?
解决方案
看看 WPSE 上的这个答案:https ://wordpress.stackexchange.com/questions/2825/wordpress-sharding-which-multi-db-plugin-to-use
也就是说,大型数据库本质上并不是一件坏事。然而,糟糕的是一个未优化的数据库,一个臃肿的数据库(许多插件只是转储数据(通常是 postmeta 或选项表),以及未优化的数据库查询。
有一些数据库优化插件我会先看看使用,或者只是手动挖掘它。确保您的选项表尽可能精简,并确保删除所有孤立数据(例如,不再有父帖子且未在任何地方引用的媒体图像)。我已经看到插件在选项表中留下了价值数百兆的所有但无用的数据。当它被加载到每个页面请求上时,该网站就会变成类似糖蜜的状态。
从纯粹的轶事的角度来看,我目前正在对一个缓慢/臃肿的十年旧网站进行彻底的重构。它使用了大量插件,数据库在众多表中有大量重复信息,有许多元查询(没有索引或键控,因此在大型网站上速度非常慢),并且存储了大量无用/过时的选项在选项表中。
新站点充满了 100% 可行的测试数据,而数据库目前大约有 3 或 4 个演出。问题是我的表已经过优化,列被适当地索引,我什至有自定义的关系表将帖子类型链接在一起。我在那里有大约 450,000 篇各种帖子类型的帖子,并且使用$wpdb
类的简单查询,它可以在不到一秒的时间内筛选和加载数十或数百个帖子,而不会破坏内存使用。
最重要的是,在考虑拆分/分片数据库之前,您几乎可以肯定地考虑优化和精简您的数据库。
另一种选择是考虑改进您的硬件,即拥有一台主机和一台数据库机器,这将本质上提高性能,因为每台机器都可以针对手头的任务进行优化,而不是共享它不需要的资源。
这是我的一个请求的简单屏幕截图。这是来自一个页面,该页面从包含 450,000 条记录的表中加载了 200 个自定义帖子类型。每个自定义帖子类型都与 0-20 个其他帖子类型相关,其中一个甚至与其他 1,500 个帖子类型相关 - 尽管尚未完全优化,但它仍然几乎立即加载。
推荐阅读
- google-cloud-firestore - Firestore Security Get with a Where Query using Array Contains 产生权限被拒绝
- docker - 如何使用 DIND 图像在管道中将不安全的注册表作为参数传递
- kubernetes - 无法访问具有 externalTrafficPolicy 为“本地”的 kubernetes 服务
- node.js - Gmail API NodeJS - UnhandledPromiseRejectionWarning:错误:未找到请求的实体
- html - 使用 `object-fit: cover` 的 Img 仍然增加了父级的高度
- matlab - 为什么我不能按 spmd 块内的共分布数组大小进行索引?
- python - 需要帮助设置 git bash 终端以运行 python
- c++ - 使用 function-try-block 时 Visual Studio 中出现 C4297 警告(假定函数不会引发异常,但会引发异常)
- javascript - 为 Jest/Axios 上传测试导入一个模拟 JSON 文件
- javascript - 为什么这里找不到变量?