搜索“提升 VPS 数据库性能”,你会发现很多主机公司都在博客文章中推销 VPS 升级方案。
但单靠升级并不能解决你的问题。
你只会在更昂贵的服务器上运行缓慢的数据库。事实上,大多数网站并不需要升级,尤其不需要将其作为提升性能的第一步。
在考虑升级之前,你需要优化网站和数据库。
这就是我们编写本指南的目的——帮助你优化现有 VPS 的数据库性能。
“优化数据库性能”是什么意思?
优化数据库性能意味着系统地提高数据库处理查询、处理并发用户和管理资源的速度和效率。这涉及索引、查询优化和硬件调优等技术,以缩短响应时间、提高吞吐量并降低运营成本,同时保持数据准确性和系统可靠性。
具体操作如下:
把你的数据库想象成一个储藏室。随着时间的推移,东西会越积越多,直到没有空间移动,找到你需要的东西也需要很长时间。
为了解决这个问题,你可以:
- 购买更大的存储空间。
- 移除不必要的物品。
更好的选择:先移除不必要的物品。将杂物移到更大的空间并不能解决根本问题。几个月后,你可能会遇到同样的问题,尽管现在你的存储空间更大了。
你的数据库也是这样运作的。它会收集数据(甚至会囤积你不再需要的东西),所以你需要定期清理。
真的是数据库或网站代码臃肿了吗?
您需要检查究竟是什么拖慢了您的网站速度。
当数据库成为瓶颈时:
- 包含动态内容(例如产品列表或博客存档)的页面加载缓慢。
- 管理文章或产品时,您的网站管理区域感觉迟钝。
- 数据库查询需要超过 1-2 秒才能完成。
- 高峰流量时段会导致速度明显下降。
当网站代码成为问题时:
- 即使数据库活动很少,您的网站加载也需要很长时间。(即使是静态页面加载也很慢!)
- 大型图像文件或未优化的媒体文件会拖慢加载时间(请先检查 GTmetrix)。
- 过多的插件或繁重的主题会导致延迟。
快速诊断工具:
- 使用 Query Monitor (适用于 WordPress)等工具查看哪些数据库查询耗时最长。
- 在高峰时段检查服务器的 CPU 和内存使用情况。
- 对数据库密集型页面和静态页面运行 PageSpeed 测试,比较加载时间。
如果数据库查询持续超过几秒钟,或者数据库密集型页面的加载速度明显慢于静态页面,则表明存在需要解决的数据库性能问题。
如何优化VPS上的数据库性能?
以下是让您的数据库像使用性能增强插件一样运行的分步指南:
1. 更新您的VPS软件
这听起来很简单,但许多网站所有者在网站上线后从未更新过他们的 VPS 操作系统或服务器软件。
重要性:过时的数据库软件最容易导致您错过开发人员发布的性能改进和安全补丁。
例如,数据库性能测试显示,较新版本的 MariaDB 比同期的 MySQL 版本快 13%-36%。因此,如果您仍在使用较旧的数据库版本,更新到最新版本应该会显著提升性能。
具体更新内容:
- 数据库软件:MySQL 或 MariaDB
- PHP 版本:PHP 8.4(最新稳定版本,发布于 2024 年 11 月)或 PHP 8.3,以实现最大兼容性
- 操作系统:请使用最新的安全补丁更新您的 Linux 发行版
- Web 服务器:Apache 或 NGINX
提示:请务必先在测试环境中测试更新!您肯定不希望您的在线网站因为兼容性问题而崩溃。
2. 清理数据库臃肿
还记得那个储藏室的比喻吗?现在是时候整理一下你的数据库了。
以下是一些你需要定期清理的常见数据库杂乱:
- 旧帖子修订(WordPress 每篇帖子最多可保存 50 多个修订版本)
- 垃圾评论和未使用的评论元数据
- 过期的临时文件和缓存数据
- 未使用的插件剩余表
- 几个月未清理的日志文件
对于 WordPress 用户:
- 使用插件,例如 WP-Optimize 或 Advanced Database Cleaner。
通过在 wp-config.php 文件中添加Define ('WP_POST_REVISIONS', 3);
来限制文章修订次数。
定期清理垃圾评论。
将你的 PHP 版本升级到 PHP 8.4,其中包含性能改进,包括 2 到 5 倍的 SHA-256 运算速度和优化的 Sprint 函数。
对于其他平台:
- 对频繁更新的表运行 OPTIMIZE TABLE 命令。
- 删除超过 30 天的不必要的日志条目。
- 删除您在开发期间创建的测试数据或虚拟数据。
3. 数据库索引
可以将数据库索引想象成一本书的目录。
如果没有索引,您的数据库必须扫描每一行才能找到所需内容。有了索引,数据库就可以快速找到您请求的数据。正确的索引可以将查询时间从几秒缩短到几毫秒,并有助于显著提高数据库性能,尤其是在数据库规模较大的情况下。
对于 WordPress,可以使用 Index WP MySQL For Speed 之类的插件,按照插件中的步骤操作即可。
但是,在索引数据库之前,您绝对需要创建网站备份。
何时添加索引:
- 您拥有包含数千行产品、博客文章、用户等数据的大型表
- 您经常搜索或筛选的列
- 外键列
- “JOIN”操作或“WHERE”子句中使用的许多列
何时不添加索引:
- 小型表(少于 1,000 行通常不会带来任何性能提升)
- 频繁更改的列(索引会减慢“INSERT/UPDATE”操作的速度)
- 您空间不足,希望充分利用资源(索引会占用空间)
4. 设置查询缓存
您的数据库就像一位乐于助人的图书管理员,经常被要求借阅同一套(热门)书籍。聪明的图书管理员不会走到后屋,一遍又一遍地寻找书籍,而是会记住书籍的位置,甚至可能将它们放在办公桌抽屉里。
查询缓存与此类似。当您的数据库运行查询时,它会将结果存储在内存中。下次有人请求相同的数据时,您的数据库无需再次运行复杂的查询,而是几乎立即提供缓存的结果。
如果数据更新,缓存的结果也会更新,新用户将自动获得最新的结果。
以下是为 MySQL 8.0 用户(最常见)实现查询缓存的方法:
- ProxySQL:MySQL 查询缓存的推荐替代品。它位于应用程序和数据库之间,通过可配置的TTL缓存结果。
- 应用程序级缓存:WordPress用户应使用 W3 Total Cache 等缓存插件,而不是数据库级缓存,以便更快地实现。
- Redis或Memcached:外部缓存系统,需要更改代码,但提供更好的控制力和可扩展性。一些托管产品为电商网站、会员网站以及新闻或博客网站提供内置的 Redis 对象缓存。
对于大多数小型网站,您可以完全安全地跳过数据库级查询缓存。相反,请先使用CMS或应用程序的内置缓存功能。如果您需要更高的性能,请联系开发人员实现用于对象缓存的Redis实例。
重要更新:MySQL 的内置查询缓存在 MySQL 5.7.20 中已弃用,并在MySQL 8.0中完全删除。虽然 MariaDB 仍然支持查询缓存,但由于多核机器上的可扩展性问题,它默认是禁用的。
5. 调整数据库配置
您的数据库默认设置适用于任何服务器,从小型共享主机到企业级硬件。但就像一件千篇一律的T恤一样,这些设置并非根据您的需求进行优化,只是完成工作而已。
VPS 环境允许您根据具体配置自定义这些设置。
以下是针对 MySQL 和 MariaDB 数据库最显著的变化:
innodb_buffer_pool_size
:设置为可用内存的 70-80%。对于 4GB 的 VPS,使用大约 3GB 的内存。innodb_redo_log_capacity
:对于 MySQL 8.0.30 及更高版本,初始设置为 1-2GB(替换旧的 innodb_log_file_size 设置)。max_connections
:设置为 CPU 核心数的 4 倍,最低设置为 100 个。大多数小型网站只需要 20-50 个。query_cache_size
:MySQL 5.7/MariaDB 为 128M-256M(MySQL 8.0 已完全移除查询缓存)。
使用 MySQL Tuner 或 PGTune 可根据您的实际使用模式获得个性化建议。这些工具会分析您当前的设置并建议最佳值。
专业提示:MySQL 8.0.30 及更高版本允许您在不重启的情况下调整重做日志的大小:
SET GLOBAL innodb_redo_log_capacity = 2147483648
更改配置前,请务必备份数据库!请先在预发布环境进行测试,然后在低流量时段进行测试。
6. 选择合适的存储引擎
将存储引擎视为不同的数据归档系统。您需要以不同的方式组织数据以适应所使用的存储引擎。
大多数现代应用程序使用 InnoDB(MySQL 的默认引擎),但在某些情况下,VPS 上也需要使用其他引擎。
- InnoDB(推荐用于大多数网站):非常适合电商网站、博客和频繁更新的应用程序。它支持事务、外键和崩溃恢复。缺点是内存占用略高,但在拥有专用资源的 VPS 上,这通常不是问题。
- MyISAM(谨慎使用):读取密集型操作速度更快,占用内存更少,但缺乏崩溃恢复和事务支持。仅对很少更改的表(例如查找表或存档)才考虑使用 MyISAM。
- 内存(仅限特殊情况):将数据存储在 RAM 中以实现闪电般的访问速度,但在服务器重启时会丢失所有数据。它非常适合在您控制环境的 VPS 上存储临时数据或会话。
要检查表使用的存储引擎,请运行:
SHOW TABLE STATUS;
在 MySQL 控制台中,您可以使用以下命令转换表:
ALTER TABLE your_table ENGINE = InnoDB;
VPS 的优势:与共享主机不同,您可以完全控制存储引擎的选择,并且可以选择同时运行多个引擎而不受限制。当然,这意味着您必须在一开始就谨慎选择,以避免以后出现迁移问题。
7. 持续监控和测试
数据库优化并非“设置后就忘了”的任务。您的网站规模会不断扩大,流量模式也会发生变化,上个月有效的方法今天可能就不再适用了。
好消息是,VPS 环境让监控变得简单,因为您可以完全访问系统资源和数据库日志。
以下是一些必备的监控工具:
- htop 或 top:实时监控 CPU 和内存使用情况。
- iostat 命令:检查磁盘 I/O 性能(安装方法:
apt-get install sysstat
)。 - MySQL 进程列表:运行 SHOW PROCESSLIST; 以查看活跃查询。
- 慢查询日志:启用此功能可以捕获耗时超过 2 秒的查询。
您可以使用 GTmetrix 或 Google PageSpeed Insights 等工具设置每周检查,重点关注那些占用大量数据库的页面,例如产品页面、搜索结果或博客存档。
尤其要关注您的首次字节时间 (TTFB),因为这通常是数据库性能问题容易被发现的地方。在上面的屏幕截图中,您可以看到 TTFB 为 0.7 秒。
缩短 TTFB 时间还可以提高您的 Core Web Vitals 得分,这是 Google 的排名指标之一。
需要注意的危险信号:
- TTFB 持续超过 1 秒
- 正常流量下内存使用率超过 80%
- 慢查询日志重复显示相同的查询
- 数据库连接在高峰时段达到最大值
当您发现问题时,不要惊慌,也不要立即认为您需要升级 VPS。通常,我们介绍的某项优化只需要进行一些微调。
何时应该真正升级VPS?
在我们之前的储藏室比喻中,你一定记得我们为了适应同一个房间而进行了优化(清理了垃圾)。
但是,如果即使在优化之后空间仍然不足,那么你的房间已经不够用了,是时候购买更大的 VPS 了。
VPS 升级也是如此。如果你已经完成了所有优化,但性能仍然没有太大变化,那么你可能需要升级到更大的 VPS。
以下几个明显的信号可以告诉你 VPS 是否是瓶颈:
- 在正常流量下,CPU 使用率持续超过 80%。
- RAM 使用率经常超过 85%。
- 数据库查询已优化,但由于硬件限制,仍然很慢。
- 优化后,网站加载时间仍然超过 3 秒。
应该优先升级哪些:
- RAM:通常,对于数据库密集型网站来说,RAM 是性能提升最大的因素。
- CPU:如果你正在进行大量复杂的计算或处理。
- 存储:如果您仍在使用传统 HDD,请升级到 NVMe SSD。
请记住,所有网站的推荐页面加载时间均应低于 3 秒。尽量缩短加载时间,这样就没问题了!
小结
现在,我有一些好消息和一些不太好的消息。
好消息是,您的 VPS 上有一个经过全面优化的数据库,它高效运行,并以闪电般的速度为您的网站提供服务。
不太好的消息是,这还没有结束。就像任何其他维护任务一样,数据库需要定期优化。
但您不再是盲目操作。您知道要查找什么以及如何修复它。
如果您使用 WordPress,有许多工具(例如 WP Optimize 和 LiteSpeed Cache 的数据库优化)可以帮助您只需点击几下即可运行大多数数据库维护任务。
如果升级是唯一的选择,请尝试专业 VPS 套餐,通过高质量的硬件可带来的网站几乎瞬间的速度提升。
评论留言