Mysql InnoDB 启动选项

FROM:http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html#innodb-configuration

innodb_additional_mem_pool_size     InnoDB用来存储数据目录信息&其它内部数据结构的内存池的大小。
    你应用程序里的表越多,你需要在这里分配越多的内存。如果InnoDB用光了这个池内的内存,InnoDB开始从操作系统分配内存,并且往MySQL错误日志写警告信息。 默认值是1MB
innodb_autoextend_increment     当自动扩展表空间被填满之时,为扩展而增加的尺寸(MB为单位)。 默认值是8。这个选项可以在运行时作为全局系统变量而改变。
innodb_buffer_pool_awe_mem_mb 这个参数最大的可能值是64000。如果你的32位Windows操作系统使用所谓的“地址窗口扩展(AWE)”支持超过4GB内存,你可以用这个参数把InnoDB缓冲池分配进AWE物理内存。
innodb_buffer_pool_size        对innodb_buffer_pool_size参数,一个比较好的值是500MB。 InnoDB用来缓存它的数据和索引的内存缓冲区的大小。你把这个值设得越高,访问表中数据需要得磁盘I/O越少。在一个专用的数据库服务器上,你可以设置这个参数达机器物理内存大小的80%。尽管如此,还是不要把它设置得太大,因为对物理内存的竞争可能在操作系统上导致内存调度。
innodb_checksums         InnoDB在所有对磁盘的页面读取上使用校验和验证以确保额外容错防止硬件损坏或数据文件。这个选项( 默认是允许的)可以用--skip-innodb-checksums来关闭。
innodb_data_file_path     到单独数据文件和它们尺寸的路径。innodb_data_home_dir连接到这里指定的每个路径,到每个数据文件的完整目录路径可被获得。
innodb_data_home_dir     默认是MySQL数据目录。你也可以指定这个值为一个空字符串,在这种情况下,你可以在innodb_data_file_path中使用绝对文件路径。
innodb_doublewrite  默认地,InnoDB存储所有数据两次,第一次存储到doublewrite缓冲,然后存储到确实的数据文件。这个选项可以被用来禁止这个功能。这个选项 默认是允许的用--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。
innodb_flush_method
    这个选项只在Unix系统上有效。如果这个选项被设置为fdatasync (默认值),InnoDB使用fsync()来刷新数据和日志文件。如果被设置为O_DSYNC,InnoDB使用O_SYNC来打开并刷新日志文件,但使用fsync()来 刷新数据文件。如果O_DIRECT被指定了(在一些GNU/Linux版本商可用),InnoDB使用O_DIRECT来打开数据文件,并使用fsync()来刷新数据和日志文件。注意,InnoDB使用fsync()来替代fdatasync(),并且它 默认不使用O_DSYNC,因为这个值在许多Unix变种上已经发生问题。
innodb_force_recovery
    警告:这个选项仅在一个紧急情况下被定义,当时你想要从损坏的数据库转储表。可能的值为从1到6。当这个选项值大于零之时,InnoDB阻止用户修改数据。
innodb_lock_wait_timeout
    InnoDB事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB在它自己的 锁定表中自动检测事务死锁并且回滚事务。
    InnoDB用LOCK TABLES语句注意到锁定设置。默认值是50秒
    为在一个复制建立中最大可能的持久程度和连贯性,你应该在主服务器上的my.cnf文件里使用innodb_flush_log_at_trx_commit=1和sync-binlog=1。
innodb_locks_unsafe_for_binlog 这个选项在InnoDB搜索和索引扫描中关闭下一键锁定。这个选项的 默认值是假(false)。
    正常地,InnoDB使用一个被称为next-key locking的算法。当搜索或扫描一个表索引之时,InnoDB以这样一种方式实行行级锁定,它对任何遇到的索引记录设置共享的或独占的锁定。
    因此,行级锁定实际是索引记录锁定。InnoDB对索引记录设置的锁定也影响被锁定索引记录之前的“gap”。
    CREATE TABLE A(A INT NOT NULL, B INT);
    INSERT INTO A VALUES (1,2),(2,3),(3,2),(4,3),(5,2);
    COMMIT;
    如果一个连接执行一个查询:
    SET AUTOCOMMIT = 0;
    UPDATE A SET B = 5 WHERE B = 3;
    并且其它连接跟着第一个连接执行其它查询:
    SET AUTOCOMMIT = 0;
    UPDATE A SET B = 4 WHERE B = 2;
    接着查询2要等查询1的提交或回滚,因为查询1对行(2,3)有一个独占的锁定,并且查询2在扫描行的同时也试着对它不能锁定的同一个行(2,3)采取一个独占的锁定。这是因为当innodb_locks_unsafe_for_binlog选项被使用之时,查询2首先对一个行采取一个独占的锁定,然后确定是否这个行属于结果包,并且如果不属于,就释放不必要的锁定。
    因此,查询1按如下执行:
    x-lock(1,2)
    unlock(1,2)
    x-lock(2,3)
    update(2,3) to (2,5)
    x-lock(3,2)
    unlock(3,2)
    x-lock(4,3)
    update(4,3) to (4,5)
    x-lock(5,2)
    unlock(5,2)
    并且查询2按如下执行:
    x-lock(1,2)
    update(1,2) to (1,4)
    x-lock(2,3) - 等待查询1提交或回滚
innodb_log_arch_dir
    如果我们使用日志档案,被完整写入的日志文件所在的目录也被归档。这个参数值如果被使用了,应该被设置得与innodb_log_group_home_dir一样。尽管如此,它不是必需的。
innodb_log_archive    因为MySQL使用它自己的日志文件从备份来恢复,所以当前没有必要来归档InnoDB日志文件。这个选项的 默认值是0
innodb_log_buffer_size
    InnoDB用来往磁盘上的日志文件写操作的缓冲区的大小。明智的值是从1MB到8MB。 默认的是1MB。一个大的日志缓冲允许大型事务运行而不需要在事务提交之前往磁盘写日志。因此,如果你有大型事务,使日志缓冲区更大以节约磁盘I/O。
innodb_log_file_size   
    在日志组里每个日志文件的大小。在32位计算机上日志文件的合并大小必须少于4GB。 默认是5MB。明智的值从1MB到N分之一缓冲池大小,其中N是组里日志文件的数目。值越大,在缓冲池越少需要检查点刷新行为,以节约磁盘I/O。但更大的日志文件也意味这在崩溃时恢复得更慢。   
innodb_log_files_in_group        在日志组里日志文件的数目。InnoDB以循环方式写进文件。默认是2(推荐)。
innodb_log_group_home_dir    到InnoDB日志文件的目录路径。它必须有和innodb_log_arch_dir一样的值。如果你不指定任何InnoDB日志参数, 默认的是在MySQL数据目录里创建两个5MB大小名为ib_logfile0和ib_logfile1的文件。
innodb_max_dirty_pages_pct    这是一个范围从0到100的整数。默认是90。InnoDB中的主线程试着从缓冲池写页面,使得脏页(没有被写的页面)的百分比不超过这个值。
        如果你有SUPER权限,这个百分比可以在服务器运行时按下面来改变: SET GLOBAL innodb_max_dirty_pages_pct = value;
innodb_max_purge_lag    默认值是,意为无延迟。这个选项可以在运行时作为全局系统变量而被改变。 控制在净化操作被滞后之时,如何延迟INSERT, UPDATE和DELETE操作。
innodb_mirrored_log_groups    我们为数据库保持的日志组内同样拷贝的数量。当前这个值应该被设为1
innodb_open_files    选项仅与你使用多表空间时有关。它指定InnoDB一次可以保持打开的.ibd文件的最大数目。最小值是10。 默认值300。仅对InnoDB的。它们独立于那些由--open-files-limit服务器选项指定的描述符,且不影响表缓存的操作。
innodb_status_file     这个选项让InnoDB为周期的SHOW INNODB STATUS输出创建一个文件<datadir>/innodb_status.<pid>。
innodb_support_xa     当被设置为ON或者1(默认地),这个变量允许InnoDB支持在XA事务中的 双向提交。如果你对使用XA并不关心,你可以通过设置这个选项为OFF或0来禁止这个变量,以减少磁盘 刷新的次数并获得更好的InnoDB性能。
innodb_table_locks     InnoDB重视LOCK TABLES,直到所有其它线程已经释放他们所有对表的锁定,MySQL才从LOCK TABLE .. WRITE返回。默认值是1,这意为LOCK TABLES让InnoDB内部锁定一个表。在使用AUTOCOMMIT=1的应用里,InnoDB的内部表锁定会导致死锁。你可以在my.cnf文件(Windows上是my.ini文件)里设置innodb_table_locks=0 来 消除这个问题。
innodb_thread_concurrency     InnoDB试着在InnoDB内保持操作系统线程的数量少于或等于这个参数给出的限制。如果有性能问题,并且SHOW INNODB STATUS显示许多线程在等待信号,可以让线程“thrashing” ,并且设置这个参数更小或更大。如果你的计算机有多个处理器和磁盘,你可以试着这个值更大以更好地利用计算机的资源。一个推荐的值是系统上处理器和磁盘的个数之和。值为500或比500大会禁止 调用并发检查。默认值是20,并且如果设置大于或等于20,并发检查将被禁止。

猜你喜欢

转载自zhengchao123.iteye.com/blog/1868174