对于WordPress来说,需要优化的地方非常多,从前端到后端有非常多的优化手段,比如安装WordPress的优化缓存加速插件,但是有时候数据量一大,最终都是感觉很卡,该做的优化步骤都做了,那如何解决呢?这个时候,我们就可以进行WordPress的深度优化加速了,也就是WordPress数据库优化设置。前端优化加速插件的应用等这里搬主题就不多说,毕竟网上教程很多,搬主题专门介绍一下WordPress的数据库如何优化加速。这里分享优化设置的详细教程。
服务器环境:
OpenLiteSpeed 1.6.18
PHP 7.4
MariaDB 10.5
WordPress 5.6
CyberPanel 2.0.3
一、WordPress数据库的优化方向
因为WordPress的数据库一般是MySQL或者MariaDB(MariaDB是MySQL的一个分支,完全兼容MySQL),而我们要优化数据库的最终目的是让WordPress的页面访问速度更快,而WordPress的架构导致每打开一个页面,均要进行数据库的查询,查询次数越多,则页面访问速度越慢。这里我们的WordPress数据库的优化方向则为减少数据库的查询次数,从而达到WordPress的优化加速作用。
减少数据库的查询次数的方法主要有几个:
1、直接修改WordPress主题模板,尽量减少数据库及PHP调用次数
2、开启数据库查询缓存
3、设置数据库索引缓存
接下来搬主题就针对这三个方向进行相应的优化。
二、开启数据库查询次数及时间显示
在这之前,搬主题先分享一下如何开启数据库查询次数及时间显示。
将如下代码放到自己的WordPress主题模板内的footer.php 里既可。
本页加载数据库查询<?php echo get_num_queries(); ?>次,加载用时:<?php timer_stop(1); ?>秒
一般都加在最底部的</div>
前即可。根据自己实际位置需要进行调整。这样保存后就可以直接显示每个页面的数据库查询次数及相应的加载时间显示了。
注意:如果开启了缓存插件,比如搬主题开启了LiteSpeed Cache插件,则只会在第一次加载时显示查询次数,然后就页面就直接被缓存了,再次加载也不会变化,因此如果要调试的话,可以先暂时关闭缓存插件。
三、修改WordPress主题模板
一般我们安装了各类的WordPress主题模板,在模板中会大量的调用相应的数据库字段及PHP调用。我们首先要减少因为主题和其他一些不必要的数据库查询。
打开WordPress 根目录下的 wp-config.php 文件,在后面加入如下的代码,然后保存,刷新自己的缓存。
define('COOKIE_DOMAIN', 'www.banzhuti.com');
//设置地址而不是服务器检查,这将减少服务器查询
define('WP_HOME', 'https://www.banzhuti.com');
define('WP_SITEURL', 'https://www.banzhuti.com');
//优化文章修改历史:Post-Revisioning
define('AUTOSAVE_INTERVAL', 120);// 修改 WordPress 编辑器自动保存时间间隔为 120 秒保存一次
define('WP_POST_REVISIONS', 5);//仅保留保留 5 个最近修改,也可以减小此数字,但不能太低了
define('EMPTY_TRASH_DAYS', 7 );//7 天后自动清空回收站,这个自己根据情况设定
define( 'CORE_UPGRADE_SKIP_NEW_BUNDLED', true );//更新时跳过 wp-content 目录,增加更新效率
以上搬主题都做了注释了,如需使用则可以将相应的域名改为自己的域名,相应的主题改为自己的对应主题名称即可。比如第一条,由于很多原因你需要给站点指定 cookies 域。比较常见的就是阻止子域名上请求静态内容的 cookies 不必要的传输。这种情况下,你就可以使用此定义告知 WordPress 只向非静态域发送 cookies,这将会大大提高网站的性能。
四、设置数据库查询缓存及索引
那么如何开启数据库查询缓存呢。其实很简单,一般MySQL数据库,找到my.cnf文件。
一般登陆服务器后,输入如下代码:
vi /etc/my.cnf
打开后,找到如下的代码,进行编辑:
query_cache_size = 20M
query_cache_type = ON
query_cache_size = 20M
的意思表示查询缓存的大小设置,query_cache_type = ON
的意思表示开启查询缓存
注意:键盘点击 I
后就可以编辑,编辑后先按 esc
退出键,然后输入 :wq
回车即可保存。
如果是MariaDB数据库,那问题来了,my.cnf文件里面什么都没有,
其实里面代码有包含my.cnf.d文件夹下的相应cnf文件配置,但是就算进入了my.cnf.d文件夹,分别打开里面的文件,都没有相应的配置可以进行更改。这个时候怎么办?
不用担心,因为MariaDB数据库如果没有进行设置,则自动取默认配置。这个我们不用管,其实我们可以直接在my.cnf文件里增加代码即可。
[mysqld]
skip-external-locking
query_cache_size = 20M
query_cache_type = ON
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
max_connections = 256
以上的代码解释如下:
[mysqld]
skip-external-locking
#避免 MySQL 的外部锁定,减少出错几率增强稳定性。
key_buffer_size = 16M
#指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。16M适用于 512MB内存,对于内存在4GB左右的服务器该参数可设置为256M,依此类推即可。注意:该参数值设置的过大反而会是服务器整体效率降低!
max_allowed_packet = 1M
#MySQL 根据此配置会限制 server 接受的数据包大小。
table_open_cache = 64
#指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。注意,不能盲目地把table_open_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。
64 适用于 512MB 内存,1GB 内存则可以设置成 128,依此类推即可。
sort_buffer_size = 512K
#查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每连接独占,如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 512K = 50MB。
512K 适用于 512MB 内存,1GB 内存则可以设置成 1M,依此类推即可。
net_buffer_length = 8K
#初始化server 接受的数据包大小,当需要的时候再由 max_allowed_packet 控制增长的大小。注意:该参数值设置的范围只能为1 – 1024K。
read_buffer_size = 256K
#读查询操作所能使用的缓冲区大小。和 sort_buffer_size 一样,该参数对应的分配内存也是每连接独享。
256K 适用于 512MB 内存,1GB 内存则可以设置成 512K,依此类推即可。
read_rnd_buffer_size = 512K
#查询操作多表所能使用的缓冲区大小。设置较大的值可以有效提升 ORDER BY 的性能。和 sort_buffer_size 一样,该参数对应的分配内存也是每连接独享。
512K适用于 512MB 内存,1GB 内存则可以设置成 1M,依此类推即可。
myisam_sort_buffer_size = 8M
#MyISAM 排序所能使用的缓冲区大小。
8M 适用于 512MB 内存,1GB 内存则可以设置成 16M,依此类推即可。
max_connections = 256
#指定MySQL允许的最大连接进程数。如果在访问时经常出现 Too Many Connections 的错误提示,则需要增大该参数值。
注意:该参数默认值为 151,最大可以设置为 100000
这里建议设置成内存的一半,比如 512MB 内存就设置成 256,依此类推。
以上设置完后,记得重启数据库让其生效。重启数据库命令如下:
systemctl restart mysqld.service
7、查询缓存是否启用生效
以上设置好后,如何知道是否生效呢?这里以MariaDB数据库为例,我们需要登陆数据库进行操作。搬主题的是CyberPanel面板,因此首先要了解相应的数据库登陆密码。
输入如下命令获取数据库密码:
cat /etc/cyberpanel/mysqlPassword
其中红色框里面的就是对应的数据库登陆密码。
然后输入命令进行登陆
mysql -u root -p
然后要求输入密码,这个时候将对应的密码输入,回车即可登陆相应的数据库。
输入命令查询
show variables like '%query_cache%';
其中query_cache_type:NO代表已经开启查询缓存
再输入命令查询缓存的命中率
show status like 'qcache%';
其实以上的各种设置,仅供参考,各位可以根据自己的实际情况进行增减和修改。
五、利用数据库工具检测进行优化
以上搬主题也只列了一部分可以优化的数据库内容,但是如何设置相应的值,很多小伙伴也不是很明白。这个时候我们可以借助一个免费的数据库检测优化工具来帮助我们。
这个工具就是mysqltuner,它支持MySQL和MariaDB数据库。
先下载数据库测试工具
wget http://mysqltuner.pl/ -O mysqltuner.pl
下载完成后,输入如下指令进行检测:
perl mysqltuner.pl
然后又要再分别输入数据库的用户名和密码,用户名填:root ,密码继续用上面的方法获取,然后输入。
接下来会生成一大堆的检测报告,这个时候我们可以看到最下面的性能优化建议。如类似这样的:
*** Add RAM before increasing MySQL buffer variables ***
performance_schema = ON enable PFS
innodb_log_file_size should be (=64M) if possible, so InnoDB total log files size equals to 25% of buffer pool size.
其中的意思performance_schema = ON建议开启,innodb_log_file_size的大小值建议至少需要64M。我们只需将对应的建议在my.cnf中添加和修改即可。
比如将innodb_log_file_size=64M
加入my.cnf文件里。如果之前有则直接修改。
六、数据库优化总结
其实通过以上的数据库优化后,站点的速度能有一定的提升。但是每个网站的流量、架构、主题、插件各方面都不一样,需要在后面的过程中不断的优化和调整,才能直接满足WordPress的实际站点的使用。因此建议不断调优。
其实还有一个很大的争议点,就是数据库查询缓存的启用和禁用。本篇文章虽然介绍了开启数据库查询缓存的方法及优化设置,但是网上的结论分为开启和禁用两各派系。到底开启后对性能的提升有多大,是利大于弊还是弊大于利,各位小伙伴自己可以尝试。
这里搬主题给个开启还是关闭数据库查询缓存的建议:如果是BBS论坛,或者商城等互动频繁,写入数据更新快的站点,禁用查询缓存最佳。如果是WordPress站点,更新不频繁,比如2-3天更新一次甚至更长,那么建议开启查询缓存。如果是每天都更新,一次更新几十上百篇的WordPress站点,建议禁用。
最终实际体验,还是自己去测试吧。