如何解决Apple M1 Max上Laravel Sail的migrations与seeders运行过慢问题
M1芯片Mac Laravel Sail 迁移与填充性能问题解决方案
2021款M1芯片Mac的用户大量存在相同问题,并非个例。该问题核心瓶颈几乎都来自Docker for Mac的挂载卷IO性能损耗,和数据库的ARM架构适配关联度很低,之前调整的platform参数、更换ARM版MariaDB自然不会有明显效果。
以下是可落地的优化方案:
- 替换数据库数据目录的挂载方式,取消直接挂载本地宿主目录,改用Docker命名卷存储,修改
docker-compose.yml中mysql服务的volumes配置即可,示例如下:
# 原有性能较差的绑定挂载配置 mysql: volumes: - ./docker/mysql/data:/var/lib/mysql # 改用Docker命名卷后的配置,IO性能提升明显 mysql: volumes: - mysql_data:/var/lib/mysql # 根级新增volumes声明 volumes: mysql_data: driver: local
- 开发环境临时调整Mysql运行参数,在mysql服务的environment节点添加以下配置,可大幅降低事务提交的IO开销:
innodb_flush_log_at_trx_commit=0sync_binlog=0MYSQL_INITDB_SKIP_TZINFO=1
该配置仅建议开发环境使用,生产环境不要修改上述参数。
- 开启Docker for Mac的VirtioFS文件共享功能,该特性是官方针对Apple硅芯片优化的文件系统方案,比默认的gRPC FUSE挂载性能提升30%以上,可在Docker桌面端的设置-特性开发页面开启。
- 极致性能方案:直接在本地Mac安装ARM原生的Mysql服务,修改Laravel的数据库连接配置指向本地Mysql端口,完全规避Docker挂载的IO损耗,实测该方案可让migrations和seeders的运行速度提升5到10倍。
内容的提问来源于stack exchange,提问作者Gijs
相关产品推荐
相关产品推荐

