### 15.8.12 为专用 MySQL 服务器启用自动配置

什么时候[`innodb_dedicated_server`](innodb-parameters.html#sysvar_innodb_dedicated_server)已启用，`InnoDB`自动配置以下变量：

-   [`innodb_buffer_pool_size`](innodb-parameters.html#sysvar_innodb_buffer_pool_size)

-   [`innodb_log_file_size`](innodb-parameters.html#sysvar_innodb_log_file_size)

-   [`innodb_log_files_in_group`](innodb-parameters.html#sysvar_innodb_log_files_in_group)（从 MySQL 8.0.14 开始）

-   [`innodb_flush_method`](innodb-parameters.html#sysvar_innodb_flush_method)

    只考虑启用[`innodb_dedicated_server`](innodb-parameters.html#sysvar_innodb_dedicated_server)如果 MySQL 实例驻留在可以使用所有可用系统资源的专用服务器上。例如，如果您在 Docker 容器或仅运行 MySQL 的专用 VM 中运行 MySQL 服务器，请考虑启用。启用[`innodb_dedicated_server`](innodb-parameters.html#sysvar_innodb_dedicated_server)如果 MySQL 实例与其他应用程序共享系统资源，则不建议使用。

    以下信息描述了如何自动配置每个变量。

-   [`innodb_buffer_pool_size`](innodb-parameters.html#sysvar_innodb_buffer_pool_size)

    缓冲池大小根据服务器上检测到的内存量进行配置。

    [](<>)

    **表 15.8 自动配置的缓冲池大小**

    | 检测到的服务器内存 | 缓冲池大小 |
    | --------- | ----- |
    | 小于 1GB | 128MiB（默认值） |
    | 1GB 到 4GB | *`检测到服务器内存`* \*0.5 |
    | 大于 4GB | *`检测到服务器内存`* \* 0.75 |

-   [`innodb_log_file_size`](innodb-parameters.html#sysvar_innodb_log_file_size)

    从 MySQL 8.0.14 开始，日志文件大小根据自动配置的缓冲池大小进行配置。

    [](<>)

    **表 15.9 自动配置的日志文件大小**

    | 缓冲池大小 | 日志文件大小 |
    | ----- | ------ |
    | 小于 8GB | 512MiB |
    | 8GB 至 128GB | 1024MiB |
    | 大于 128GB | 2048MiB |

    笔记

    在 MySQL 8.0.14 之前，[`innodb_log_file_size`](innodb-parameters.html#sysvar_innodb_log_file_size)变量是根据服务器上检测到的内存量自动配置的，如下图：

    [](<>)

    **表 15.10 自动配置的日志文件大小（MySQL 8.0.13 及更早版本）**

    | 检测到的服务器内存 | 日志文件大小 |
    | --------- | ------ |
    | \\\< 1GB | 48MiB（默认值） |
    | \\\<= 4GB | 128MiB |
    | \\\<= 8GB | 512MiB |
    | \\\<= 16GB | 1024MiB |
    | >16 GB | 2048MiB |

-   [`innodb_log_files_in_group`](innodb-parameters.html#sysvar_innodb_log_files_in_group)

    日志文件的数量根据自动配置的缓冲池大小（以千兆字节为单位）进行配置。自动配置[`innodb_log_files_in_group`](innodb-parameters.html#sysvar_innodb_log_files_in_group)MySQL 8.0.14 中添加了变量。

    [](<>)

    **表 15.11 自动配置的日志文件数量**

    | 缓冲池大小 | 日志文件数 |
    | ----- | ----- |
    | 小于 8GB | 圆形的（*`缓冲池大小`*) |
    | 8GB 至 128GB | 圆形的（*`缓冲池大小`* \*0.75) |
    | 大于 128GB | 64 |

    笔记

    最小值[`innodb_log_files_in_group`](innodb-parameters.html#sysvar_innodb_log_files_in_group)如果四舍五入的缓冲池大小值小于 2GB，则强制值为 2。

-   [`innodb_flush_method`](innodb-parameters.html#sysvar_innodb_flush_method)

    冲洗方法设置为`O_DIRECT_NO_FSYNC`什么时候[`innodb_dedicated_server`](innodb-parameters.html#sysvar_innodb_dedicated_server)已启用。如果`O_DIRECT_NO_FSYNC`设置不可用，默认[`innodb_flush_method`](innodb-parameters.html#sysvar_innodb_flush_method)使用设置。

     `InnoDB`用途`O_DIRECT`在刷新 I/O 期间，但跳过`同步（）`每次写操作后的系统调用。

    警告

    在 MySQL 8.0.14 之前，此设置不适用于 XFS 和 EXT4 等文件系统，这些文件系统需要一个`同步（）`同步文件系统元数据更改的系统调用。

    从 MySQL 8.0.14 开始，`同步（）`在创建新文件、增加文件大小和关闭文件后调用，以确保同步文件系统元数据更改。这`同步（）`每次写入操作后仍会跳过系统调用。

    如果重做日志文件和数据文件位于不同的存储设备上，则可能会丢失数据，并且在数据文件写入从没有电池支持的设备缓存中刷新之前发生意外退出。如果您使用或打算使用不同的存储设备来存储重做日志文件和数据文件，并且您的数据文件驻留在没有电池支持的缓存的设备上，请使用`O_DIRECT`反而。

    如果在选项文件或其他地方显式配置了自动配置的选项，则使用显式指定的设置，并打印类似于此的启动警告`标准错误`：

[警告][000000]InnoDB：选项 innodb\_投入的\_服务器被 innodb 忽略\_缓冲\_水池\_大小因为innodb\_缓冲\_水池\_size=134217728 是明确指定的。

一个选项的显式配置不会阻止其他选项的自动配置。

如果[`innodb_dedicated_server`](innodb-parameters.html#sysvar_innodb_dedicated_server)已启用并且[`innodb_buffer_pool_size`](innodb-parameters.html#sysvar_innodb_buffer_pool_size)在选项文件中显式配置，[`innodb_log_file_size`](innodb-parameters.html#sysvar_innodb_log_file_size)和[`innodb_log_files_in_group`](innodb-parameters.html#sysvar_innodb_log_files_in_group)仍然根据根据服务器上检测到的内存量计算的缓冲池大小值自动配置，即使该值不用于配置缓冲池的大小。

每次启动 MySQL 服务器时，都会根据需要评估和重新配置自动配置的设置。
