您的位置:首页 > 数据库 > MySQL

MySQL 5.5 服务器变量详解(三)

2016-01-11 00:00 676 查看
innodb_log_group_home_dir=/PATH/TO/DIR

设定InnoDB重做日志文件的存储目录。在缺省使用InnoDB日志相关的所有变量时,其默认会在数据目录中创建两个大小为5MB的名为ib_logfile0和ib_logfile1的日志文件。作用范围为全局级别,可用于选项文件,属非动态变量。

innodb_max_dirty_pages_pct={0 .. 99}

设定InnoDB的缓冲池中脏页比例的上限,默认为75。当缓存池中的脏页比例接近或达到此变量定义的比值时,InnoDB的主线程会将刷写部分脏页中的数据至对应的文件中。作用范围为全局级别,可用于选项文件,属动态变量。

innodb_max_purge_lag={0 .. 4294967295}

InnoDB事务系统会维持一个有索引记录被添加了删除标记(delete-marked)的事务的列表,此列表的长度即为清写延迟(purge_lag)。此变量用于设定当发生清写延迟时,其队列长度达到多大时开始延迟INSERT、UPDATE或DELETE操作。当puge_lag超过innodb_max_purge_lag时,将延迟这些操作((purge_lag/innodb_max_purge_lag)*10)-5毫秒。默认值为0,表示从不延迟这些操作。需要进行操作延迟与否是在purge操作刚开始时计算的,并且每隔10秒钟会重新计算一次。基于历史地原因,purge操作无法启动时是不会有任何操作延迟的情况发生。作用范围为全局级别,可用于选项文件,属动态变量。

innodb_mirrored_log_groups=#

设定日志组镜像的个数。其值应该为1。

innodb_old_blocks_pct={5 .. 95}

InnoDB以“列表”结构管理缓存池,并使用修改版的LRU算法对其执行维护操作。当需要空间以保存新块(new block)时,InnoDB会清理最近最少使用的块并将新块加入到列表中。“中点插入策略(midpoint insertion policy)”将整个列表看作两个子列表:在列表首部是那些最近被访问过的新块(new/young block)子列表,尾部是那些最近较少被访问到的旧块(lod block)子列表。而LRU算法和中点插入策略用于保证将最近经常被访问到的块置于新块子列表,InnoDB新读入的块将被置于旧块子列表的前头,并根据需要将旧块子列表中的块移除。而某个被再次访问到的旧块则会被移至新块子列表的首部。表扫描操作可能会一次性地向缓存池中读入大量的数据块并可能导致一大批旧块被移出。

此变量正是用于设置被视作旧块子列表的长度所占据整个列表长度的比例,默认值是37,即缓存池的八分之三。作用范围为全局级别,可用于选项文件,属动态变量。

innodb_old_blocks_time=#

用于设定缓冲池中旧块子列表中的某旧块在其第一次又被访问到时,其至少需要在旧块子列表中再呆上多长时间(单位为毫秒)才会被转移至新块子列表。默认值是0,表示立即转移至新块子列表,哪怕其刚刚被转移至旧块子列表。而非零值则明确定义旧块列表中的块在其第一次被访问到时至少需要在旧块子列表中等待转移的时长。此变量通常要结合innodb_old_blocks_pct使用。作用范围为全局级别,可用于选项文件,属动态变量。

innodb_open_files=#

设定MySQL可同时打开的.ibd表空间文件的数量上限。此变量仅在使用多表空间文件时生效,其最小值为10,默认值为300。此变量的限定仅应用于InnoDB表的.ibd文件,跟MySQL服务器选项--open-files-limit没有关系,更不会影响表缓存的操作。作用范围为全局级别,可用于选项文件,属非动态变量。

innodb_purge_batch_size={1 .. 5000}

清写(purge)是指将缓存池中的脏页同步至持久性存储设备中的操作,以重做日志的记录为单位。此变量则用于定义清写操作的粒度,即多少个重做日志记录组合起来可以触发一次清写操作,默认值为20。此变量通常用于跟innodb_purge_threads=1一起对进行性能调优,但一般场景中都不需要修改它。作用范围为全局级别,可用于选项文件,属非动态变量。

innodb_purge_threads={0|1}

设定InnoDB执行清写操作的线程数量。默认值为0,表示清写操作由InnoDB的主线程自己完成,这可以降低内部资源竞争发生的概率,进而增强MySQL服务伸缩能力。不过,随着InnoDB内部各式各样的竞争越来越多,这种设置带来的性能优势已几乎不值一提。作用范围为全局级别,可用于选项文件,属动态变量。

innodb_read_ahead_threshold={0 .. 64}

设定InnoDB预读页面至缓冲池时的线性预读敏感度,也即InnoDB的读操作至少从一个盘区(extent,包含64个页面)中读取多个页面时才会为读取整个盘区中后续的页面初始化一个异步读操作。默认值为56。作用范围为全局级别,可用于选项文件,属动态变量。

innodb_read_io_threads={1 .. 64}

设定InnoDB为读操作启动的I/O线程数量,默认为4个。作用范围为全局级别,可用于选项文件,属非动态变量。

innodb_replication_delay={0 .. 4294967295}

设定在从服务器(slave)上运行的线程数达到innodb_thread_concurrency变量定义的并发上限时复制线程需要延迟的时长。默认为0,表示不延迟。作用范围为全局级别,可用于选项文件,属动态变量。

innodb_rollback_on_timeout={ON|OFF}

设定事务执行过程超时时事务回滚的方式。在MySQL 5.5中,默认为OFF,表示仅回滚事务中的最后一个语句。如果设置为ON,则表示中止事务执行并回滚整个事务。作用范围为全局级别,可用于选项文件,属非动态变量。

innodb_rollback_segments={1 .. 128}

设定InnoDB在系统表空间中为每个事务使用多少个回滚段(rollback segment),默认为128个。如果较少的回滚段可以提升系统性能,则应该降低此变量的值。作用范围为全局级别,可用于选项文件,属动态变量。

innodb_spin_wait_delay={0 .. 4294967295}

自旋(spin)是一种通过不间断地测试来查看一个资源是否变为可用状态的等待操作,用于仅需要等待很短的时间等待所需资源的场景。使用自旋这种“空闲循环(busy-loop)”来完成资源等待的方式要比通过上下文切换使线程转入睡眠状态的方式要高效得多。但如果自旋了一个很短的时间后其依然无法获取资源,则仍然会转入前述第二种资源等待方式。此变量则正是用于定义InnoDB自旋操作的空闲循环转数,默认为6转。作用范围为全局级别,可用于选项文件,属动态变量。

innodb_stats_method={nulls_equal|nulls_unequal|null_ignored}

设定MySQL为InnoDB表收集分布的索引值的统计数据时如何处理NULL类型的数据。其可接受的值有三个,null_equals意指将所有的NULL值视为相同,并为之创建一个值组(value group)以保存NULL类值的个数;nulls_unequal意指将所有的NULL值视为不同,并为每个NULL单独创建一个大小为1的值组;nulls_ignored表示所有的NULL值都被忽略。这些用于生成表统计数据的方法会影响到优化器为执行查询如何选择选择索引。作用范围为全局级别,可用于选项文件,属动态变量。

innodb_stats_on_metadata={OFF|ON}

设定使用SHOW TABLE STATUS或者SHOW INDEX这两个元数据语句时,或访问INFORMATION_SCHEMA中的TABLES或STATISTICS表时,InnoDB是否更新统计数据。默认为更新。禁用此功能可以加速访问有着大量的表或索引的数据库,也可能提升InnoDB表上查询操作执行计划(execution plan)的稳定性。作用范围为全局级别,可用于选项文件,属动态变量。

innodb_strict_mod={ON|OFF}

为防止无视SQL语句书写或语法中的错误或无视操作模式与SQL语句各种组合中的无心之过,InnoDB提供了所谓的严格模式。严格模式中,前述的问题一旦出现将会导致InnoDB产生一个错误,而非警告和一系列特定的处理操作。此参数则正是用于定义是否启用InnoDB的严格模式,默认为OFF。

innodb_support_xa={TRUE|FLASE}

存储引擎事务在存储引擎内部被赋予了ACID属性,分布式(XA)事务是一种高层次的事务,它利用“准备”然后“提交”(prepare-then-commit)两段式的方式将ACID属性扩展到存储引擎外部,甚至是数据库外部。然而,“准备”阶段会导致额外的磁盘刷写操作。XA需要事务协调员,它会通知所有的参与者准备提交事务(阶段1)。当协调员从所有参与者那里收到“就绪”信息时,它会指示所有参与者进行真正的“提交”操作。

此变量正是用于定义InnoDB是否支持两段式提交的分布式事务,默认为启用。事实上,所有启用了二进制日志的并支持多个线程同时向二进制日志写入数据的MySQL服务器都需要启用分布式事务,否则,多个线程对二进制日志的写入操作可能会以与原始次序不同的方式完成,这将会在基于二进制日志的恢复操作中或者是从服务器上创建出不同原始数据的结果。因此,除了仅有一个线程可以改变数据以外的其它应用场景都不应该禁用此功能。而在仅有一个线程可以修改数据的应用中,禁用此功能是安全的并可以提升InnoDB表的性能。作用范围为全局和会话级别,可用于选项文件,属动态变量。

innodb_sync_spin_loops={0 .. 4294967295}

设定一个线程在等待InnoDB释放某个互斥量(mutex)之前自旋的转数,当自旋操作达到这个转数但互斥量仍未被释放时此线程将被挂起。默认值为30。作用范围为全局级别,可用于选项文件,属动态变量。

innodb_table_locks={ON|OFF}

InnoDB在存储引擎级别支持行级锁,而MySQL在服务器级别还支持使用表级锁。此变量则正是用来定义InnoDB是否在其内部支持使用MySQL表级锁。默认值为1或ON,表示如果autocommit变量的值为0(即禁止自动提交),在InnoDB表上显式使用LOCK TABLES语句将使得InnoDB在存储引擎内部锁定此表。使用0或OFF值,则意味着显式使用LOCKS TABLE...WRITE语句不会在存储引擎级别产生影响,但对其它显式使用的LOCK TABLES...WRITE或LOCK TABLES...READ语句依然会有影响。作用范围为全局和会话级别,可用于选项文件,属动态变量。

innodb_thread_concurrency={0...1000}

设定InnoDB可在其内部并发运行的操作系统线程数量上限。多出的线程将被放置于FIFO队列进行等待,且不被计入并发运行线程数量。对于不用的应用场景来说,其理想的取值取决于硬件环境和工作负载,一般推荐为CPU个数的2倍加上磁盘的个数。默认值为0,表示无上限(不检查并发数量),这意味着InnoDB可以按需要使用任意数量的并发线程,并会禁用SHOW ENGINE INNODB STATUS中的queries inside InnoDB和queries in queue counters两个计数器。作用范围为全局级别,可用于选项文件,属动态变量。

innodb_thread_sleep_delay=#

设定InnoDB线程在加入InnoDB队列之前的睡眠时长,单位是毫秒,默认值为10000。0值表示禁止睡眠而直接加入队列。作用范围为全局级别,可用于选项文件,属动态变量。

innodb_use_native_aio={ON|OFF}

设定InnoDB是否使用Linux的异步I/O子系统,因此,其仅应用于Linux系统平台,且MySQL启动后不能更改其值。InnoDB默认会启用此功能,而InnoDB如果因为Linux的异步I/O子系统的问题而无法正常启动,可以在选项文件中将此变量设置为OFF并重新启动之。事实上,就算变量值为ON,如果MySQL服务启动探测到了潜在的问题如联合的临时目录路径、tmpfs文件系统以及Linux内核不支持在tmpfs上使用AIO机制时也会自动关闭此变量。作用范围为全局级别,可用于选项文件,属非动态变量。

innodb_use_sys_malloc={ON|OFF}

设定InnoDB使用操作系统的(ON)还是自有的(OFF)内存分配器。默认值为ON。

innodb_version=STRING

InnoDB存储引擎的版本号,只读变量。

innodb_write_io_threads={1 .. 64}

设定InnoDB用于完成写操作的I/O线程数量,默认为4个。

附:InnoDB的数据字典指的是跟踪InnoDB相关的对象如表、索引或表中的字段等的元数据信息,这些元数据存储在InnoDB的系统表空间中(system tablespace)。历史地原因,它跟.frm文件中的某些数据有重叠的地方。

参考链接 http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html

作者原创,开源文档。理解或有不当之处,欢迎讨论,群号:279599283。转载请务必保留此链接,
http://my.oschina.net/magedu/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息