mysqld
max_allowed_packet=64M #导入数据是单表数据较大设置 128M /256M
innodb_log_file_size=2048M #单表字段过多设置Row size too large (> 8126)解决
innodb_strict_mode=0 #单表字段过多设置Row size too large (> 8126)解决
InnoDB 性能优化
innodb_buffer_pool_size = 24G
innodb_buffer_pool_instances = 8
innodb_log_file_size = 2G
innodb_log_files_in_group = 2
innodb_log_buffer_size = 128M
推荐的性能优化参数
在核心参数的基础上,针对 InnoDB 存储引擎进行优化,能显著提升数据库性能。以下参数适用于中高负载场景,建议在测试环境验证后应用。
-
内存相关:
- **
innodb_buffer_pool_size** : InnoDB 缓冲池大小,决定了数据和索引的缓存能力。建议设置为服务器物理内存的 **60%-80%**。例如,32GB 内存的服务器可设置为 20G--24G。 - **
innodb_buffer_pool_instances** : 缓冲池分区数量,可提高并发性能。当缓冲池大于 1GB 时,建议设置为 4--8。
- **
-
日志相关:
- **
innodb_log_file_size** : 单个重做日志文件的大小。建议设置为 1GB--4GB,较大的日志文件可减少写入压力,但会延长崩溃恢复时间。 - **
innodb_log_files_in_group** : 日志文件组数量,通常设置为 2。 - **
innodb_log_buffer_size** : 日志缓冲区大小。对于写入频繁的场景,建议设置为 64M--256M。 - **
innodb_flush_log_at_trx_commit** : 事务提交时日志刷盘策略。1 (默认,最安全)、2 (性能较好,可能丢失1秒数据)、0 (性能最高,最不安全)。生产环境通常建议设为 2 以平衡性能与安全。
- **
-
IO 相关:
- **
innodb_flush_method** : 文件刷盘方式。推荐设置为 **O_DIRECT**,可减少文件系统缓存对内存的影响。 - **
innodb_io_capacity** : 指定后台任务的 IO 能力。机械硬盘建议设为 200--1000 ,SSD 可设为 2000--10000。 - **
innodb_io_capacity_max** : 高负载时的最大 IO 能力。SSD 可设置为 8000 或更高。
- **
-
并发与线程:
- **
innodb_thread_concurrency** : InnoDB 后台线程并发数,建议设置为 CPU 核心数的 2 倍。 - **
innodb_read_io_threads/innodb_write_io_threads** : 读写 IO 线程数,建议各设置为 4--8。 - **
innodb_autoinc_lock_mode** : 自增锁模式。高并发插入场景建议设置为 2(交错模式)。
- **