我在具有 NVME 存储 (2TB) 和 64 GB 内存的 8 核服务器上运行它。
磁盘速度极快,1.1 GB/秒 seq 和 70-100k IOPS 全双工。
因为 mysql 5.7 的性能太差,所以我在一个纤薄的 docker 容器上安装了 Mariadb 10.3.8。
我总共有 2 TB 和 10 亿行大小的表要写。但是让我明确一点:这种速度性能发生在前几千行的空磁盘上,与大表无关。
在过去的一周里,我日夜投入了大约50 个小时的工作,阅读了我能找到的每个文档页面以及各种平台上的数百个指南和问题。
我对它进行了全面测试,几乎可以采用任何您能想到的组合。
我尝试了纯内存缓冲,纯磁盘缓冲,有和没有大日志,日志缓冲区,各种刷新方法,不刷新,所有这些设置你可以想到。
我使用以下 方法测试了导入: mydumper、mysql 控制台、mysqlimport、加载数据 infile、PHP 插入、我编写的多线程 PDO 脚本。
我测试了有索引和没有索引的表,只有主索引。
我尝试使用和不使用 TRANSACTIONS导入,尝试单行和多行插入。
我尝试了不同的表类型,通常是 20-30 列,主要包含 varchars 和一些日期时间。
单线程的性能是 3-5k 行/秒,多线程(荒谬..)10-25k/秒。CPU和DISK大多一直处于空闲状态,iostat显示3-20mb/sec的写入性能,通常在7mb-12mb左右。取决于我尝试的设置。
所以比它应该执行的速度慢大约 100 倍,没有什么明显的阻碍它。
这是当前的配置:
innodb_buffer_pool_size = 14G
innodb_buffer_pool_chunk_size=1G
innodb_log_buffer_size = 32M
innodb_file_per_table = 1
innodb_open_files = 600 …Run Code Online (Sandbox Code Playgroud) 已经连续坐了 12 个小时(现在是中午,所以当我再次醒来时我会阅读/回复)。
我犯了一个大错误,建议升级我们的生产环境的数据库以提高性能。
我们不能回去,它有将近 6 TB 的存储空间,而且 mysql 8.0 无法降级。
使用升级前快照备份也不是解决方案(工作天数)。
我想解决将服务器切换到最新版本导致的可怕性能
一些细节:
环境:Linux Stretch on AWS i3.8xlarge(32 cpu,240gb ram)
服务器:mysql/Docker 容器中的 Mysql 8.0,使用绑定安装和主机网络
存储:Amazon AWS EBS IO1 存储(6 TB),预留 20,000 IOPS .
存储在 fio 测试中提供 500mb/sec-600mb/sec。
CPU:通常 32 核使用 50-60%,但自 mysql 8.0 以来它处于空闲状态(使用 10-15%)
RAM:200GB 专用于 mysql,在 8.0 之前不久就被使用了。现在需要好几个小时,mysql 才能填满缓冲区。
核心问题:
速度比5.7下降了20倍左右
Innodb/mysql 没有有效地使用磁盘。
使用它以 15 mb/sec 读取的原始配置(简单计数需要几分钟才能运行,因为 IBD 文件未正确读取)
我已经禁用了性能模式,这有助于至少以 10% 的负载再次运行服务器。
我禁用了 bin 日志记录,也许这有帮助,但不确定。
我尝试将读/写线程增加到 64(这完全停止了服务器)
我花了 8 个小时来尝试调整 mysql 配置,我设法将 …