首页 > 数据库 > > 14.6 InnoDB 配置
参考官方文档:
https://dev.mysql.com/doc/refman/5.7/en/innodb-configuration.html
14.6.1 InnoDB 启动配置
有关InnoDB配置的第一个决定涉及数据文件,日志文件,页面大小和内存缓冲区的配置。 建议您在创建InnoDB实例之前定义数据文件,日志文件和页面大小配置。 在创建InnoDB实例后修改数据文件或日志文件配置可能涉及一个不平滑的过程,并且页面大小只能在InnoDB实例初次初始化时定义。
除这些主题外,本节还提供有关在配置文件中指定InnoDB选项,查看InnoDB初始化信息以及重要的存储注意事项的信息。
在MYSQL 配置文件中指定选项
由于MySQL使用数据文件,日志文件和页面大小配置设置来初始化InnoDB实例,因此建议您在初始化InnoDB之前在启动时读取的配置文件中定义这些设置。 当MySQL服务器启动时,InnoDB被初始化,并且InnoDB的第一次初始化通常在您首次启动MySQL服务器时发生。
您可以将InnoDB选项放置在服务器启动时读取的任何选项文件的[mysqld]组中。
查看InnoDB 初始化信息
要在启动期间查看InnoDB初始化信息,请从命令提示符处启动mysqld。 当从命令提示符启动mysqld时,初始化信息将打印到控制台。
例如,在Windows上,如果mysql位于C:\Program Files\MySQL\MySQL Server 5.7\bin中,请启动MySQL服务器,如下所示:
C:\> "C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld" --console
在类Unix系统上,mysqld位于MySQL安装的bin目录中:
shell> bin/mysqld --user=mysql &
如果您没有将服务器输出发送到控制台,请在启动后检查错误日志,以查看启动过程中打印的初始化信息InnoDB。
注意:
InnoDB在启动时不会打开所有的用户表和关联的数据文件。 但是,InnoDB会检查数据字典中引用的表空间文件(* .ibd文件)是否存在。 如果没有找到表空间文件,InnoDB会记录一个错误并继续启动顺序。 重做日志中引用的表空间文件可能在重做应用程序的崩溃恢复期间打开。
重要的存储注意事项
继续进行启动配置之前,请查看以下与存储相关的注意事项。
表空间数据文件配置
innodb_data_file_path配置选项定义了InnoDB系统表空间数据文件的名称,大小和属性。 如果您没有为innodb_data_file_path指定值,则缺省行为是创建一个稍大于12MB的自动扩展数据文件,名称为ibdata1。
要指定多个数据文件,请用分号(;)字符分隔它们:
innodb_data_file_path=datafile_spec1[;datafile_spec2]...
以下设置配置名为ibdata1的单个12MB数据文件,该文件是自动扩展的。 没有给出该文件的位置,所以默认情况下,InnoDB在MySQL数据目录中创建它:
[mysqld] innodb_data_file_path=ibdata1:12M:autoextend
使用K,M或G后缀字母指定文件大小,以指示KB,MB或GB的单位。 如果以千字节(KB)为单位指定数据文件大小,请以1024的倍数进行此操作。否则,将KB值四舍五入为最接近兆字节(MB)的边界。 文件大小的总和必须至少略大于12MB。
为第一个系统表空间数据文件强制执行最小文件大小,以确保有足够的空间存储双倍缓冲页面:
具有名为ibdata1的固定大小的50MB数据文件的系统表空间和名为ibdata2的50MB自动扩展文件可以像这样配置:
[mysqld] innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
如果为最后一个数据文件指定自动扩展选项,InnoDB将扩展数据文件,如果数据文件耗尽表空间中的可用空间。 默认情况下,自动扩展增量一次为64MB。 要修改增量,请更改innodb_autoextend_increment系统变量。
如果磁盘已满,则可能需要在另一个磁盘上添加另一个数据文件。 有关说明,请参见第14.7.1节“调整InnoDB系统表空间的大小”。
单个文件的大小限制取决于您的操作系统。 在支持大文件的操作系统上,您可以将文件大小设置为4GB以上。 您还可以使用raw磁盘分区作为数据文件。
InnoDB不知道文件系统的最大文件大小,因此对于最大文件大小为2GB等较小值的文件系统要小心。 要指定自动扩展数据文件的最大大小,请在autoextend属性后面使用max属性。 仅在限制磁盘使用率至关重要的情况下才使用max属性,因为超过最大大小会导致致命错误,可能导致服务器退出。 以下配置允许ibdata1增长到500MB的限制:
[mysqld] innodb_data_file_path=ibdata1:12M:autoextend:max:500M
InnoDB在默认情况下(datadir)在MySQL数据目录中创建系统表空间文件。 要明确指定位置,请使用innodb_data_home_dir选项。 例如,要在名为myibdata的目录中创建两个名为ibdata1和ibdata2的文件,请像这样配置InnoDB:
[mysqld]
innodb_data_home_dir = /path/to/myibdata/ innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
注意:
指定innodb_data_home_dir的值时需要尾部斜线。
InnoDB不会创建目录,因此在启动服务器之前确保myibdata目录存在。 使用Unix或DOS mkdir命令创建目录。
确保MySQL服务器具有在数据目录中创建文件的正确访问权限。 更一般地说,服务器必须在任何需要创建数据文件的目录中拥有访问权限。
InnoDB通过将innodb_data_home_dir的值以文本方式连接到数据文件名称来形成每个数据文件的目录路径。 如果未指定innodb_data_home_dir选项,则缺省值是“dot”目录./,这意味着MySQL数据目录。 (MySQL服务器在开始执行时将其当前工作目录更改为其数据目录。)
如果将innodb_data_home_dir指定为空字符串,则可以为innodb_data_file_path值中列出的数据文件指定绝对路径。 以下示例等同于上述示例:
[mysqld]
innodb_data_home_dir = innodb_data_file_path=/path/to/myibdata/ibdata1:50M;/path/to/myibdata/ibdata2:50M:autoextend
InnoDB LogFile 配置
默认情况下,InnoDB在名为ib_logfile0和ib_logfile1的MySQL数据目录(datadir)中创建两个48MB日志文件。
以下选项可用于修改默认配置:
您可以使用此选项将InnoDB日志文件放置在与InnoDB数据文件不同的物理存储位置,以避免潜在的I / O资源冲突。 例如:
[mysqld] innodb_log_group_home_dir = /dr3/iblogs
注意:
InnoDB不创建目录,因此在启动服务器之前确保日志目录存在。 使用Unix或DOS mkdir命令创建任何必需的目录。
确保MySQL服务器具有在日志目录中创建文件的正确访问权限。 更一般地说,服务器必须在任何需要创建日志文件的目录中拥有访问权限。
InnoDB Undo 表空间配置
默认情况下,InnoDB撤消日志是系统表空间的一部分。 但是,您可以选择将InnoDB撤消日志存储在一个或多个单独的撤消表空间中,通常位于不同的存储设备上。
innodb_undo_directory配置选项定义了InnoDB为撤消日志创建单独的表空间的路径。 此选项通常与innodb_rollback_segments和innodb_undo_tablespaces选项一起使用,这些选项决定系统表空间外的撤销日志的磁盘布局。
注意:
innodb_undo_tablespaces已被弃用,并将在未来版本中删除。
InnoDB Temporary 表空间配置
默认情况下,InnoDB在innodb_data_home_dir目录中创建一个名为ibtmp1的自动扩展临时表空间数据文件,该数据文件略大于12MB。 可以在启动时使用innodb_temp_data_file_path配置选项修改默认的临时表空间数据文件配置。
innodb_temp_data_file_path选项指定InnoDB临时表空间数据文件的路径,文件名和文件大小。 文件的完整目录路径是通过将innodb_data_home_dir连接到由innodb_temp_data_file_path指定的路径而形成的。 通过将K,M或G附加到大小值中指定文件大小,以KB,MB或GB(1024MB)表示。 文件大小的总和必须略大于12MB。
innodb_data_home_dir的缺省值是MySQL数据目录(datadir)。
在使用大型临时表或广泛使用临时表的环境中,自动扩展临时表空间数据文件可能会变大。 长时间运行的使用临时表的查询也可能导致大型数据文件。 要防止临时数据文件变得过大,请配置innodb_temp_data_file_path选项以指定最大数据文件大小。
InnoDB页面大小配置
innodb_page_size选项指定MySQL实例中所有InnoDB表空间的页面大小。 该值在创建实例时设置,并在此后保持不变。 有效值为64k,32k,16k(默认值),8k和4k。 或者,您可以以字节为单位指定页面大小(65536,32768,16384,8192,4096)。
16k的默认页面大小适用于各种工作负载,特别是涉及涉及批量更新的表扫描和DML操作的查询。 对于涉及许多小写入的OLTP工作负载,较小的页面大小可能更有效,当单个页面包含多行时,争用可能成为问题。 较小的页面对于SSD存储设备也可能是有效的,SSD存储设备通常使用小块大小。 保持InnoDB页面大小接近存储设备块大小,可将重写到磁盘的未更改数据量减到最少。
InnoDB内存配置
MySQL为各种缓存和缓冲区分配内存以提高数据库操作的性能。 为InnoDB分配内存时,请始终考虑操作系统所需的内存,分配给其他应用程序的内存以及分配给其他MySQL缓冲区和高速缓存的内存。 例如,如果使用MyISAM表,请考虑为键缓冲区分配的内存量(key_buffer_size)。
特定于InnoDB的缓冲区使用以下参数进行配置:
14.6.2 为只读操作配置InnoDB
您现在可以通过在服务器启动时启用--innodb-read-only配置选项来查询MySQL数据目录位于只读介质上的InnoDB表。
如何启用
要为只读操作准备实例,请确保在将数据文件存储在只读介质之前将所有必要信息刷新到数据文件。 运行更改缓冲禁用的服务器(innodb_change_buffering = 0)并执行缓慢关机。
要为整个MySQL实例启用只读模式,请在服务器启动时指定以下配置选项:
--innodb_temp_data_file_path=../../../tmp/ibtmp1:12M:autoextend
使用场景
这种操作模式适用于以下情况:
注意:
此功能主要用于分发和部署的灵活性,而不是基于只读方面的原始性能。 有关调整只读查询性能的方法,请参见第8.5.3节“优化InnoDB只读事务”,该方法不需要使整个服务器只读。
如何工作
当服务器通过--innodb-read-only选项以只读模式运行时,某些InnoDB功能和组件将被完全减少或关闭:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3125044/ ,如需转载,请注明出处,否则将追究法律责任。