Command-Line Format |
–ignore-builtin-innodb |
|
Option-File Format |
ignore-builtin-innodb |
|
Option Sets Variable |
||
Variable Name |
ignore-builtin-innodb |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Deprecated |
5.2.22 |
|
Permitted Values |
||
Type |
boolean |
在MySQL5.1中,该选项使服务器像内置的InnoDB不存在一样运作,使得InnoDB Plugin能代替内置InnoDB被使用。在MySQL5.5,InnoDB是默认的存储引擎且InnoDB Plugin不被使用,因此该选项不起作用。至于MySQL5.5.22,它已经过时并且会导致一个警告。
如果服务器被编译时包含了InnoDB支持,控制InnoDB存储引擎的加载。该选项有三种格式,可能的值为OFF,ON,或者FORCE。参见5.1.7.1节“安装和卸载插件”。
要禁用InnoDB,使用–innodb=OFF或者–skip-innodb。在这种情况下,由于默认存储引擎是InnoDB,除非你同时用–default-storage-engine设置默认为其它引擎服务器将不会启动。
Command-Line Format |
–innodb-status-file |
|
Option-File Format |
innodb-status-file |
|
Permitted Values |
||
Type |
boolean |
|
Default |
OFF |
控制InnoDB是否在MySQL数据目录创建名为innodb_status.<pid>的文件。如果启用,InnoDB定期写入SHOW ENGINE INNODB STATUS的输出到这个文件。
默认情况下,不创建该文件。要创建它,用–innodb-status-file=1启动mysqld。在正常关闭(此处指正常关闭mysqld)时该文件被删除。
禁用InnoDB存储引擎。参见–innodb的描述。
- innodb_adaptive_flushing
Command-Line Format |
–innodb_adaptive_flushing=# |
|
Option-File Format |
innodb_adaptive_flushing |
|
Option Sets Variable |
||
Variable Name |
innodb_adaptive_flushing |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
boolean |
|
Default |
ON |
指定是否根据负载动态调整刷新InnoDB缓存池中的脏页的速率。动态地调整刷新速率是为了避免突发的I/O活动。该设置默认是启用的。
- innodb_adaptive_hash_index
Command-Line Format |
–innodb_adaptive_hash_index=# |
|
Option-File Format |
innodb_adaptive_hash_index |
|
Option Sets Variable |
||
Variable Name |
innodb_adaptive_hash_index |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
boolean |
|
Default |
ON |
InnoDB自适应哈希索引是否启用或禁用(参见13.3.11.4节“自适应哈希索引”)。该选项默认是启用的。在服务器启动时使用–skip-innodb_adaptive_hash_index来禁用它。
- innodb_additional_mem_pool_size
Command-Line Format |
–innodb_additional_mem_pool_size=# |
|
Option-File Format |
innodb_additional_mem_pool_size |
|
Option Sets Variable |
||
Variable Name |
innodb_additional_mem_pool_size |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Deprecated |
5.6.3 |
|
Permitted Values |
||
Type |
numeric |
|
Default |
8388608 |
|
Range |
2097152 .. 4294967295 |
以字节为单位的InnoDB用来存储数据字典信息以及其他内部数据库结构的内存池大小。你的应用中有越多的表,你就需要在这里分配更多的内存。如果InnoDB用尽了该池中的内存,它将开始从操作系统分配内存并向MySQL错误日志写入警告消息。默认值是8MB。
- innodb_autoextend_increment
Command-Line Format |
–innodb_autoextend_increment=# |
|
Option-File Format |
innodb_autoextend_increment |
|
Option Sets Variable |
||
Variable Name |
innodb_autoextend_increment |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
numeric |
|
Default |
8 |
|
Range |
1 .. 1000 |
当一个自动增长的共享表空间文件变满了时,文件扩展大小增长的大小(以MB为单位)(The increment size (in MB) for extending the size of an auto-extending shared tablespace file when it becomes full)。默认值是8。如果你使用innodb_file_pre_table=1,该参数不影响创建的独立表空间文件。这些文件自增长不考虑innodb_autoextend_increment的值。初始扩展是少量的,之后发生的扩展增长是4MB。
- innodb_autoinc_lock_mode
Command-Line Format |
–innodb_autoinc_lock_mode=# |
|
Option-File Format |
innodb_autoinc_lock_mode |
|
Option Sets Variable |
||
Variable Name |
innodb_autoinc_lock_mode |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Type |
numeric |
|
Default |
1 |
|
Valid Values |
0 1 2 |
产生自动增长值时使用的锁定模式。允许的值是0,1或者2,对应“传统”“连续”或者“交错(interleaved)”锁定模式。13.3.5.3节“InnoDB中的AUTO_INCREMENT处理”描述了这些模式的特征。
该参数的默认值是1(“连续”锁定模式)。
- innodb_buffer_pool_instances
Version Introduced |
5.5.4 |
|
Command-Line Format |
–innodb_buffer_pool_instances=# |
|
Option-File Format |
innodb_buffer_pool_instances |
|
Option Sets Variable |
||
Variable Name |
innodb_buffer_pool_instances |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Type |
numeric |
|
Default |
1 |
|
Range |
1 .. 64 |
InnoDB缓冲池被分隔成的区域数。对于缓冲池在数GB范围的系统而言,将缓冲池分为独立的实例可以通过减少不同线程读写缓存页面的争用提高并发程度。每个存储到或者从缓冲池读取的页面被用一个哈希函数随机分配到一个缓冲池实例。每一个缓冲池管理自己的空闲列表,刷新列表,LRUs和其他与缓冲池相关的数据结构,并且被自己的缓冲池互斥锁保护。
该选项只在你设置innodb_buffer_pool_size到大于等于1GB的大小时才起作用。你指定的总大小被所有缓冲池分割。我们建议结合innodb_buffer_pool_instances和innodb_buffer_pool_size来指定,使得每个缓冲池实例至少1GB。
- innodb_buffer_pool_size
Command-Line Format |
–innodb_buffer_pool_size=# |
|
Option-File Format |
innodb_buffer_pool_size |
|
Option Sets Variable |
||
Variable Name |
innodb_buffer_pool_size |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Platform Bit Size |
32 |
|
Type |
numeric |
|
Default |
134217728 |
|
Range |
1048576 .. 2**32-1 |
InnoDB用于缓存它的表的数据和索引的内存缓冲池的以字节为单位的大小。默认值是128MB,比过去的默认值8M增长了。最大值取决于CPU体系结构,32位或者64位,CPU体系结构和操作系统有时候限制了一个更低的实际的最大值。
你设置该值越大,访问表中数据时所需的磁盘I/O就越少。在一个专用的数据库服务器上,你可以设置该值达到机器的物理内存大小的80%。如果下面这些问题出现,准备好缩减该值(Be prepared to scale back this value if these other issues occur):
对物理内存的竞争可能导致操作系统页交换。
InnoDB为缓存和控制结构保留更多内存,因此总共分配的空间大约比指定大小多10%。
地址空间必须是连续的,在Windows操作系统上这可能是一个问题,因为有些DLLs加载到指定地址。
初始化缓冲池的时间和它的大小大致成比例。在大型安装上,这个初始化时间可能较长。例如,在现代的Linux x84_64服务器上,初始化一个10GB的缓冲池需要大约6秒。参见7.9.1节“InnoDB缓冲池”
- innodb_change_buffering
Command-Line Format |
–innodb_change_buffering=# |
|
Option-File Format |
innodb_change_buffering |
|
Option Sets Variable |
||
Variable Name |
innodb_change_buffering |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values (<= 5.5.3) |
||
Type |
enumeration |
|
Default |
inserts |
|
Valid Values |
inserts none |
|
Permitted Values (>= 5.5.4) |
||
Type |
enumeration |
|
Default |
all |
|
Valid Values |
inserts deletes purges changes all none |
Innodb是否执行改变缓冲(change buffering),有一个优化措施是,延迟对非主键索引(secondary indexes)的写操作使得I/O操作可以顺序执行。允许的值是inserts(缓冲插入操作),deletes(缓冲删除操作;严格来说是标记索引记录的写操作,用于在以后的清除操作中删除),changes(缓冲插入和标记删除操作),purges(缓冲清除操作,被删除的索引条目最终进行垃圾收集时的写操作),all(缓冲插入,标记删除,和清除操作)和none(不缓冲任何操作)。默认值是all。详细信息参见13.4.7.4节“控制InnoDB改变缓冲”
- innodb_checksums
Command-Line Format |
–innodb_checksums |
|
Option-File Format |
innodb_checksums |
|
Option Sets Variable |
Yes, innodb_checksums |
|
Variable Name |
innodb_checksums |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Type |
boolean |
|
Default |
ON |
InnoDB可以用校验和检查所有从磁盘读取的页以保证对硬件或数据文件损坏的额外容忍性。该检查默认是启用的。然而,在某些罕见情况下(例如在运行基准测试时)这个额外的安全特性是不必要的,并且可以用–skip-innodb-checksums禁用。
- innodb_commit_concurrency
Command-Line Format |
–innodb_commit_concurrency=# |
|
Option-File Format |
innodb_commit_concurrency |
|
Option Sets Variable |
||
Variable Name |
innodb_commit_concurrency |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
numeric |
|
Default |
0 |
|
Range |
0 .. 1000 |
能够在同一时间提交的进程数量。值为0(默认值)允许任意数量的事务同时提交。
innodb_commit_concurrency的值不能够在运行时由零改为非零值,反过来也是这样。该值可以从一个非零值改为另一个非零值。
- innodb_concurrency_tickets
Command-Line Format |
–innodb_concurrency_tickets=# |
|
Option-File Format |
innodb_concurrency_tickets |
|
Option Sets Variable |
||
Variable Name |
innodb_concurrency_tickets |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
numeric |
|
Default |
500 |
|
Range |
1 .. 4294967295 |
能够同时进入InnoDB的线程数量由innodb_thread_concurrency变量决定。当一个线程尝试进入InnoDB时,如果线程数量已经达到了并发限制,它被放入一个队列中。当一个线程被允许进入InnoDB时,它被给予与innodb_concurrency_tickets的值相同数量的“自由凭证(free tickets)”,并且该线程可以自由地进入和离开InnoDB直到它用完了自己的凭证。在那之后,下一次该线程尝试进入InnoDB时它重新成为并发检查(和可能的排队)的对象。默认值是500。
- innodb_data_file_path
Command-Line Format |
–innodb_data_file_path=name |
|
Option-File Format |
innodb_data_file_path |
|
Variable Name |
innodb_data_file_path |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Type |
file name |
各个数据文件的路径及其大小。每个数据文件的完整路径是由innodb_data_home_dir连接上每个这里指的的路径形成的。文件大小由大小值后面追加K,M,或G来以KB,MB,或GB指定。文件的大小的和必须至少10MB。如果你不指定innodb_data_file_path,默认的行为是创建一个名为idbdata1的10MB自动增长数据文件(a single 10MB auto-extending data file named ibdata1)。各个文件的大小限制取决于你的操作系统。在那些支持大文件的操作系统上你可以设置文件大小到超过4GB。你也可以使用原始磁盘分区作为数据文件。关于配置InnoDB表空间文件的详细信息,参见13.3.2节“配置InnoDB”。
- innodb_data_home_dir
Command-Line Format |
–innodb_data_home_dir=path |
|
Option-File Format |
innodb_data_home_dir |
|
Option Sets Variable |
Yes, innodb_data_home_dir |
|
Variable Name |
innodb_data_home_dir |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Type |
file name |
所有共享表空间的InnoDB数据文件的目录路径的共同部分。该设置不影响当启用了innodb_file_pre_table时独立表空间文件的位置。默认值是MySQL数据目录。如果你指定它的值为空字符串,你可以在innodb_data_file_path中使用绝对文件路径。
- innodb_doublewrite
Command-Line Format |
–innodb-doublewrite |
|
Option-File Format |
innodb_doublewrite |
|
Option Sets Variable |
Yes, innodb_doublewrite |
|
Variable Name |
innodb_doublewrite |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Type |
boolean |
如果该变量是启用的(默认),InnoDB存储所有数据两次,第一次到双写缓冲,接着到实际的数据文件。该变量可以用–skip-innodb_doublewrite关闭,用于性能测试或者需要最好的性能而不是考虑数据完整性和可能的故障的情况下。
- innodb_fast_shutdown
Command-Line Format |
–innodb_fast_shutdown[=#] |
|
Option-File Format |
innodb_fast_shutdown |
|
Option Sets Variable |
Yes, innodb_fast_shutdown |
|
Variable Name |
innodb_fast_shutdown |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
numeric |
|
Default |
1 |
|
Valid Values |
0 1 2 |
InnoDB关闭模式。如果值是0,InnoDB进行慢关闭,在关闭前进行完整的清除和插入缓冲合并。如果值是1(默认),InnoDB关闭时跳过这些步骤,该过程称为快速关闭。如果值为2,InnoDB刷写它的日志并冷关闭,就像MySQL崩溃了一样;已提交的事务不会丢失(no committed transactions are lost),但是崩溃恢复操作使得下次启动花费更久。
慢关闭可能要花数分钟,在有大量数据仍然被缓冲的极限情况下甚至可能数小时。在MySQL大版本间升级或降级前使用慢关闭技术,使得所有数据文件完全准备好以防升级过程更新文件格式。
如果数据受到损坏的威胁,在紧急或者故障处理情况下使用innodb_fast_shutdown=2,以获得最快的关闭速度。
- innodb_file_format
Command-Line Format |
–innodb_file_format=# |
|
Option-File Format |
innodb_file_format |
|
Option Sets Variable |
Yes, innodb_file_format |
|
Variable Name |
innodb_file_format |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values (>= 5.5.0, <= 5.5.6) |
||
Type |
string |
|
Default |
Barracuda |
|
Valid Values |
Antelope Barracuda |
|
Permitted Values (>= 5.5.7) |
||
Type |
string |
|
Default |
Antelope |
|
Valid Values |
Antelope Barracuda |
新的InnoDB表使用的文件格式。当前支持Antelope和Barracuda。它只应用于拥有自己的表空间的表,所以要使它生效,必须启用innodb_file_pre_table。某些InnoDB特性,例如表的压缩,要求Barracuda文件格式。
- innodb_file_format_check
Command-Line Format |
–innodb_file_format_check=# |
|
Option-File Format |
innodb_file_format_check |
|
Option Sets Variable |
||
Variable Name |
innodb_file_format_check |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values (<= 5.5.0) |
||
Type |
string |
|
Default |
Antelope |
|
Permitted Values (>= 5.5.4) |
||
Type |
string |
|
Default |
Barracuda |
|
Permitted Values (>= 5.5.5) |
||
Type |
boolean |
|
Default |
ON |
对于MySQL5.5.5,该选项可以在服务器启动时设置成1或者0以启用或禁用InnoDB是否检查共享表空间中的文件格式标记(例如,Antelope还是Barracuda)。如果检查标记并且它比当前InnoDB版本所支持的更高,将发生一个错误并且InnoDB不启动。如果标记不更高,InnoDB设置innodb_file_format_max的值为文件格式标记。
在5.5.5之前,该选项可以在服务器启动时设置成1或者0以启用或禁用InnoDB是否检查共享表空间中的文件格式标记。如果检查标记并且它比当前InnoDB版本所支持的更高,将发生一个错误并且InnoDB不启动。如果标记不更高,InnoDB设置innodb_file_format_check的值为文件格式标记,它是在运行时看到的值。
注意:
尽管它的默认值有时被显示为ON或者OFF,在你的控制文件或者命令行中总是使用数值型值1或者0来打开或者关闭该选项。
- innodb_file_format_max
Version Introduced |
5.5.5 |
|
Command-Line Format |
–innodb_file_format_max=# |
|
Option-File Format |
innodb_file_format_max |
|
Option Sets Variable |
||
Variable Name |
innodb_file_format_max |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
string |
|
Default |
Antelope |
|
Valid Values |
Antelope Barracuda |
在服务器启动时,InnoDB设置innodb_file_format_max的值为共享表空间的文件格式标记(例如,Antelope或Barracuda)。如果服务器创建或者打开一个有更高文件格式的表,它设置innodb_file_format_max的值为那个格式。
该选项是在MySQL5.5.5中添加的。
- innodb_file_per_table
Command-Line Format |
–innodb_file_per_table |
|
Option-File Format |
innodb_file_per_table |
|
Variable Name |
innodb_file_per_table |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values (>= 5.5.0, <= 5.5.6) |
||
Type |
boolean |
|
Default |
ON |
|
Permitted Values (>= 5.5.7) |
||
Type |
boolean |
|
Default |
OFF |
如果innodb_file_per_table是禁用的(默认值),InnoDB在系统表空间中创建表。如果innodb_file_per_table是启用的,InnoDB创建每个新表时使用新表自己的.ibd文件存储数据和索引,而不是在共享表空间中。关于该功能的信息,参见13.3.3节“使用单表表空间”,例如InnoDB表压缩,它只在在单独表空间中存储的表上起作用。
- innodb_flush_log_at_trx_commit
Command-Line Format |
–innodb_flush_log_at_trx_commit[=#] |
|
Option-File Format |
innodb_flush_log_at_trx_commit |
|
Option Sets Variable |
||
Variable Name |
innodb_flush_log_at_trx_commit |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
enumeration |
|
Default |
1 |
|
Valid Values |
0 1 2 |
如果innodb_flush_log_at_trx_commit的值是0,日志缓冲每秒输出一次到日志文件并且在日志文件上执行刷写到磁盘的操作,但是在事务提交时什么也不做。当值是1时(默认值),日志缓冲在每次提交时输出到日志文件并且在日志文件上执行刷写到磁盘的操作。当值是2时,日志缓冲在每次提交时输出到日志文件但是不在日志文件上执行刷写到磁盘的操作。但是,当值是2时,日志文件的刷写也每秒发生一次。注意,由于线程调度的问题,每秒一次的刷写不是100%确保每秒都发生的。
默认值1是完全遵守ACID规则的要求。(The default value of 1 is required for full ACID compliance.)你可以通过设置1以外的值获得更好的性能,但之后你可能在崩溃中丢失长达一秒的事务。值为0时,任何mysqld进程崩溃可能丢失最后一秒的事务。值为2时,只有操作系统崩溃或者掉电可能丢失最后一秒的事务。不管该值是多少,InnoDB的崩溃恢复正常工作。
在一个使用InnoDB及事务的复制实例中,为了最大可能的持久性和一致性,在你的主机my.cnf文件中使用innodb_flush_log_trx_commit=1和sync_binlog=1。
警告:
很多操作系统和某些磁盘硬件愚弄刷写到磁盘操作。它们可能告诉mysqld刷写已经发生了,即使它没有。于是即使设置是1,事务的持久性也无法得到保证,并且在最坏的情况下,一次掉电甚至可能损坏InnoDB数据库。使用SCSI磁盘控制器中的或者磁盘自己中的有后备电池的磁盘缓存以加速文件刷写,并使得这个操作更安全。你也可以尝试使用Unix命令hdparm来禁用硬件缓存中的磁盘写的缓存,或者使用某些其它特定硬件供应商的命令。
- innodb_flush_method
Command-Line Format |
–innodb_flush_method=name |
|
Option-File Format |
innodb_flush_method |
|
Option Sets Variable |
Yes, innodb_flush_method |
|
Variable Name |
innodb_flush_method |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Type (solaris) |
enumeration |
|
Default |
fdatasync |
|
Valid Values |
O_DSYNC O_DIRECT |
默认情况下,InnoDB使用fsync()系统调用来刷写数据和日志文件。如果innodb_flush_method选项被设置为O_DSYNC,InnoDB使用O_SYNC打开及刷写日志文件,用fsync()来刷写数据文件。如果指定了O_DIRECT(在某些GUN/Linux版本,FreeBSD和Solaris上可用),InnoDB使用O_DIRECT(或者在Solaris上directis())来打开数据文件,并使用fsync()刷写日志和数据文件。注意,InnoDB使用fsync()代替fdatasync(),并且它默认不使用O_DSYNC,因为在很多种Unix上有相关的问题。该变量之和Unix相关。在Windows上,刷写模式始终是async_unbuffered并且无法改变。
取决于硬件配置,设置innodb_flush_method为O_DIRECT在性能方面既可能有有利影响也可能有不利影响。对你的特定配置进行性能测试以决定使用哪种设置。你的工作负载中的读写操作混合比例也影响哪种设置对你而言性能更好。例如,在有RAID控制器和带后备电池的写缓存系统中,O_DIRECT能够帮助避免InnoDB缓冲池和操作系统文件系统缓存之间的双重缓冲。在某些InnoDB数据和日志文件位于SAN上的系统上,默认值或者O_DSYNC在语句大部分为select的读为主的工作负载上也许更快。总是使用反映你的生产环境的相同种类的硬件和工作负载测试这个参数。
在以前,值为fdatasync也指定为默认行为。由于值为fdatasync时刷写导致fsync()系统调用而不是fdatasync()的迷惑,该值被移除了。现在想要保持默认值,不要在启动时为innodb_flush_method设置任何值。
- innodb_force_recovery
Command-Line Format |
–innodb_force_recovery=# |
|
Option-File Format |
innodb_force_recovery |
|
Option Sets Variable |
||
Variable Name |
innodb_force_recovery |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Type |
enumeration |
|
Default |
0 |
|
Valid Values |
0 1 2 3 4 5 6 |
崩溃恢复的模式。可能的值为从0到6。这些值的含义的在14.3.7.2节“强制InnoDB恢复”中被描述。
警告
只在紧急情况下设置该变量大于0,以从一个损坏的数据库导出你的表。作为安全手段,当该值大于0时,InnoDB阻止任何对它的数据的修改。该限制也禁止某些使用where和order by子句的查询,因为高值可能阻止查询使用索引。
- innodb_io_capacity
Command-Line Format |
–innodb_io_capacity=# |
|
Option-File Format |
innodb_io_capacity |
|
Option Sets Variable |
Yes, innodb_io_capacity |
|
Variable Name |
innodb_io_capacity |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Platform Bit Size |
32 |
|
Type |
numeric |
|
Default |
200 |
|
Range |
100 .. 2**32-1 |
|
Permitted Values |
||
Platform Bit Size |
64 |
|
Type |
numeric |
|
Default |
200 |
|
Range |
100 .. 2**64-1 |
InnoDB后台任务进行的I/O活动的上限,例如从缓冲池刷写页面和从插入缓冲合并数据。默认值是200。对于能进行更高I/O速率的繁忙系统,你可以在服务器启动时设置一个更高的值,以帮助服务器处理和大量行更改相关的后台维护工作。对于用个人5400RPM或7200RPM磁盘的系统,你可以降低该值到以前的默认值100。
该参数应该被设置为系统每秒能进行的大致I/O操作次数。理想情况下,保持该设置和实际一样低,但是不要太低以致那些后台活动跟不上。如果该值太高,数据太快移出缓冲池和插入缓冲,以致不能通过缓存提供显著的好处。
该值代表估计的老一代磁盘能提供的每秒I / O操作(IOPS),它可以进行大约100 IOPS。当前的默认值200反映了现代存储设备有能力提供更高的I/O速率。
通常,你可以增加该值为用于InnoDB I/O的磁盘数量的函数的值(you can increase the value as a function of the number of drives used for InnoDB I/O)。实际上快速的驱动器有能力提供高数值的IOPS。例如,为InnoDB使用多块磁盘的系统或者固态硬盘似乎能够从控制该参数的能力中获益。
尽管你可以指定一个很高的值,但实际上这些大值没有带来任何好处;例如,一百万被认为是很高的值。
你可以设置innodb_io_capacity为任何大于等于100的值,并且默认值是200.你可以在MySQL选项文件(my.cnf或者my.ini)中设置该参数的值;或者用SET GLOBAL语句动态的改变它,这要求SUPER权限。
更多关于该选项的指导参见14.4.7.11节“控制主线程I/O速率”。关于InnoDB I/O性能的一般信息参见8.5.7节“优化InnoDB磁盘I/O”。
- innodb_large_prefix
Version Introduced |
5.5.14 |
|
Command-Line Format |
–innodb_large_prefix |
|
Option-File Format |
innodb_large_prefix |
|
Option Sets Variable |
Yes, innodb_large_prefix |
|
Variable Name |
innodb_large_prefix |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
boolean |
|
Default |
OFF |
启用该选项以为使用DYNAMIC和COMPRESSED行格式的InnoDB表允许索引键前缀长度超过767字节(最多3072字节)(Enable this option to allow index key prefixes longer than 767 bytes (up to 3072 bytes), for InnoDB tables that use the DYNAMIC and COMPRESSED row formats.)。(创建这样的表同时也要求选项值innodb_file_format=barracuda与innodb_file_per_table=true。)有关在不同设置下索引键前缀相关最大值,参见14.3.15节“InnoDB表的限制”
对于使用REDUNDANT和COMPACT行格式的表,该选项不影响允许的键前缀长度。它引入了一个新的错误可能(It does introduce a new error possibility)。当启用了该选项时,尝试为一个REDUNDANT或COMPACT表创建一个键长度大于3072的索引前缀导致错误ER_INDEX_COLUMN_TOOLONG(1727)。(这里可能原文有误,实际测试如下:
alter table test add index (name(4500));
ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.
perror 1709
MySQL error code 1709 (ER_INDEX_COLUMN_TOO_LONG): Index column size too large. The maximum column size is %lu bytes.
perror 1727
Illegal error code: 1727
)
- innodb_lock_wait_timeout
Command-Line Format |
–innodb_lock_wait_timeout=# |
|
Option-File Format |
innodb_lock_wait_timeout |
|
Option Sets Variable |
||
Variable Name |
innodb_lock_wait_timeout |
|
Variable Scope |
Global, Session |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
numeric |
|
Default |
50 |
|
Range |
1 .. 1073741824 |
InnoDB事务在放弃前等待行锁的超时秒数。默认值是50秒。一个尝试访问被其它InnoDB事务锁定的行的写事务在发出以下错误:“ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction”前最多等待这么多秒。当一个锁等待超时发生时,当前语句被回滚(不是整个事务)。要使整个事务回滚,用–innodb_rollback_on_timeout选项启动服务器。参见14.3.13节“InnoDB错误处理”。
对于高交互式应用或者OLTP系统,你可以减少该值,以快速显示用户反馈或者将更新放到队列中稍后处理。对于长时间运行的后台操作,你可以增加该值,例如在数据仓库中一个等待大量插入或更新操作完成的变换步骤。
innodb_lock_wait_timeout只对InnoDB行锁适用。MySQL的表锁不在InnoDB中发生,并且这个超时不适用于对表锁的等待。
锁等待超时值不适用于死锁,因为InnoDB立即检测到它们,并且回滚死锁的事务中的一个。
- innodb_locks_unsafe_for_binlog
Command-Line Format |
–innodb_locks_unsafe_for_binlog |
|
Option-File Format |
innodb_locks_unsafe_for_binlog |
|
Option Sets Variable |
||
Variable Name |
innodb_locks_unsafe_for_binlog |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Deprecated |
5.6.3 |
|
Permitted Values |
||
Type |
boolean |
|
Default |
OFF |
该选项影响InnoDB如何为搜索和索引扫描使用间隙锁。通常InnoDB使用一种名为下一键锁的结合了索引行锁和间隙锁的算法。InnoDB使用如下方法进行行级锁定,当它搜索或者扫描一个表索引时,它在它遇到的索引记录上设置共享或者排它锁。因此,行级锁实际上是索引记录锁。另外,一个索引记录上的下一键锁也影响该索引记录之前的“间隙”。也就是说,下一键锁就是一个索引记录锁加上一个该索引记录前的间隙上的间隙锁。如果一个会话在一个索引的记录R上拥有一个共享或者排它锁,其它会话不能在该索引上按照排序紧接记录R之前的间隙中插入新的索引记录。参见14.3.9.4节“InnoDB记录锁,间隙锁,以及下一键锁”。
默认情况下,innodb_locks_unsafe_for_binlog的值是0(禁用),这意味着间隙锁是启用的:InnoDB为搜索和索引扫描使用下一键锁。要启用该变量,设置它为1。这导致间隙锁被禁用:InnoDB只为搜索和索引扫描使用索引记录锁。
启用innodb_lock_unsafe_for_binlog不禁用为了外键约束检查或者重复键检查的间隙锁的使用。
启用innodb_lock_unsafe_for_binlog的影响类似但不完全相同于设置事务隔离级别为READ COMMITTED:
l 启用innodb_lock_unsafe_for_binlog是一个全局设置且影响所有会话,然而隔离级别可以为所有会话全局地设置,或者单独地设置每个会话。
l innodb_lock_unsafe_for_binlog只能在服务器启动时设置,而隔离级别可以在启动时设置或者在运行时改变。
因此READ COMMITTED提供了比innodb_lock_unsafe_for_binlog更精细更灵活的控制。更多关于隔离级别对间隙锁的影响的详情,参见13.3.6节“SET TRANSACTION语法”。
启用innodb_locks_unsafe_for_binlog可能导致幻读问题,因为当间隙锁被禁用时其它会话可以插入新行到间隙中。假设现在有个索引在child表的id列上,并且你想要读取并锁定表中所有标识符值大于100的行,意图稍后更新某些选择的行中的列:
SELECT * FROM child WHERE id > 100 FOR UPDATE;
该查询从第一个id大于100的记录开始扫描索引。如果在该范围索引记录上设置的锁不能锁定(lock out)间隙上的插入,其它会话可以插入一个新行到表中。因此,如果你在同一个事务中再次执行相同的select语句,你能在该查询返回的结果集中看到一个新行。这也意味着如果新的内容添加到该数据库,InnoDB不能保证可串行化。因此,如果innodb_locks_unsafe_for_binlog启用了,InnoDB最多保证READ COMMITED隔离级别。(冲突可串行化仍然可以保证。)更多关于幻读的信息,参见14.3.9.5节“使用下一键锁避免幻读问题”。
启用innodb_locks_unsafe_for_binlog还有其它影响:
l 对于UPDATE或者DELETE语句,InnoDB只为它更新或者删除的行保持锁定。不匹配的行的记录锁在MySQL比较完WHERE条件以后释放。
l 对于UPDATE语句,如果一行已经被锁定了,InnoDB进行一次“半一致”读,返回最新已提交的版本给MySQL,以便MySQL能够确定该行是否匹配这个UPDATE的WHERE条件。如果该行匹配(必须被更新),MySQL重新读取该行并且InnoDB这次不是锁定它就是等待它上面的一个锁。
考虑下面的例子,从这个表开始:
CREATE TABLE t (a INT NOT NULL, b INT) ENGINE = InnoDB;
INSERT INTO t VALUES (1,2),(2,3),(3,2),(4,3),(5,2);
COMMIT;
在这个例子中,表没有索引,因此搜索和索引扫描为记录锁使用隐藏的聚簇索引(参见14.3.11.1“聚簇和次要索引”)。
假设有一个客户端使用这些语句进行更新:
SET autocommit = 0;
UPDATE t SET b = 5 WHERE b = 3;
再假设有第二个客户端在第一个客户端之后执行这些语句进行更新:
SET autocommit = 0;
UPDATE t SET b = 4 WHERE b = 2;
InnoDB执行各个UPDATE时,它首先为每一行获得一个排它锁,接着确定是否修改它。如果InnoDB不修改该行且innodb_locks_unsafe_for_binlog是启用的,它释放该锁。否则,InnoDB保留该锁直到事务的结束。这影响后面的事务处理。
如果innodb_locks_unsafe_for_binlog是禁用的,第一个UPDATE获取X锁并且不释其中放任何一个:
x-lock(1,2); retain x-lock
x-lock(2,3); update(2,3) to (2,5); retain x-lock
x-lock(3,2); retain x-lock
x-lock(4,3); update(4,3) to (4,5); retain x-lock
x-lock(5,2); retain x-lock
第二个UPDATE一尝试获取任何锁就将阻塞(因为第一个更新保留了所有行上的锁),并且不能继续进行,直到第一个UPDATE提交或者回滚:
x-lock(1,2); block and wait for first UPDATE to commit or roll back
如果innodb_locks_unsafe_for_binlog是启用的,第一个UPDATE获取X锁并释放那些它不修改的行的锁。
x-lock(1,2); unlock(1,2)
x-lock(2,3); update(2,3) to (2,5); retain x-lock
x-lock(3,2); unlock(3,2)
x-lock(4,3); update(4,3) to (4,5); retain x-lock
x-lock(5,2); unlock(5,2)
对于第二个UPDATE,InnoDB进行一个“半一致”读,返回每一行最新已提交的版本到MySQL以便MySQL能够确定该行是否匹配该UPDATE的WHERE条件:
x-lock(1,2); update(1,2) to (1,4); retain x-lock
x-lock(2,3); unlock(2,3)
x-lock(3,2); update(3,2) to (3,4); retain x-lock
x-lock(4,3); unlock(4,3)
x-lock(5,2); update(5,2) to (5,4); retain x-lock
- innodb_log_buffer_size
Command-Line Format |
–innodb_log_buffer_size=# |
|
Option-File Format |
innodb_log_buffer_size |
|
Option Sets Variable |
||
Variable Name |
innodb_log_buffer_size |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Type |
numeric |
|
Default |
8388608 |
|
Range |
262144 .. 4294967295 |
InnoDB用于向磁盘上的日志文件写入的缓冲区大小的字节数。默认值是8MB。大的日志缓冲容许大型事务在事务提交前直接运行,不需要写日志到磁盘。因此,如果你有大的事务,使日志缓冲区更大可节省磁盘I / O。
- innodb_log_file_size
Command-Line Format |
–innodb_log_file_size=# |
|
Option-File Format |
innodb_log_file_size |
|
Option Sets Variable |
Yes, innodb_log_file_size |
|
Variable Name |
innodb_log_file_size |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Type |
numeric |
|
Default |
5242880 |
|
Range |
108576 .. 4294967295 |
在一个日志组中每个日志文件的大小字节数。日志文件大小的总和必须小于4GB。默认值是5MB。合理的值的范围为1MB到N分之1缓冲池的大小,其中N是日志组中文件的数量。该值越大,缓冲池所需的检查点刷新操作越少,节省磁盘I / O。但更大的日志文件也意味着在崩溃的情况下恢复更慢。
- innodb_log_files_in_group
Command-Line Format |
–innodb_log_files_in_group=# |
|
Option-File Format |
innodb_log_files_in_group |
|
Option Sets Variable |
||
Variable Name |
innodb_log_files_in_group |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Type |
numeric |
|
Default |
2 |
|
Range |
2 .. 100 |
日志组中的日志文件的数量。 InnoDB以循环的方式写入文件。默认值(且推荐)是2。
- innodb_log_group_home_dir
Command-Line Format |
–innodb_log_group_home_dir=path |
|
Option-File Format |
innodb_log_group_home_dir |
|
Option Sets Variable |
||
Variable Name |
innodb_log_group_home_dir |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Type |
file name |
InnoDB重做日志文件的目录路径。如果你不指定任何InnoDB日志变量,默认为在MySQL数据目录中创建名为ib_logfile0和ib_logfile1两个5MB的文件。
- innodb_max_dirty_pages_pct
Command-Line Format |
–innodb_max_dirty_pages_pct=# |
|
Option-File Format |
innodb_max_dirty_pages_pct |
|
Option Sets Variable |
||
Variable Name |
innodb_max_dirty_pages_pct |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
numeric |
|
Default |
75 |
|
Range |
0 .. 99 |
这是一个从0到99之间的整数。默认值是75。InnoDB中的主线程尝试写来自缓冲池的页面,使得脏页的百分比(尚未写入)不超过这个值。
- innodb_max_purge_lag
Command-Line Format |
–innodb_max_purge_lag=# |
|
Option-File Format |
innodb_max_purge_lag |
|
Option Sets Variable |
Yes, innodb_max_purge_lag |
|
Variable Name |
innodb_max_purge_lag |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
numeric |
|
Default |
0 |
|
Range |
0 .. 4294967295 |
当清除操作滞后时,这个变量控制如何延迟INSERT,UPDATE,DELETE的操作(参见14.3.10节 “InnoDB多版本”)。默认值为0(无延迟)。
InnoDB的事务系统维护有被UPDATE或DELETE操作标记删除的索引记录的事务列表。令这个列表的长度为purge_lag。当purge_lag超过innodb_max_purge_lag时,每个INSERT,UPDATE和DELETE操作延迟((purge_lag/ innodb_max_purge_lag)×10)-5毫秒。延迟在清除批处理(purge batch)开始时计算,每10秒一次。如果清除因为一个老的可以看到要被清除的行的一致性读视图而无法运行,该操作不延迟。
一个典型的有问题的生产环境设置可能是1百万,假设事务很小,大小只有100个字节,这允许有100MB 未清除的InnoDB表行。
滞后值在InnoDB Monitor输出的TRANSACTIONS节中显示为历史列表的长度。例如,如果输出包括以下行,滞后值是20:
————
TRANSACTIONS
————
Trx id counter 0 290328385
Purge done for trx’s n:o < 0 290315608 undo n:o < 0 17
History list length 20
innodb_mirrored_log_groups
为数据库保留的日志组的相同副本的数量。它应设置为1。
- innodb_old_blocks_pct
Command-Line Format |
–innodb_old_blocks_pct=# |
|
Option-File Format |
innodb_old_blocks_pct |
|
Variable Name |
innodb_old_blocks_pct |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
numeric |
|
Default |
37 |
|
Range |
5 .. 95 |
指定用于老块(old block)子列表的InnoDB缓冲池近似百分比。值的范围是5至95。默认值是37(即,池的3/8)。参见8.9.1节,“InnoDB缓冲池”
- innodb_old_blocks_time
Command-Line Format |
–innodb_old_blocks_time=# |
|
Option-File Format |
innodb_old_blocks_time |
|
Variable Name |
innodb_old_blocks_time |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
numeric |
|
Default |
0 |
|
Range |
0 .. 2**32-1 |
指定第一次访问后,插入到老子表的块在可以移到新子表之前,必须等待在那多少毫秒(ms)。默认值是0:插入到旧子表中的一个块在首次访问立时即移到新的子表,不管插入后访问发生得有多快。如果该值大于0,块保留在老子表,直到一次访问发生在第一次访问后至少那么多毫秒后。例如,值为1000使得块在第一次访问后,在成为可移到新子表的块前,留在老子表1秒。参见8.9.1节,“InnoDB缓冲池”
- innodb_open_files
Command-Line Format |
–innodb_open_files=# |
|
Option-File Format |
innodb_open_files |
|
Variable Name |
innodb_open_files |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Type |
numeric |
|
Default |
300 |
|
Range |
10 .. 4294967295 |
这个变量只有你在InnoDB中使用多个表空间时是相关的。它指定InnoDB可以在同一时间保持打开.ibd文件的最大数量。最小值是10。默认值是300。
.ibd文件使用的文件的描述符只用于InnoDB。它们独立于由–open-files-limit服务器选项指定的,且不影响表缓存的操作。
- innodb_purge_batch_size
Version Introduced |
5.5.4 |
|
Command-Line Format |
–innodb_purge_batch_size=# |
|
Option-File Format |
innodb_purge_batch_size |
|
Variable Name |
innodb_purge_batch_size |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values (>= 5.5.4) |
||
Type |
numeric |
|
Default |
20 |
|
Range |
1 .. 5000 |
变化的粒度,用重做日志记录的单位表示,它触发一次清除操作,刷写变化缓冲池块到磁盘 (The granularity of changes, expressed in units of redo log records, that trigger a purge operation, flushing the changed buffer pool blocks to disk.) 。默认值是20,范围是1-5000。此选项和innodb_purge_threads= 1设置结合以优化性能,典型用户不需要修改。
- innodb_purge_threads
Version Introduced |
5.5.4 |
|
Command-Line Format |
–innodb_purge_threads=# |
|
Option-File Format |
innodb_purge_threads |
|
Variable Name |
innodb_purge_threads |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values (>= 5.5.4) |
||
Type |
numeric |
|
Default |
0 |
|
Range |
0 .. 1 |
致力于InnoDB清除操作的后台线程数。目前,只能是0(默认)或1。默认值0表示清除操作为主线程的一部分进行。在它自己的线程内运行清除操作,可以减少内部连接InnoDB次数,提高可扩展性。目前,性能提升可能很小,因为后台线程相比以前可能会遇到不同种类的连接。此功能主要是为未来的性能提升工作奠定基础。
- innodb_read_ahead_threshold
Command-Line Format |
–innodb_read_ahead_threshold=# |
|
Option-File Format |
innodb_read_ahead_threshold |
|
Option Sets Variable |
||
Variable Name |
innodb_read_ahead_threshold |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
numeric |
|
Default |
56 |
|
Range |
0 .. 64 |
控制InnoDB用来预取页面进入缓冲池的线性预读的灵敏度。如果InnoDB从一个区(extend)(64页)顺序读取至少innodb_read_ahead_threshold页,它为接下来的整个区启动一个异步读取。值的允许范围是0到64。默认是56:InnoDB必须从一个区顺序读取至少56页,以启动一个异步读取接下来的分区。
- innodb_read_io_threads
Command-Line Format |
–innodb_read_io_threads=# |
|
Option-File Format |
innodb_read_io_threads |
|
Option Sets Variable |
||
Variable Name |
innodb_read_io_threads |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Type |
numeric |
|
Default |
4 |
|
Range |
1 .. 64 |
InnoDB中读操作的I / O线程的数量。默认值为4。
注意
在Linux系统上用innodb_read_io_threads,innodb_write_io_threads以及Linux的aio-max-nr的默认设置运行多个MySQL服务器(典型地,超过12个),可能超过系统限制。理想的情况下,增加aio-max-nr设置;你可能会降低一个或所有MySQL配置选项的设置作为一种变通方法(workaround)。
- innodb_replication_delay
Command-Line Format |
–innodb_replication_delay=# |
|
Option-File Format |
innodb_replication_delay |
|
Option Sets Variable |
||
Variable Name |
innodb_replication_delay |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
numeric |
|
Default |
0 |
|
Range |
0 .. 4294967295 |
如果innodb_thread_concurrency达到限制,从服务器的复制线程的延迟(以毫秒计)。
- innodb_rollback_on_timeout
Command-Line Format |
–innodb_rollback_on_timeout |
|
Option-File Format |
innodb_rollback_on_timeout |
|
Option Sets Variable |
||
Variable Name |
innodb_rollback_on_timeout |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Type |
boolean |
|
Default |
OFF |
在MySQL5.5中,默认情况下当事务超时时,InnoDB只回滚最后一个语句。如果指定了–innodb_rollback_on_timeout,事务超时导致InnoDB断开,并回滚整个事务(与在MySQL 4.1中的行为相同)。
- innodb_rollback_segments
Version Introduced |
5.5.11 |
|
Command-Line Format |
–innodb_rollback_segments=# |
|
Option-File Format |
innodb_rollback_segments |
|
Option Sets Variable |
||
Variable Name |
innodb_rollback_segments |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
numeric |
|
Default |
128 |
|
Range |
1 .. 128 |
定义在一个事务中InnoDB使用多少系统表空间中的回滚段。你可能会从其默认值128降低此值,如果较少数量的回滚段在你的生产环境上表现更好的话。
- innodb_spin_wait_delay
Command-Line Format |
–innodb_spin_wait_delay=# |
|
Option-File Format |
innodb_spin_wait_delay |
|
Option Sets Variable |
||
Variable Name |
innodb_spin_wait_delay |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
numeric |
|
Default |
6 |
|
Range |
0 .. 4294967295 |
自旋锁的轮询之间的最大延迟。默认值是6。
- innodb_stats_method
Version Introduced |
5.5.10 |
|
Command-Line Format |
–innodb_stats_method=name |
|
Option-File Format |
innodb_stats_method |
|
Option Sets Variable |
Yes, innodb_stats_method |
|
Variable Name |
innodb_stats_method |
|
Variable Scope |
Global, Session |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
enumeration |
|
Default |
nulls_equal |
|
Valid Values |
nulls_equal nulls_unequal nulls_ignored |
为InnoDB表收集关于索引值分布的统计时服务器如何处理NULL值。该变量有三种可能值,nulls_equal,nulls_unequal和nulls_ignored。对于nulls_equal,所有NULL索引值被认为是相等的,并形成一个单一的大小等于NULL值的数目的值组。对于nulls_unequal,NULL值被认为是不相等的,每个NULL形成一个大小为1的不同值组。对于nulls_ignored,NULL值被忽略。
用于生成表统计的方法影响优化器如何为查询的执行选择索引,如8.3.7节“InnoDB和MyISAM索引统计收集”中所述。
- innodb_stats_on_metadata
Version Introduced |
5.5.4 |
|
Command-Line Format |
–innodb_stats_on_metadata |
|
Option-File Format |
innodb_stats_on_metadata |
|
Option Sets Variable |
||
Variable Name |
innodb_stats_on_metadata |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
boolean |
|
Default |
ON |
当启用此变量时(这是默认情况,与创建该变量之前相同),InnoDB在元数据语句执行期间更新统计数据,例如SHOW TABLE STATUS或SHOW INDEX,又或者当访问INFORMATION_SCHEMA的表TABLES或STATISTICS时。 (这些更新与ANALYZE TABLE时发生的事情类似。)当禁用时,在这些操作期间InnoDB不会更新统计信息。禁用此变量可以提高有大量的表或索引的架构(schemas) 的访问速度。它也可以提高涉及InnoDB表的查询的执行计划的稳定性。
- innodb_stats_sample_pages
Command-Line Format |
–innodb_stats_sample_pages=# |
|
Option-File Format |
innodb_stats_sample_pages |
|
Option Sets Variable |
||
Variable Name |
innodb_stats_sample_pages |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Deprecated |
5.6.3 |
|
Permitted Values |
||
Type |
numeric |
|
Default |
8 |
|
Range |
1 .. 2**64-1 |
用于类似被ANALYZE TABLE计算的索引分布统计信息的采样的索引页数目。(The number of index pages to sample for index distribution statistics such as are calculated by ANALYZE TABLE.) 默认值是8。更多信息,参见14.4.8节“灵活性,易用性和可靠性的变化”。
- innodb_strict_mode
Command-Line Format |
–innodb_strict_mode=# |
|
Option-File Format |
innodb_strict_mode |
|
Option Sets Variable |
Yes, innodb_strict_mode |
|
Variable Name |
innodb_strict_mode |
|
Variable Scope |
Global, Session |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
boolean |
|
Default |
OFF |
某些条件下InnoDB是否返回错误而不是警告。这类似于严格的SQL模式。默认值是OFF。受影响的条件列表参见14.4.8.4节,“InnoDB严格模式”。
- innodb_support_xa
Command-Line Format |
–innodb_support_xa |
|
Option-File Format |
innodb_support_xa |
|
Option Sets Variable |
Yes, innodb_support_xa |
|
Variable Name |
innodb_support_xa |
|
Variable Scope |
Global, Session |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
boolean |
|
Default |
TRUE |
启用InnoDB对XA事务中的两阶段提交支持,它导致为了事务准备的额外磁盘刷写。该设置是默认的。内部使用了XA机制,并且任何打开了二进制日志并接受多个线程更改其数据的服务器是必不可少的。(The XA mechanism is used internally and is essential for any server that has its binary log turned on and is accepting changes to its data from more than one thread)如果你把它关掉,事务可能以不同于在线数据库提交它们的顺序被写入二进制日志。在灾难恢复的二进制日志重放时或复制从上,这可能会产生不同的数据。不要在复制主服务器上关闭它,除非你有一个其中只有一个线程能够改变数据的不寻常的环境。
对于一台只有一个线程接受数据修改的服务器,关闭此选项以改善InnoDB表的性能是安全的,并且是推荐的。例如,你可以在只有复制的SQL线程改变数据的复制从上关闭它。 如果你不需要安全的二进制日志记录或复制,也不需要使用外部XA事务管理器,你也可以关闭这个选项。
- innodb_sync_spin_loops
Command-Line Format |
–innodb_sync_spin_loops=# |
|
Option-File Format |
innodb_sync_spin_loops |
|
Option Sets Variable |
||
Variable Name |
innodb_sync_spin_loops |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
numeric |
|
Default |
30 |
|
Range |
0 .. 4294967295 |
线程被挂起前,一个线程等待一个InnoDB互斥锁被释放的次数。默认值是30。
- innodb_table_locks
Command-Line Format |
–innodb_table_locks |
|
Option-File Format |
innodb_table_locks |
|
Option Sets Variable |
Yes, innodb_table_locks |
|
Variable Name |
innodb_table_locks |
|
Variable Scope |
Global, Session |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
boolean |
|
Default |
TRUE |
如果innodb_table_locks=0(原文为autocommit=0,疑有误),InnoDB倾向于LOCK TABLES;MySQL不从LOCK TABLES…WRITE返回,直到所有其它线程已释放所有该表的锁。innodb_table_locks的默认值是1,这意味着如果autocommit=0,LOCK TABLES导致InnoDB内部地锁定表。
对于MySQL5.5.3,innodb_table_locks=0对用LOCK TABLES…WRITE显式锁定的表没有影响。它仍然对隐式LOCK TABLES…WRITE(例如,通过触发器)或LOCK TABLES…READ锁定的表的读写有效果。
- innodb_thread_concurrency
Command-Line Format |
–innodb_thread_concurrency=# |
|
Option-File Format |
innodb_thread_concurrency |
|
Option Sets Variable |
||
Variable Name |
innodb_thread_concurrency |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
numeric |
|
Default |
0 |
|
Range |
0 .. 1000 |
InnoDB试着保持在InnoDB内并发的操作系统线程数量小于或等于这个变量给出的限制。一旦线程的数量达到此限制,其它线程被放入FIFO队列中进入等待执行的状态(additional threads are placed into a wait state within a FIFO queue for execution)。等待锁的线程不计入并发执行的线程数量。
该变量的正确值依赖于环境和负载。尝试一系列不同的值,以确定什么样的值适合您的应用。建议值是2倍的CPU数目加上磁盘的数量。
这个变量的范围是0到1000。值为0(默认)被解释为无限并发(无并发检查)。禁用线程并发检查使InnoDB可以创建它需要的那么多的线程。
- innodb_thread_sleep_delay
Command-Line Format |
–innodb_thread_sleep_delay=# |
|
Option-File Format |
innodb_thread_sleep_delay |
|
Option Sets Variable |
||
Variable Name |
innodb_thread_sleep_delay |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Type |
numeric |
|
Default |
10000 |
InnoDB线程加入InnoDB队列前睡眠多久,以微秒计。默认值是10,000。值为0禁用睡眠。
- innodb_use_native_aio
Version Introduced |
5.5.4 |
|
Command-Line Format |
–innodb_use_native_aio=# |
|
Option-File Format |
innodb_use_native_aio |
|
Option Sets Variable |
||
Variable Name |
innodb_use_native_aio |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Type |
boolean |
|
Default |
ON |
指定是否使用Linux的异步I / O子系统。这个变量只适用于Linux系统,不能在服务器运行时改变。
通常情况下,你并不需要动这个选项,因为它是默认启用的。如果操作系统中的异步I / O子系统的问题阻止了InnoDB启动,启动服务器时禁用该变量(在选项文件中使用innodb_use_native_aio= 0)。如果InnoDB检测到潜在的问题,例如TMPDIR的位置,tmpfs文件系统,不支持tmpfs的AIO的 Linux内核的组合,这个选项也可以在启动时自动被关闭。
这个变量是在MySQL5.5.4中添加的。
- innodb_use_sys_malloc
Command-Line Format |
–innodb_use_sys_malloc=# |
|
Option-File Format |
innodb_use_sys_malloc |
|
Option Sets Variable |
||
Variable Name |
innodb_use_sys_malloc |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Deprecated |
5.6.3 |
|
Permitted Values |
||
Type |
boolean |
|
Default |
ON |
InnoDB是否使用操作系统的内存分配器(ON)或自己的(OFF)。默认值是ON。
innodb_version
InnoDB的版本号。
- innodb_write_io_threads
Command-Line Format |
–innodb_write_io_threads=# |
|
Option-File Format |
innodb_write_io_threads |
|
Option Sets Variable |
||
Variable Name |
innodb_write_io_threads |
|
Variable Scope |
Global |
|
Dynamic Variable |
No |
|
Permitted Values |
||
Type |
numeric |
|
Default |
4 |
|
Range |
1 .. 64 |
InnoDB中写操作的I / O线程数量。默认值为4。
注意
在Linux系统上用innodb_read_io_threads,innodb_write_io_threads以及Linux的aio-max-nr的默认设置运行多个MySQL服务器(典型地,超过12个),可能超过系统限制。理想的情况下,增加aio-max-nr设置;你可能会降低一个或所有MySQL配置选项的设置作为一种变通方法。
Command-Line Format |
–sync-binlog=# |
|
Option-File Format |
sync_binlog |
|
Option Sets Variable |
Yes, sync_binlog |
|
Variable Name |
sync_binlog |
|
Variable Scope |
Global |
|
Dynamic Variable |
Yes |
|
Permitted Values |
||
Platform Bit Size |
32 |
|
Type |
numeric |
|
Default |
0 |
|
Range |
0 .. 4294967295 |
|
Permitted Values |
||
Platform Bit Size |
64 |
|
Type |
numeric |
|
Default |
0 |
|
Range |
0 .. 18446744073709547520 |
如果这个变量的值大于0,MySQL服务器每sync_binlog次写入二进制日志后同步它的二进制日志到磁盘(使用fdatasync())。如果启用了自动提交,每个语句一次写入到二进制日志,否则每一个事务一次写入。sync_binlog的默认值是0,它不同步到磁盘。值为1是最安全的选择,因为一次崩溃事件中,你至多从二进制日志中丢失一个语句或事务。然而,它也是最慢的选择(除非磁盘有带后备电池的高速缓存,这使得同步速度非常快)。
转载请注明:爱开源 » MySQL5.5服务器命令选项中文版(InnoDB存储引擎)