写点什么

MySQL 运行在 docker 容器中会损失多少性能

作者:EquatorCoco
  • 2023-11-27
    福建
  • 本文字数:917 字

    阅读完需:约 3 分钟

前言


自从使用 docker 以来,就经常听说 MySQL 数据库最好别运行在容器中,性能会损失很多。一些之前没使用过容器的同事,对数据库运行在容器中也是忌讳莫深,甚至只要数据库跑在容器中出现性能问题时,首先就把问题推到容器上。


那么到底会损失多少,性能损失会很多吗?


为此我装了两个 MySQL,版本都是 8.0.34。一个用官网二进制包安装,另一个用 docker hub 的 MySQL 镜像安装。两个 MySQL 都运行在同一台机器,但不同时运行,先后运行测试。测试工具用的 sysbench,运行在另一台机器。


提前声明:测试流程比较简单,只是用 sysbench 测了混合读写场景,测试次数也较少,不具有权威性。感兴趣的话,可以自行完善测试流程。


如果对后文没什么兴趣,这里也可以直接说结论:单表百万级以下时,非容器和容器的性能差异并不多。单表千万级时,容器 MySQL 大概会损耗 10% ~ 20%的性能。



MySQL 配置


MySQL 安装后创建测试用的 sysbench 用户和 sysbench 数据库,调整 innodb_buffer_pool_size 为 2GB。

docker 容器的网络配置为 bridge,挂载数据目录。


sysbench 命令


  • 准备数据


sysbench --db-driver=mysql --mysql-host=192.168.3.21 --mysql-port=3306 --mysql-user=sysbench --mysql-password=123456 --mysql-db=sysbench --table_size=10000000 --tables=20 --threads=4 oltp_read_write prepare
复制代码


  • 执行测试


sysbench --db-driver=mysql --mysql-host=192.168.3.21 --mysql-port=3306 --mysql-user=sysbench --mysql-password=123456 --mysql-db=sysbench --time=300 --threads=8 --report-interval=10 oltp_read_write run
复制代码


  • 清理测试数据


sysbench --db-driver=mysql --mysql-host=192.168.3.21 --mysql-port=3306 --mysql-user=sysbench --mysql-password=123456 --mysql-db=sysbench --table_size=10000000 --tables=20 --threads=4 oltp_read_write cleanup
复制代码


测试结果


单表 1000w 数据,20 张表,测试 4 次。



平均统计:



在测千万级数据量之前,测过几轮几十万级的数据量,非容器和容器版的 MySQL 并没有多大区别。当数据量逐渐增多时,差异就愈加明显。目前测单表 1000w 已经出现 10%左右的性能损耗,如果单表数据继续增大,性能损耗应该也会更多。


文章转载自:花酒锄作田

原文链接:https://www.cnblogs.com/XY-Heruo/p/17856386.html

用户头像

EquatorCoco

关注

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
MySQL运行在docker容器中会损失多少性能_MySQL_EquatorCoco_InfoQ写作社区