第 38.1 节:InnoDB 性能
可以在 my.cnf 中设置数百个参数。对于 MySQL 的“轻量级”用户而言,它们的影响不大。
一旦你的数据库变得非平凡,建议设置以下参数:
innodb_buffer_pool_size
应设置为可用 RAM 的约 70%(如果你至少有 4GB 的 RAM;如果使用非常小的虚拟机或老旧机器,则使用较小的百分比)。此设置控制 InnoDB 引擎使用的缓存量。因此,它对 InnoDB 的性能非常重要。
第 38.2 节:允许插入大量数据的参数
如果你需要在列中存储图像或视频,则应根据应用需要更改该值:
max_allowed_packet = 10M
M 表示 MB,G 表示 GB,K 表示 KB。
第 38.3 节:增加 group_concat 的字符串长度限制
group_concat 用于连接组内的非空值。可以使用 group_concat_max_len 选项设置结果字符串的最大长度:
SET [GLOBAL | SESSION] group_concat_max_len = val;
设置 GLOBAL 变量将确保永久更改,而设置 SESSION 变量将仅为当前会话设置该值。
第 38.4 节:最小的 InnoDB 配置
这是使用 InnoDB 表的 MySQL 服务器的基本最低配置。使用 InnoDB 时,不需要查询缓存。当删除表或数据库时回收磁盘空间。如果你使用 SSD,刷新是冗余操作(SSD 不是顺序的)。
default_storage_engine = InnoDB
query_cache_type = 0
innodb_file_per_table = 1
innodb_flush_neighbors = 0
并发性
通过将 innodb_thread_concurrency 设置为无穷大(0),确保可以创建超过默认 4 个线程;这允许 InnoDB 基于最佳执行来决定。
innodb_thread_concurrency = 0
innodb_read_io_threads = 64
innodb_write_io_threads = 64
硬盘利用率
设置 MySQL 的容量(正常负载)和 capacity_max(绝对最大值)的 IOPS。默认 200 对于 HDD 来说没问题,但如今 SSD 能够达到数千 IOPS,你可能希望调整此数字。你可以运行许多测试来确定 IOPS。如果运行专用 MySQL 服务器,上述值应几乎达到该限制。如果同一台机器上运行任何其他服务,应相应分配。
innodb_io_capacity = 2500
innodb_io_capacity_max = 3000
RAM 利用率
设置 MySQL 可用的 RAM。虽然经验法则是 70-80%,但这实际上取决于你的实例是否专用于 MySQL,以及有多少 RAM 可用。如果你有大量 RAM,不要浪费 RAM(即资源)。
innodb_buffer_pool_size = 10G
第 38.5 节:安全的 MySQL 加密
默认加密 aes-128-ecb 使用电子密码本(ECB)模式,这是不安全的,不应使用。相反,将以下内容添加到你的配置文件中:
block_encryption_mode = aes-256-cbc