分享使用Mariadb时碰到的两个问题
MySQL新版本选型
公司早期主要用mysql5.5这个版本,今年我们把数据库配置中心搭建起来,主要推的是mysql5.6这个版本,性能和功能上都有了一定的提升,mysql5.6也能支持gtid,但是无法在线在gtid模式与普通模式之间切换,同时5.6的同步性能还是无法让人满意,只能做到在多个db的情况启动并行复制,业务上很难有这样的保证,所以一旦写操作密集的业务,同步慢就会是个严重的问题;
所以,最近一直在考虑升级MySQL,升级MySQL首先面临的一个问题就是选一个合适的版本,首先我们考虑是的采用mysql5.7,5.7今年已经连续发了多个正式版本了,目前使用范围也比较广,可以考虑在正式环境使用了。于是我们进行了线上对比测试,发现mysql5.7与我们线上的mysql5.6版本的性能有较大的差距(也许还是有些参数没有调好的原因,5.7确实要复杂很多)。
与此同时,最近公司频繁出现一些日志性存储,大多数都是采用innodb引擎,容量非常浪费,另一方面由于我们公司的标准mysql服务器容量是1.3T左右,对于一些大容量需求的业务来说,容量上也存在瓶颈,如果要保留长时间的数据就难以满足需求了。所以借此机会我们打算把这块一起考虑进去,目前Percona和Mariadb都支持Tokudb,Mariadb 10.2还是10.3也准备支持Myrocks了。
于是决定对比试一下,选择了Percona 5.7.14、Mariadb 10.1.18与我们线上的MySQL 5.6进行了对比测试,经过压测。
首先是都使用Innodb引擎的情况:
Mariadb与MySQL5.6测试结果接近
Percona 5.7.14与官方MySQL5.7的性能结果差不多,比起MySQL5.6有一定的差距(去掉performance_schema好一点,但是也有差距)。
采用Tokudb引擎测试的结果与官方声称的有差距,使用snappy压缩的情况下,insert比innodb约慢1/4,update只有innodb的一半左右。Percona性能更差,就不考虑了。
最终选型Mariadb 10.1.18,并且在线上部署了一个业务,通过这个业务慢慢试用以后,逐步推广开来。
使用Mariadb踩到的一些坑
在使用Mariadb的过程中,碰到了不少问题,这里主要提一下我碰到的两个较大的问题,供大家参考:
1、同步性能问题:
我们上的这个业务高峰期达到了9000多写操作/秒,首先面临的第一个问题就是同步性能跟不上,slave同步线程数加到了16个线程,勉强能追上,但是一旦数据库从库停一会,就有可能面临永远最不上的可能。当快绝望的时候,看了一下mariadb的官方文章(https://mariadb.com/kb/en/mariadb/parallel-replication/),Mariadb的并行复制支持好几种模式,其中有in-order和out-of-order两种,不过我们这个业务支持in-order,所以没考虑out-of-order,在in-order模式下,又支持两种:Conservative 和 Optimistic,缺省情况下Conservative ,这种并行模式会严格保证事物的顺序性,估计和5.7的group commit原理差不多;而Optimistic模式下,复制的时候会尽量启动更多的会话,直到发现冲突时才会去处理冲突。果断试了一下Optimistic,非常强劲,最高同步速度达到了14000次/秒。
2、"内存泄露"
系统部署结构为:两个Mariadb做成主主复制,在前面部署了一个自己开发的分布式数据库,业务方连接到分布式数据库进程。系统上线了几天,发现主库会莫名其妙的挂掉,好在有分布式数据库,并且会自动切换,Mariadb主库挂了,会自动切到另外一个主库上,业务方没有感知。查看内核日志,发现是OOM了,内核把MySQL杀掉了。
于是开始了各种尝试,去掉Tokudb引擎配置,换Mariadb 10.1.19 ,都尝试过,最终都会发生主库挂掉的事情。一次偶然的机会,我把主库上的slave停掉了,发现主库的内存突然下降好多,并且内存不再增加了,但是一旦把主库上的slave启动就会发现,内存又逐渐身高。这种现象很像mysql线程内的内存分配机制造成的(基于mem_root的内存分配,线程停掉会全部释放),所以初步怀疑是这个原因造成的。发现作为双主中的另外一个Mariadb,就不会出现内存上涨的问题。
发现上面的现象以后,就开始代码上的调试,用gdb启动一个mariadb,另外一个用普通命令启动,这两个库做成双主:
第一种情况:测试作为从库的时候,接收到的binlog事件情况
在普通命令启动的mariadb上插入一行数据,gdb查看接收到的事件的顺序如下:
### i ) Gtid_log_event ### ii) Table_map_log_event ### iii) Write_rows_log_event ### iv) Xid_log_event
第二种情况:测试作为主库的时候,接收到的binlog事件
在gdb启动的mariadb上插入一行记录,然后gdb观察接收到的事件为:
### 1)Rotate_log_event ### 2)Gtid_list_log_event ### 3)Rotate_log_event
Rotate_log_event事件是虚拟出来的,用于让主库跟上从库的同步位置,这基本上是一个空事件,没有做任何处理,所以初步怀疑是在处理Gtid_list_log_event事件的时候,出现了问题。
反复查看Gtid_list_log_event::do_appy_event函数中的调用情况,发现确实有些方法会调用thd->alloc来分配内存,但是没有回收,所以造成内存不断的增大,我考虑了一下,因为是主库对于同步性能要求也不高,所以在Gtid_list_log_event::do_apply_event函数的最后加了一行代码:free_root(thd->mem_root, MYF(MY_KEEP_PREALLOC)); 重新编译后,跑了一天,内存终于稳定了。
由于目前发现只有主库有该事件,主库同步处理性能要求不高,所以暂时先这样用着了。不知道mariadb官方版本什么时候会优化一下。
总体来看,Mariadb还是比较适合我们公司的,它有最新的功能、特性能够给我们提供很多解决方案。Tokudb可以解决日志型存储的问题;连接池可以解决大量连接情况下性能地下的问题;审计插件提供安全方面的审核;slave并发模式能够提供高性能的复制能力。除了这些常见功能以外,Mariadb还提供了Cassandra插件、图数据库插件等等,这些都给我们给业务的服务增加了想象力。
【相关推荐】
2. MySQL最新手册教程
3. 数据库设计那些事
以上是分享使用Mariadb时碰到的两个问题的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

聚类算法中的聚类效果评估问题,需要具体代码示例聚类是一种无监督学习方法,通过对数据进行聚类,将相似的样本归为一类。在聚类算法中,如何评估聚类的效果是一个重要的问题。本文将介绍几种常用的聚类效果评估指标,并给出相应的代码示例。一、聚类效果评估指标轮廓系数(SilhouetteCoefficient)轮廓系数是通过计算样本的紧密度和与其他簇的分离度来评估聚类效

iPhone以其强大的性能和多方面的功能而闻名,它不能幸免于偶尔的打嗝或技术困难,这是复杂电子设备的共同特征。遇到iPhone问题可能会让人感到沮丧,但通常不需要警报。在这份综合指南中,我们旨在揭开与iPhone使用相关的一些最常遇到的挑战的神秘面纱。我们的分步方法旨在帮助您解决这些常见问题,提供实用的解决方案和故障排除技巧,让您的设备恢复到最佳工作状态。无论您是面对一个小故障还是更复杂的问题,本文都可以帮助您有效地解决这些问题。一般故障排除提示在深入研究具体的故障排除步骤之前,以下是一些有助于

解决jQuery.val()无法使用的问题,需要具体代码示例对于前端开发者,使用jQuery是常见的操作之一。其中,使用.val()方法来获取或设置表单元素的值是非常常见的操作。然而,在一些特定的情况下,可能会出现无法使用.val()方法的问题。本文将介绍一些常见的情况以及解决方案,并提供具体的代码示例。问题描述在使用jQuery开发前端页面时,有时候会碰

如龙8酒类大师考试涉及的问题包括哪些?对应的答案是什么?如何快速通过考试?酒类大师考试活动中有许多需要回答的问题,我们可以参考答案来解决。这些问题都涉及到酒的知识。如果需要参考,让我们一起来看看如龙8酒类大师考试问题答案的详细解析!如龙8酒类大师考试问题答案详解1、关于“酒”的问题。这是一种管由王室建立的蒸馏洒厂生产的蒸馏酒,以夏威夷大量种植的甘盘的糖分为原料酿制。请问这种酒叫什么?答:朗姆酒2、关于“酒”的问题。图片上是一种使用干琴洒和干苦艾酒调配而成的酒。它的特点是加入了橄榄,被誉为“鸡尼酒

不少用户都尝试更新了win11系统,结果发现更新完后开始菜单无法使用了,这可能是因为最新的更新出现了问题,我们可以等待微软修复或者卸载这些更新来解决,下面就一起来看一下解决方法吧。win11安装后开始菜单无法使用怎么办方法一:1、首先在win11中打开控制面板。2、然后点击程序下方的“卸载程序”按钮。3、进入卸载界面,在左上角找到“查看已安装的更新”4、进入之后在更新信息中可以查看更新时间,将最近的更新全部卸载即可。方法二:1、此外,我们还可以直接下载不带更新的win11系统。2、这是一款没有最

DockerCompose、Nginx和MariaDB的最佳实践:部署PHP应用程序的监控与优化引言:在现代应用程序开发中,容器化已经成为一种流行的方式,能够帮助我们更好地管理和部署应用程序。而DockerCompose则是一种用于定义和运行多个容器的工具,它能够简化应用程序的部署和管理过程。本文将介绍如何使用DockerCompose结合Nginx和

物华弥新已经确定将于2月28日进行破局测试,本次主要为大家解决破局测试的常见问题,包括曾经参与过之前的测试这次有资格吗、测试的开启和结束、预下载时间、支持哪些设备平台等内容,一起来看看吧。物华弥新破局测试常见问题解答:2月28日,我们期待您的到来!1、「破局测试」的性质为?本次测试为安卓限量计费删档测试,测试结束后,本次测试的游戏数据将被删除。2、曾经参与过「开局测试」或「入局测试」,这次拥有参与「破局测试]的资格吗?如您曾参与过「开局测试」、「入局测试」,请扫描下方二维码前往“致曾参与内测玩家

MariaDB是一个开源多线程的关系数据库管理系统,是MySQL的替代品。MariaDB是Debian中MySQL的默认替换方案。本教程介绍如何在Debian12上安装MariaDB。准备条件1、一台安装了Debian12的VPS虚拟机(推荐您购买一台阿里云VPS或者腾讯云VPS虚拟主机,如果你更喜欢国外服务器,推荐你尝试Vultr上的VPS,注册即送$50美元体验,性价比非常高),当然你自己电脑或者虚拟机中也可以。2、如果使用VPS,基于安全考虑,建议使用非root账号,可以在Debian12
