WordPress 、Typecho 站点的 MySQL/MariaDB 数据库优化

news2024/10/6 12:22:39

今天明月给大家分享一下 WordPress 、Typecho 站点的 MySQL/MariaDB 数据库优化,无论你的站点采用是 WordPress 还是 Typecho,都要用到 MySQL/MariaDB 数据库,我们以 MySQL 为主(MariaDB 其实跟 MySQL 基本没啥大的区别,所以同样都适用。)给大家讲解一下数据库的优化。

WordPress 、Typecho 站点的 MySQL/MariaDB 数据库优化

在【WordPress 到底能不能承受百万级内容?】一文里,明月给大家讲过 WordPress 网站系统能处理的内容数量其实是取决于 MySQL 的部署的,可见 MySQL 数据库对于 WordPress 站点的重要性,加上目前大部分的 WordPress 站点数据库都是以本地部署(localhost,也就是数据库和网站在同一个服务区上)的形式使用的,所以优化 MySQL 就更加的必不可少了,结合明月多年代维的经验总结出如下几条 MySQL 数据库优化的建议:

一、关闭 MySQL 的日志

MySQL 中的 binlog 日志记录了数据库中数据的变动,便于对数据的基于时间点和基于位置的恢复,但是 binlog 也会日渐增大,占用很大的磁盘空间,同时还会带来一定的 I/O 压力,理论上来说只要我们不使用 MySQL 的主从复制基本很少用到 binglog 日志,所以一般明月都会建议关闭 MySQL 的日志,只需要把 /etc/my.cnf 文件里:

log-bin=mysql-bin
binlog_format=mixed

这两行给注释掉即可,如下图所示:

#log-bin=mysql-bin
#binlog_format=mixed

然后保存退出,重启 MySQL 进程就行了。

注意,当你要使用 MySQL 的主从复制的时候一定要记得开启 MySQL 日志哦

二、开启 MySQL 的查询缓存

MySQL 和 MariaDB 都是支持“查询缓存”功能,并且启用 MySQL 查询缓存可以极大地减低数据库服务器的 CPU 使用率,实际使用情况是:开启前 CPU 使用率 120%左右,开启后降到了 10%。具体开启方法可以参考【启用 MySQL 和 MariaDB 查询缓存】一文,需要注意的是这个方法适合没有使用 Memcached、Redis 缓存数据库查询的时候使用,否则就重复了,一定要注意哦,跟下面讲的第四条冲突了,比较适合熟悉 MySQL 命令的运维人员使用,配合下面第三条效果更加,安全性也更好。建议大家根据自己服务器部署和使用情况灵活的选择和使用。

三、调整数据库 InnoDB 存储引擎的关键参数

一般我们的 MySQL 数据库在编译安装部署的时候都会让选择数据库存储引擎,比较多的选择是 InnoDB 存储引擎,这时候我们就可以在/etc/my.cnf 文件里调整 innodb_buffer_pool_size 和 innodb_buffer_pool_instances 参数来优化 MySQL 的性能。

Innodb_buffer_pool_size

innodb_buffer_pool_size 是 InnoDB 存储引擎的关键参数,用于配置 InnoDB 缓冲池的大小。

默认大小为 128M,但您应该根据服务器的物理内存进行调整。

专用数据库服务器上,可以将缓冲池大小设置为服务器物理内存的 80%。

可以动态设置,允许在不重新启动服务器的情况下调整缓冲池的大小。

Innodb_buffer_pool_instances

innodb_buffer_pool_instances 是用于配置多个缓冲池实例的参数。

默认情况下,它设置为 1,表示只有一个缓冲池实例。

当缓冲池大小大于 1G 时,将innodb_buffer_pool_instances设置为大于 1 的值可以提高服务器的可扩展性。

大的缓冲池可以减小多次磁盘 I/O 访问相同的表数据。

配置示例

假设您的服务器物理内存足够,您可以设置innodb_buffer_pool_size为 1G,并将innodb_buffer_pool_instances设置为 1。

请注意,innodb_buffer_pool_size必须是innodb_buffer_pool_instances的倍数。

在线调整

您可以使用以下语句在线调整 InnoDB 缓冲池大小:

SET GLOBAL innodb_buffer_pool_size=3221225472;--设置为 3G

监控在线缓冲池调整进度:

SHOW STATUS WHERE Variable_name='InnoDB_buffer_pool_resize_status';

性能验证

您可以通过分析 InnoDB 缓冲池的性能来验证配置是否合适。

计算 InnoDB 缓冲池命中率:

Performance=innodb_buffer_pool_reads/innodb_buffer_pool_read_requests*100

如果命中率低于 99%,可以考虑增加innodb_buffer_pool_size

可见 innodb_buffer_pool_size 和 innodb_buffer_pool_instances 参数的调整是要根据实际调试来选择的,比较适合专业运维人员选择使用,新手可以根据服务器物理内存大小适当的加大 innodb_buffer_pool_size 参数即可,

四、使用 Memcached 把数据库查询放到内存中

Memcached 其实是非常适合 LNMP 环境的站点服务器使用的,主要原因就是其简单高效的内存利用率了,这正是我们需要的,也是 Memcached 加速原理的主要表现了。Memcached 就是把需要 CPU 计算的重复性的东西都有序的保存在物理内存里以实现可以被最快的速度重复调用,让 CPU 能有更多空闲时间处理其他的运算请求,所谓的加速其实就是体现在这里而已,说白了 Memcached 是变相的给 CPU 加速了,知道 Memcached 这个原理其实就足够了。

同时,明月要再次强调一下,像我们这种站点服务器使用 Memcached 就足够了,真心没有必要选择 Redis 的,因为 Redis 更多的时候比较适用于独立数据库服务器或者集群数据库服务器上使用,具体可以参考【理智冷静的使用 Memcached 或者 Redis】一文,有专门详细的论述。

五、搭建数据库专用服务器或者云数据库

如果你的 WordPress 站点需要处理十万、百万级的内容量就要像【WordPress 到底能不能承受百万级内容?】一文里说的,必须搭建一个或者 N 个独立的数据库服务器,每个独立的数据库服务器都充分的利用物理内存缓存查询记录再通过内网跟网站服务器通信实现数据库主从复制和负载均衡来缓解数据库的实时查询压力,基本上这种部署都属于是企业级的了,成本和维护压力也是很大的,比较适合拥有专业的运维技术团队了,就不属于是咱们个人网站的范畴了。

其实 MySQL 数据库的优化无非就是缓存数据库查询记录到 Linux 物理内存里,减少 MySQL 实时查询的频率,对于我们很多个人博客站点来说,512MB 物理内存基本就可以缓存 99%以上的 MySQL 实时查询记录了,更多的时候往往都是用不完,除非你用的插件、主题里有频繁的数据库读写操作才会造成 MySQL 负载飙升的现象,所以慎用来历不明和不负责任的插件和主题也是优化数据库性能要考虑的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1669136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STC8增强型单片机开发【LED呼吸灯(PWM)⭐⭐】

目录 一、引言 二、硬件准备 三、PWM技术概述 四、电路设计 五、代码编写 EAXSFR: 六、编译与下载 七、测试与调试 八、总结 一、引言 在嵌入式系统开发中,LED呼吸灯是一种常见的示例项目,它不仅能够展示PWM(脉冲宽度调制…

解决 Content type ‘application/json;charset=UTF-8‘ not supported

文章目录 问题描述原因分析解决方案参考资料 问题描述 我项目前端采用vue-elementUi-admin框架进行开发,后端使用SpringBoot,但在前后端登录接口交互时,前端报了如下错误 完整报错信息如下 前端登录接口JS代码如下 export function login(…

Busybox 在 Docker 中的部署和启动

可以使用 docker pull 指令下载 busybox:latest 镜像: PS C:\Users\yhu> docker pull busybox:latest latest: Pulling from library/busybox ec562eabd705: Pull complete Digest: sha256:5eef5ed34e1e1ff0a4ae850395cbf665c4de6b4b83a32a0bc7bcb998e24e7bbb St…

网安面经之文件包含漏洞

一、文件包含漏洞 1、文件包含漏洞原理?危害?修复? 原理:开发⼈员⼀般希望代码更灵活,所以将被包含的⽂件设置为变量,⽤来进⾏动态调⽤,但是由于⽂件包含函数加载的参数没有经过过滤或者严格的…

Selenium 自动化 —— 一篇文章彻底搞懂XPath

更多关于Selenium的知识请访问“兰亭序咖啡”的专栏:专栏《Selenium 从入门到精通》 文章目录 前言 一、什么是xpath? 二、XPath 节点 三. 节点的关系 1. 父(Parent) 2. 子(Children) 3. 同胞(S…

LLM量化

Efficient Finetuning prefix tuning 针对每种任务,学习prefix vector 启发于prompting,调整上下文内容让模型去输出自己想要的内容 核心就是找到一个上下文去引导模型解决NLP生成任务 传统情况下,我们为了得到想要的结果,会…

1.9. 离散时间鞅-组合方法分析随机游动(不用鞅方法)

组合方法分析随机游动-不用鞅方法 组合方法分析随机游动(不用鞅方法)1. 反射原理 → \rightarrow →首击时分布2. 反正弦定律(末击时分布)组合方法分析随机游动(不用鞅方法) 本节将不使用鞅更深入地研究简单随机游动的属性,有益于过渡到马氏链的研究. 1. 反射原理

20240512,函数对象,常用算法:遍历,查找

函数对象 函数对象基本使用 重载 函数调用操作符 的类,其对象被称为函数对象;函数对象使用重载的()时,行为类似函数调用,也叫仿函数 函数对象(仿函数)本质是一个类,不是…

【GlobalMapper精品教程】080:WGS84转UTM投影

参考阅读:ArcGIS实验教程——实验十:矢量数据投影变换 文章目录 一、加载实验数据二、设置输出坐标系三、数据导出一、加载实验数据 打开配套案例数据包中的data080.rar中的矢量数据,如下所示: 查看源坐标系:双击图层的,图层投影选项卡,数据的已有坐标系为WGS84地理坐标…

opencompass实践

参考教程 https://github.com/InternLM/Tutorial/blob/camp2/opencompass/readme.md 下载opencompass,配置必要的环境之后,解压下载的数据集 cp /share/temp/datasets/OpenCompassData-core-20231110.zip /root/opencompass/ unzip OpenCompassData-co…

Smurf 攻击是不是真的那么难以防护

Smurf攻击是一种网络攻击方式,属于分布式拒绝服务(DDoS)攻击的变种。以 1990 年代流行的名为 Smurf 的漏洞利用工具命名。该工具创建的 ICMP 数据包很小,但可以击落大目标。 它利用ICMP协议中的回声请求(ping&#x…

第七次--大模型测评

在该章节中更多是体验与尝试 一、理论学习 类型:语言大模型和多模态大模型这两种是主要的类型。 挑战:要想办法建立一个全面的评价体系,还要能处理大规模的数据,并且要保证评测的准确性和可重复性,真不是一件容易的事…

Unity生命周期函数详解

Unity生命周期函数详解 Unity生命周期函数是Unity引擎中用于控制游戏对象行为的一系列方法。它们在游戏的不同阶段被自动调用,允许开发者在适当的时机执行特定的代码。了解和正确使用生命周期函数对于创建流畅和高效的游戏至关重要。 生命周期函数概述 Unity生命…

变量的解构赋值

变量的解构赋值 数组的解构赋值对象解构赋值 对象的解构与数组有一个重要的不同。嵌套结构的对象 字符串的解构赋值数值和布尔值的解构赋值函数参数的解构赋值 变量的解构赋值用途 交换变量的值从函数返回多个值函数参数的定义提取JSON数据设置默认值遍历Map和Set不完全解构输入…

TM1650 并联在I2C 信号线的处理方法

目的是可以并联多个TM1650 在标准I2C 总线上,并且不影响其他标准I2C 器件。思路就是拿个额外的开关控制每一片TM1650 的使能,就像SPI 的CS 信号那样。 协议 TM1650 的通信协议虽说不是标准I2C,但也算是比较兼容的,比方说&#x…

azkaban-tools 项目介绍

本文背景 应一个用户的好心和好奇心,在最近水深火热的百忙之中抽时间写完了一个简短的项目介绍,其实就是几个azkaban的批量操作脚本,但在大数据集群的“运维生涯”中,还是帮了自己不少忙,也算是为了它做一个简单的回顾…

SpringBoot集成jxls2实现复杂(多表格)excel导出

核心依赖 需求 导出多个表格,包含图片,类似商品标签 1.配置模板 创建一个xlsx的模板文件,配置如下 该模板进行遍历了两次,因为我想要导出的数据分为两列展示,左右布局,一个循环实现不了,所以采…

重学JavaScript高阶知识点(三)—— 详解Js中的内存管理

详解Js中的内存管理 1. 简介2. 内存生命周期3. JavaScript 的内存分配4. 垃圾回收 1. 简介 很多底层语言一般都有底层的内存管理接口,比如 C语言,可以调用对应的API去创建和释放内存空间。意思是需要手动去创建和释放内存空间,很明显&#x…

TCP服务器实现将客服端发送的信息广播发送(使用内核链表管理客户端信息)

目录 1.服务器端实现思路 2.服务器端代码 3.客户端代码 4.内核链表代码 5.运行格式 一、服务器端 二、客户端 6.效果 1.服务器端实现思路 Tcp广播服务初始化 等待客户端连接 广播发送 2.服务器端代码 #include "list.h" #include <signal.h> #def…

如何解决IntelliJ IDEA中pom.xml依赖项引发的安全漏洞黄线警告问题

背景 在开发过程中&#xff0c;当我们在pom.xml文件中添加依赖项时&#xff0c;经常会发现IntelliJ IDEA报出黄色警告线条&#xff0c;提示存在潜在的安全漏洞。警告的具体展现形式如下&#xff1a; 解决方案 首先&#xff0c;打开设置菜单界面&#xff0c;接着选择编辑器选…