Manjaro系统下MariaDB运行Laravel数据库填充速度过慢原因问询
导致填充速度过慢的可能原因
1. 存储IO瓶颈
- 你的Manjaro运行在HDD上,而之前的WAMP环境大概率使用SSD,两类存储的随机写入IOPS差距可达数十倍。MariaDB默认配置下每次插入都会触发磁盘刷写,单条插入的场景下HDD的IO上限很容易被打满,直接限制插入速度。
- 可执行
iostat -x 1命令查看磁盘使用率,如果持续跑满100%即可确认是IO瓶颈,同时排查是否有后台更新、文件索引等其他进程占用磁盘IO资源。
2. MariaDB配置差异
- Manjaro官方源安装的MariaDB默认是通用安全导向的配置,而WAMP集成环境的数据库默认做了开发场景的性能优化,核心差异参数包括:
- innodb_flush_log_at_trx_commit:默认值为1,每次事务提交都会强制刷日志到磁盘,开发环境可临时改为0或2,写入性能会有明显提升
- innodb_buffer_pool_size:默认值通常很小,无法缓存插入过程中的索引、数据页,导致每次写入都需要额外读磁盘,建议调整为物理内存的50%~70%
- 可能额外开启了慢查询日志、通用操作日志,增加了不必要的磁盘写入开销
- 确认目标表的存储引擎和WAMP环境一致,MyISAM的批量插入性能在HDD上远高于默认配置的InnoDB,但不支持事务。
3. Laravel填充逻辑差异
- 如果你的Seeder使用循环单条
Model::create()插入,每次调用都会单独开启事务,产生大量IO请求,这种模式在SSD上的性能损耗不明显,但在HDD上会被放大。建议改成批量插入,调用Model::insert()一次性传入数百到数千条数据的数组,大幅减少事务和IO次数。 - 检查Manjaro下的PHP是否开启了opcache,未开启的情况下Laravel代码执行效率会下降,也会拉长整体填充耗时。
- 确认Laravel数据库连接走Unix Socket而非TCP连接,TCP连接的额外开销在大量小请求场景下会被放大。
4. 系统配置差异
- 检查HDD的挂载参数,是否开启了
noatime、nodiratime,未开启的话每次写入都会更新文件访问时间,增加额外的写入开销。 - 检查磁盘调度器配置,HDD建议使用bfq调度器,关闭透明大页也能进一步提升MariaDB的写入性能。
内容的提问来源于stack exchange,提问作者liana
相关产品推荐
相关产品推荐

