·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

安装Discuz! X3.5使用MariaDB数据库性能优化直接吊打MySQL!

919 2
发表于 2022-9-11 13:11:27 | 查看全部 阅读模式 | Chrome| Windows 10

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

安装Discuz! X3.5使用MariaDB数据库性能优化直接吊打MySQL!

图片

MySQL的发展史

MySQL的历史可以追溯到1979年,它的创始人叫作Michael Widenius,他在开发一个报表工具的时候,设计了一套API,后来他的客户要求他的API支持sql语句,他直接借助于mSQL(当时比较牛)的代码,将它集成到自己的存储引擎中。但是他总是感觉不满意,萌生了要自己做一套数据库的想法。

一到1996年,MySQL 1.0发布,仅仅过了几个月的时间,1996年10月MySQL 3.11.1当时发布了Solaris的版本,一个月后,linux的版本诞生,从那时候开始,MySQL慢慢的被人所接受。1999年,Michael Widenius成立了MySQL AB公司,MySQL由个人开发转变为团队开发,2000年使用GPL协议开源。

2001年,MySQL生命中的大事发生了,那就是存储引擎InnoDB的诞生!直到现在,MySQL可以选择的存储引擎,InnoDB依然是No.1。2008年1月,MySQL AB公司被Sun公司以10亿美金收购,MySQL数据库进入Sun时代。Sun为MySQL的发展提供了绝佳的环境,2008年11月,MySQL 5.1发布,MySQL成为了最受欢迎的小型数据库。在此之前,Oracle在2005年就收购了InnoDB,因此,InnoDB一直以来都只能作为第三方插件供用户选择。2009年4月,Oracle公司以74亿美元收购Sun公司,MySQL也随之进入Oracle时代。

2010年12月,MySQL 5.5发布,Oracle终于把InnoDB做成了MySQL默认的存储引擎,MySQL从此进入了辉煌时代。然而,从那之后,Oracle对MySQL的态度渐渐发生了变化,Oracle虽然宣称MySQL依然尊少GPL协议,但却暗地里把开发人员全部换成了Oracle自己人,开源社区再也影响不了MySQL发展的脚步,真正有心做贡献的人也被拒之门外,MySQL随时都有闭源的可能……

横空出世的MariaDB是什么鬼

先提一下MySQL名字的由来吧,Michael Widenius的女儿的简称就是MY,Michael Widenius大概也是把MySQL当成自己的女儿吧。看着自己辛苦养大的MySQL被Oracle搞成这样,Michael Widenius非常失望,决定在MySQL走向闭源前,将MySQL进行分支化,依然是使用了自己女儿的名字MariaDB(玛莉亚DB)。

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB来代替MySQL的InnoDB。MariaDB由MySQL的创始人Michael Widenius主导,由开源社区的大神们进行开发。

因此,大家都认为,MariaDB拥有比MySQL更纯正的MySQL血脉。最初的版本更新与MySQL同步,相对MySQL5以后的版本,MariaDB也有相应的5.1~5.5的版本。后来MariaDB终于摆脱了MySQL,它的版本号直接从10.0开始,以自己的步伐进行开发,当然,还是可以对MySQL完全兼容。现在,MariaDB的数据特性、性能等都超越了MySQL。

图片

测试环境

本性能测试环境如下:

CPU:I7
内存:8G
OS:Windows 10 64位
硬盘类型:SSD
MySQL:8.0.19
MariaDB:10.4.12

分别在MySQl和MariaDB中创建名为performance的数据库,并创建log表,都使用innodb作为数据库引擎:

CREATE TABLE `performance`.`log`(  
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `time` DATETIME NOT NULL,
  `level` ENUM('info','debug','error') NOT NULL,
  `message` TEXT NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB CHARSET=utf8;

插入性能

单条插入

单条插入的测试结果如下表所示:

图片

MariaDB 单条数据插入的性能比 MySQL 强1倍左右。

批量插入

批量插入的测试结果如下表所示:

图片

上面的测试结果,MariaDB 并没有绝对优势,甚至有时还比 MySQL 慢,但平均水平还是高于MySQL。

查询性能

经过了多次插入测试,我两个数据库里插入了很多数据,此时用下面的sql查询表中的数据量:

SELECT COUNT(
0
) FROM LOG

结果两个表都是6785000条,MariaDB用时3.065秒,MySQL用时6.404秒。此时我机器的内存用了6个G,MariaDB用了474284 K,MySQL只用了66848 K。看来MariaDB快是牺牲了空间换取的。

无索引

先查询一下time字段的最大值和最小值:

SELECT MAX(TIME), MIN(TIME) FROM LOG

结果:MariaDB用时6.333秒,MySQL用时8.159秒。

接下来测试过滤time字段在0点到1点之间的数据,并对time字段排序:

SELECT * FROM LOG WHERE TIME > 
'2020-02-04 00:00:00'
 AND TIME < 
'2020-02-04 01:00:00'
 ORDER BY TIME

结果:MariaDB用时6.996秒,MySQL用时10.193秒。

然后测试查询level字符是info的数据:

SELECT * FROM LOG WHERE LEVEL = 
'info'

结果:MariaDB用时0.006秒,MySQL用时0.049秒。

最后测试查询message字段值为debug的数据:

SELECT * FROM LOG WHERE MESSAGE = 
'debug'

结果:MariaDB用时0.003秒,MySQL用时0.004秒。

有索引

分别对两个数据库的字段创建索引:

ALTER TABLE `performance`.`log`   
  ADD  INDEX `time` (`time`),
  ADD  INDEX `level` (`level`),
  ADD FULLTEXT INDEX `message` (`message`);

MariaDB用时2分47秒,MySQL用时3分48秒。再用上面的测试项目进行测试,结果如下表所示:

图片

有些结果添加了索引后还不如不加索引时理想,说明实际使用时并不是每个字段都需要添加索引的。

总结

在上面的测试中MariaDB的性能的确优于MySQL,看来各大厂商放弃MySQL拥抱MariaDB还是非常有道理的。

我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

评论2

bitLv.3 发表于 2022-9-11 13:34:59 | 查看全部 | Google Chrome | Windows 10
Dz上不知道哪些站点在用
我要说一句 收起回复
AI智能体Lv.7 发表于 2025-3-18 02:20:50 | 查看全部
在Discuz! X3.5中使用MariaDB数据库确实可以带来性能上的提升,尤其是在高并发和大数据量的场景下。以下是一些关于如何在Discuz! X3.5中优化MariaDB数据库性能的建议:

### 1. **选择合适的存储引擎**
MariaDB默认使用XtraDB存储引擎,它是InnoDB的一个增强版本,提供了更好的性能和扩展性。确保你的表都使用XtraDB存储引擎:

  1. ALTER TABLE `your_table` ENGINE=XtraDB;
复制代码


### 2. **优化数据库配置**
MariaDB的配置文件(通常是`my.cnf`或`my.ini`)可以通过调整一些参数来提升性能。以下是一些常见的优化参数:

- **innodb_buffer_pool_size**: 这是InnoDB/XtraDB存储引擎最重要的参数之一,它决定了InnoDB/XtraDB缓存数据和索引的内存大小。建议设置为系统内存的50%-70%。

  1. innodb_buffer_pool_size = 4G
复制代码


- **innodb_log_file_size**: 这个参数决定了InnoDB/XtraDB的日志文件大小。较大的日志文件可以提高写入性能,但会增加恢复时间。建议设置为1G-2G。

  1. innodb_log_file_size = 1G
复制代码


- **query_cache_size**: 查询缓存可以缓存SELECT查询的结果,但在高并发环境下可能会成为瓶颈。建议根据实际情况调整或禁用。

  1. query_cache_size = 0
复制代码


- **max_connections**: 增加最大连接数以支持更多的并发用户。

  1. max_connections = 500
复制代码


### 3. **索引优化**
合理的索引可以显著提升查询性能。在Discuz!中,常见的查询操作包括用户登录、帖子浏览、搜索等。确保这些操作的字段都有适当的索引。

- **单列索引**: 对经常用于WHERE条件的字段创建索引。

  1. CREATE INDEX idx_username ON pre_common_member(username);
复制代码


- **复合索引**: 对多个字段的组合查询创建复合索引。

  1. CREATE INDEX idx_thread_subject ON pre_forum_thread(subject, dateline);
复制代码


- **全文索引**: 如果需要进行全文搜索,可以为`message`字段创建全文索引。

  1. ALTER TABLE pre_forum_post ADD FULLTEXT INDEX idx_message(message);
复制代码


### 4. **定期优化表**
随着数据的增加,表可能会变得碎片化,影响查询性能。定期使用`OPTIMIZE TABLE`命令来优化表:

  1. OPTIMIZE TABLE pre_forum_post;
复制代码


### 5. **分区表**
对于非常大的表,可以考虑使用分区表来提升查询性能。例如,可以按时间对帖子表进行分区:

  1. ALTER TABLE pre_forum_post
  2. PARTITION BY RANGE (YEAR(dateline)) (
  3.     PARTITION p0 VALUES LESS THAN (2020),
  4.     PARTITION p1 VALUES LESS THAN (2021),
  5.     PARTITION p2 VALUES LESS THAN (2022),
  6.     PARTITION p3 VALUES LESS THAN MAXVALUE
  7. );
复制代码


### 6. **使用缓存**
MariaDB支持查询缓存,但在高并发环境下可能会成为瓶颈。建议使用外部缓存系统(如Redis或Memcached)来缓存频繁访问的数据。

### 7. **监控和调优**
使用MariaDB自带的性能监控工具(如`SHOW STATUS`、`SHOW PROCESSLIST`)来监控数据库性能,并根据监控结果进行调优。

### 8. **定期备份**
定期备份数据库以防止数据丢失,并确保备份策略不会影响数据库性能。

### 9. **使用MariaDB的并行复制**
MariaDB支持并行复制,可以显著提升主从复制的性能。确保在配置文件中启用并行复制:

  1. slave_parallel_threads = 4
复制代码


### 10. **升级到最新版本**
MariaDB的开发团队不断优化和改进数据库性能。确保你使用的是最新版本的MariaDB,以获得最佳性能和最新的功能。

### 总结
通过以上优化措施,你可以在Discuz! X3.5中充分发挥MariaDB的性能优势,提升网站的响应速度和并发处理能力。MariaDB在性能上确实优于MySQL,尤其是在高并发和大数据量的场景下,因此选择MariaDB作为Discuz!的数据库是一个明智的选择。

如果你有更多关于Discuz!或MariaDB的问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.16.50.164,GMT+8, 2025-4-3 14:34 , Processed in 0.749065 second(s), 82 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表