这一篇博客还不能超过8万字符,所以只能接着上一篇再写一篇了。
InnoDB启动选项
这一节叙述
InnoDB
相关的服务器选项,所有这些选项可以以
--opt_name=value
的形式在命令行或在选项文件里被指定。
・
innodb_additional_mem_pool_size
InnoDB
用来存储数据目录信息&其它内部数据结构的内存池的大小。你应用程序里的表越多,你需要在这里分配越多的内存。如果
InnoDB
用光了这个池内的内存,
InnoDB
开始从操作系统分配内存,并且往
MySQL
错误日志写警告信息。默认值是
1MB
。
・
innodb_autoextend_increment
当自动扩展表空间被填满之时,为扩展而增加的尺寸(
MB
为单位)。默认值是
8
。这个选项可以在运行时作为全局系统变量而改变。
・
innodb_buffer_pool_awe_mem_mb
如果缓冲池被放在
32
位
Windows
的
AWE
内存里,这个参数就是缓冲池的大小(
MB
为单位)。
(
仅在
32
位
Windows
上相关)如果你的
32
位
Windows
操作系统使用所谓的“地址窗口扩展(
AWE)
”支持超过
4GB
内存,你可以用这个参数把
InnoDB
缓冲池分配进
AWE
物理内存。这个参数最大的可能值是
64000
。如果这个参数被指定了,
innodb_buffer_pool_size
是在
32
位地址空间的
mysqld
内的窗口,
InnoDB
把那个
AWE
内存映射上去。对
innodb_buffer_pool_size
参数,一个比较好的值是
500MB
。
・
innodb_buffer_pool_size
InnoDB
用来缓存它的数据和索引的内存缓冲区的大小。你把这个值设得越高,访问表中数据需要得磁盘
I/O
越少。在一个专用的数据库服务器上,你可以设置这个参数达机器物理内存大小的
80%
。尽管如此,还是不要把它设置得太大,因为对物理内存的竞争可能在操作系统上导致内存调度。
・
innodb_checksums
InnoDB
在所有对磁盘的页面读取上使用校验和验证以确保额外容错防止硬件损坏或数据文件。尽管如此,在一些少见的情况下(比如运行标准检查之时)这个额外的安全特征是不必要的。在这些情况下,这个选项(默认是允许的)可以用
--skip-innodb-checksums
来关闭。
・
innodb_data_file_path
到单独数据文件和它们尺寸的路径。通过把
innodb_data_home_dir
连接到这里指定的每个路径,到每个数据文件的完整目录路径可被获得。文件大小通过给尺寸值尾加
M
或
G
以
MB
或者
GB
(
1024MB
)为单位被指定。文件尺寸的和至少是
10MB
。在一些操作系统上,文件必须小于
2GB
。如果你没有指定
innodb_data_file_path
,开始的默认行为是创建一个单独的大小
10MB
名为
ibdata1
的自扩展数据文件。在那些支持大文件的操作系统上,你可以设置文件大小超过
4GB
。
・
innodb_data_home_dir
目录路径对所有
InnoDB
数据文件的共同部分。如果你不设置这个值,默认是
MySQL
数据目录。你也可以指定这个值为一个空字符串,在这种情况下,你可以在
innodb_data_file_path
中使用绝对文件路径。
・
innodb_doublewrite
默认地,
InnoDB
存储所有数据两次,第一次存储到
doublewrite
缓冲,然后存储到确实的数据文件。这个选项可以被用来禁止这个功能。类似于
innodb_checksums
,这个选项默认是允许的;因为标准检查或在对顶级性能的需要超过对数据完整性或可能故障的关注之时,这个选项用
--skip-innodb-doublewrite
来关闭。
・
innodb_fast_shutdown
如果你把这个参数设置为
0
,
InnoDB
在关闭之前做一个完全净化和一个插入缓冲合并。这些操作要花几分钟时间,设置在极端情况下要几个小时。如果你设置这个参数为
1
,
InnoDB
在关闭之时跳过这些操作。默认值为
1
。如果你设置这个值为
2 (
在
Netware
无此值
)
,
InnoDB
将刷新它的日志然后冷关机,仿佛
MySQL
崩溃一样。已提交的事务不会被丢失,但在下一次启动之时会做一个崩溃恢复。
・
innodb_file_io_threads
InnoDB
中文件
I/O
线程的数量。正常地,这个参数是用默认的,默认值是
4
,但是大数值对
Windows
磁盘
I/O
有益。在
Unix
上,增加这个数没有效果,
InnoDB
总是使用默认值。
・
innodb_file_per_table
这个选项致使
InnoDB
用自己的
.ibd
文件为存储数据和索引创建每一个新表,而不是在共享表空间中创建。
・
innodb_flush_log_at_trx_commit
当
innodb_flush_log_at_trx_commit
被
设置为
0
,日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作。当这个值为
1
(默认值)之时,在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到磁盘操作的刷新。当设置为
2
之时,在每个提交,日志缓冲被写到文件,但不对日志文件做到磁盘操作的刷新。尽管如此,在对日志文件的刷新在值为
2
的情况也每秒发生一次。我们必须注意到,因为进程安排问题,每秒一次的刷新不是
100%
保证每秒都发生。你可以通过设置这个值不为
1
来获得较好的性能,但随之你会在一次崩溃中损失二分之一价值的事务。如果你设置这个值为
0
,那么任何
mysqld
进程的崩溃会删除崩溃前最后一秒的事务,如果你设置这个值为
2
,那么只有操作系统崩溃或掉电才会删除最后一秒的事务。尽管如此,
InnoDB
的崩溃恢复不受影响,而且因为这样崩溃恢复开始作用而不考虑这个值。注意,许多操作系统和一些磁盘硬件会欺骗刷新到磁盘操作。尽管刷新没有进行,你可以告诉
mysqld
刷新已经进行。即使设置这个值为
1
,事务的持久程度不被保证,且在最坏情况下掉电甚至会破坏
InnoDB
数据库。在
SCSI
磁盘控制器中,或在磁盘自身中,使用有后备电池的磁盘缓存会加速文件刷新并且使得操作更安全。你也可以试着使用
Unix
命令
hdparm
来在硬件缓存中禁止磁盘写缓存,或使用其它一些对硬件提供商专用的命令。这个选项的默认值是
1
。