ITPub博客

首页 > 数据库 > > 14.6 InnoDB 配置

14.6 InnoDB 配置

作者:飘絮絮絮丶 时间:2020-05-12 10:03:48 0 删除 编辑

参考官方文档:
dev.mysql.com/doc/refma



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数据文件的原始磁盘分区(raw设备),这可能会加速I / O。
  • innodb_flush_method = async_unbuffered(默认设置)不支持在Windows上的4K扇区硬盘驱动器上运行MySQL服务器。 解决方法是使用innodb_flush_method = normal。



表空间数据文件配置


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。


为第一个系统表空间数据文件强制执行最小文件大小,以确保有足够的空间存储双倍缓冲页面:

  • 对于16KB或更小的innodb_page_size值,最小文件大小为3MB。
  • 对于32KB的innodb_page_size值,最小文件大小为6MB。
  • 对于64KB的innodb_page_size值,最小文件大小为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_log_group_home_dir定义InnoDB日志文件的目录路径(重做日志)。 如果未配置此选项,InnoDB日志文件将在MySQL数据目录(datadir)中创建。

您可以使用此选项将InnoDB日志文件放置在与InnoDB数据文件不同的物理存储位置,以避免潜在的I / O资源冲突。 例如:


[mysqld] innodb_log_group_home_dir = /dr3/iblogs


注意:
InnoDB不创建目录,因此在启动服务器之前确保日志目录存在。 使用Unix或DOS mkdir命令创建任何必需的目录。


确保MySQL服务器具有在日志目录中创建文件的正确访问权限。 更一般地说,服务器必须在任何需要创建日志文件的目录中拥有访问权限。

  • innodb_log_files_in_group定义日志组中的日志文件数量。 默认值和推荐值是2。
  • innodb_log_file_size定义日志组中每个日志文件的大小(以字节为单位)。 日志文件(innodb_log_file_size * innodb_log_files_in_group)的组合大小不能超过略小于512GB的最大值。 例如,一对255 GB的日志文件接近极限,但不超过它。 默认的日志文件大小为48MB。 通常,日志文件的组合大小应该足够大,以便服务器可以消除工作负载活动中的高峰和低谷,这通常意味着有足够的重做日志空间来处理一个多小时的写入活动。 值越大,缓冲池中所需的检查点刷新活动就越少,从而节省磁盘I / O。





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的缓冲区使用以下参数进行配置:

  • innodb_buffer_pool_size定义缓冲池的大小,缓冲池是保存InnoDB表,索引和其他辅助缓冲区缓存数据的内存区域。 缓冲池的大小对系统性能很重要,通常建议将innodb_buffer_pool_size配置为系统内存的50%到75%。 默认缓冲池大小为128MB。 有关更多指导,请参见第8.12.4.1节“MySQL如何使用内存”。 有关如何配置InnoDB缓冲池大小的信息,请参见第14.6.3.2节“配置InnoDB缓冲池大小”。 缓冲池大小可以在启动时或动态配置。

    在具有大量内存的系统上,可以通过将缓冲池分为多个缓冲池实例来提高并发性。 缓冲池实例的数量由innodb_buffer_pool_instances选项控制。 默认情况下,InnoDB创建一个缓冲池实例。 缓冲池实例的数量可以在启动时配置。


  • innodb_log_buffer_size定义了InnoDB用来写入磁盘日志文件的缓冲区大小(以字节为单位)。 默认大小是16MB。 大型日志缓冲区允许大型事务运行,而无需在事务提交之前将日志写入磁盘。 如果您有更新,插入或删除多行的事务,则可以考虑增加日志缓冲区的大小以节省磁盘I / O。 innodb_log_buffer_size可以在启动时配置。



14.6.2 为只读操作配置InnoDB


您现在可以通过在服务器启动时启用--innodb-read-only配置选项来查询MySQL数据目录位于只读介质上的InnoDB表。



如何启用


要为只读操作准备实例,请确保在将数据文件存储在只读介质之前将所有必要信息刷新到数据文件。 运行更改缓冲禁用的服务器(innodb_change_buffering = 0)并执行缓慢关机。

要为整个MySQL实例启用只读模式,请在服务器启动时指定以下配置选项:

  • --innodb-read-only=1
  • 如果该实例位于只读介质(如DVD或CD)上,或者/var目录不能被所有人写入:--pid-file=path_on_writeable_media和--event-scheduler=disabled
  • --innodb_temp_data_file_path。 此选项指定InnoDB临时表空间数据文件的路径,文件名和文件大小。 缺省设置是ibtmp1:12M:autoextend,它在数据目录中创建ibtmp1临时表空间数据文件。 要为只读操作准备实例,请将innodb_temp_data_file_path设置为数据目录之外的位置。 路径必须相对于数据目录; 例如:



--innodb_temp_data_file_path=../../../tmp/ibtmp1:12M:autoextend


使用场景
这种操作模式适用于以下情况:

  • 在只读存储介质(如DVD或CD)上的MySQL应用程序或一组MySQL数据。
  • 多个MySQL实例同时查询同一个数据目录,通常在数据仓库配置中。 您可能会使用这种技术来避免大负载的MySQL实例可能发生的瓶颈,或者您可能会使用不同的配置选项来针对各种实例调整特定种类的查询。
  • 由于安全或数据完整性原因(例如归档备份数据),查询已进入只读状态的数据。



注意:
此功能主要用于分发和部署的灵活性,而不是基于只读方面的原始性能。 有关调整只读查询性能的方法,请参见第8.5.3节“优化InnoDB只读事务”,该方法不需要使整个服务器只读。


如何工作


当服务器通过--innodb-read-only选项以只读模式运行时,某些InnoDB功能和组件将被完全减少或关闭:

  • 没有改变缓冲完成,特别是没有从更改缓冲区合并。 为了确保在为只读操作准备实例时更改缓冲区为空,请禁用更改缓冲(innodb_change_buffering = 0)并首先进行缓慢关闭。
  • 启动时没有崩溃恢复阶段。 实例必须在进入只读状态之前执行缓慢关闭。
  • 由于重做日志未用于只读操作,因此可以在将实例设置为只读之前将innodb_log_file_size设置为尽可能最小的大小(1 MB)。
  • 除I/O读取线程之外的所有后台线程均被关闭。 因此,只读实例不会遇到任何死锁。
  • 有关死锁,监视器输出等的信息不会写入临时文件。 因此,SHOW ENGINE INNODB STATUS不会产生任何输出。
  • 如果MySQL服务器以--innodb-read-only启动,但数据目录仍在可写媒体上,则root用户仍可执行DCL操作,如GRANT和REVOKE。
  • 当服务器处于只读模式时,对通常会更改写入操作行为的配置选项设置的更改不起作用。
  • 关闭执行隔离级别的MVCC处理。 所有查询都读取最新版本的记录,因为更新和删除是不可能的。
  • undo日志未被使用。 禁用innodb_undo_tablespaces和innodb_undo_directory配置选项的任何设置。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3125044/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-09-09

  • 博文量
    2646
  • 访问量
    42340