NoteDeep

推荐在创建InnoDb数据库之前定义好数据文件、日志文件和页大小。
在InnoDb数据库创建之后,再去更改数据和日志文件的话,会涉及到非常规的过程(不太好),并且page size (页大小)只能在InnoDB数据库初始化的时候定义。

在Mysql配置文件中指定配置

因为mysql使用data file, log file和页大小配置来初始化InnoDB数据库,所以推荐在配置文件中指定这些配置,InnoDB在初始化之前会读取它们,而InnoDB在mysql Server启动的时候就会被初始化。

InnoDB的第一次初始化通常是在你第一次启动Mysql Server的时候。
InnoDB的配置放在 [mysqld] 组中,mysql server会读取这些。

确定mysqld 使用的是某个配置文件,使用 --defaults-file 作为第一个命令参数,当开启server的时候。
mysqld --defaults-file=path_to_configuration_file

查看InnoDB初始化信息

在windows上:
C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld" --console
在类Unix上:
sell> bin/mysqld --user=mysql &

重要的存储事项

  • 在一些情况下,把数据放在不同的物理硬盘上可以提升mysql的性能。把日志文件和数据放在不同的硬盘上总是会对性能有好处。举个例子,你可以把系统表空间文件和日志文件放在不同的硬盘上。你也可以使用raw disk partitions来存放InnoDB data files,这样可以加速I/O.
  • 许多操作系统或磁盘子系统可能会延迟或重新排序写操作以提高性能。操作系统崩溃或断电可能会破坏最近提交的数据,或者在最糟糕的情况下,由于写入操作被重新排序,甚至会损坏数据库。
  • InnoDB使用双写缓存,可以保障数据的崩溃恢复。并且通过减少fsync() 操作,提升操作系统的性能。建议保持InnoDB双写缓存开启。

系统表空间数据文件配置


innodb_data_file_path 配置是用来配置InnoDB系统表空间数据文件的。

[mysqld] innodb_data_file_path=ibdata1:12M:autoextend
以上配置了一个12MB的data file名称为 ibdata1 并且是自动扩增的。 没有配置位置,所以默认InnoDB把它放在 MySQL data 目录.
大小通过K、M、G指定

[mysqld] innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend

这个包含了一个固定大小50MB的数据文件ibdata1,并且还有50MB的ibdata2,它能自动扩增。
语法:
file_name:file_size[:autoextend[:max:max_file_size]]
autoextendmax 属性只能用在最后一个data file上面。
如果你配置了autoextend,当data file耗尽了表空间时,InnoDB会扩增。每次默认增长64MB。可以通过innodb_autoextend_increment 来改变每次增长的量。
如果硬盘满了,你可能希望添加一个data file到另一块磁盘上。

[mysqld] innodb_data_file_path=ibdata1:12M:autoextend:max:500M
这个配置允许ibdata file最多增长到500M

[mysqld] innodb_data_home_dir = /path/to/myibdata/ innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
这个配置允许改变data file的存放路径。


[mysqld] innodb_data_home_dir = innodb_data_file_path=/path/to/myibdata/ibdata1:50M;/path/to/myibdata/ibdata2:50M:autoextend
以上配置留空了home_dir, 那么file_path就可以使用绝对路径了。


InnoDB日志文件配置

默认地,InnoDB创建两个48MB的日志文件,默认在mysql datadir中。名为ib_logfile0ib_logfile1
  • innodb_log_group_home_dir 定义了日志文件的路径。你也许可以通过这个配置,把InnoDB日志文件放到与Data file不同的物理磁盘上,来避免潜在的I/O资源冲突。比如: [mysqld] innodb_log_group_home_dir = /dr3/iblogs
  • innodb_log_files_in_group定义了日志文件的数目,默认推荐 2.
  • innodb_log_file_size 定义每个日志文件的大小, innodb_log_file_size * innodb_log_files_in_group 不能超过512GB。总的日志文件大小默认是 48*2=96M,日志文件应该保证足够大,来应对平时的工作,意味着有足够的redo log空间。

InnoDB Undo 表空间配置

默认地,undo logs是系统表空间的一部分。然而,你可以选择把undo logs存在一个或多个单独的undo tablespaces里面,一般放在不同的存储设备上。
innodb_undo_directory 配置定义了undo logs的路径,通常和innodb_rollback_segments 和 innodb_undo_tablespaces一起使用,这些决定了系统表空间外的undo logs在硬盘中的分布。

InnoDB Page Size 配置

innodb_page_size项指定了所有InnoDB表空间的page size大小,并且在数据库被创建之后就一直保持不变。可以为 16k(默认)/8k/4k.
默认的16k 适合大范围的负载,尤其是一些查询涉及到表扫描,和DML操作涉及到修改整块的时候。
小的page size对于涉及到小的写操作、更高效,减少争用。小的page size对于SSD存储设备更高效。

InnoDB 内存配置

  • innodb_buffer_pool_size 定义了缓存池的大小,缓存池是一块内存区域,包括了索引、表和其他的辅助缓存。缓存池的大小对性能很重要,一般推荐缓存池吃掉系统50%-75%的内存。默认的缓存池大小是128MB。 在一个内存充足的系统中,你可以通过把缓存池分成 多个缓存池来提高并发。缓存池的数量通过 innodb_buffer_pool_instances 配置,默认为一个。
  • innodb_additional_mem_pool_size 定义缓存池中用于存储数据字典信息和其他内部数据结构的内存大小。你的应用中的表越多,就需要分配越多的内存给它。默认是8M,如果耗尽了,会写warning日志,并且使用操作系统的内存。
  • innodb_log_buffer_size 定义了用于写日志到磁盘上的缓存大小。默认8MB,一个大的日志缓存可以支持大的事务运行,在事务提交之前写log到缓存中,而不是直接写到硬盘。如果你的事务比较大,你可以考虑提升这个缓存大小,节省硬盘I/O.

评论列表

    在Mysql配置文件中指定配置
    查看InnoDB初始化信息
    重要的存储事项
    系统表空间数据文件配置
    InnoDB日志文件配置
    InnoDB Undo 表空间配置
    InnoDB Page Size 配置
    InnoDB 内存配置