MySQL InnoDB存储引擎的一些参数

InnoDB做为MySQL目前最广泛的事务存储引擎,很多地方的设计和Oracle都是共通的。对于Oracle DBA来说,学习的时候可以多和Oracle的一些特性进行类比,当然也要明白二者之间的区别。

innodb_additional_mem_pool_size

用于缓存InnoDB数据字典及其他内部结构的内存池大小,类似于Oracle的library cache。这不是一个强制参数,可以被突破。

innodb_buffer_pool_size

内存缓冲池大小,用于缓存表和索引数据等。类似于Oracle的buffer cache,如果可能,尽可能的设置大一点。

innodb_log_buffer_size

日志缓冲区大小,类似于Oracle的log buffer

innodb_log_file_size

日志文件大小。默认会创建2个5M大小的名为ib_logfile0和ib_logfile1的文件。日志文件的数目由参数innodb_log_files_in_group指定。存放位置由innodb_log_group_home_dir指定。

innodb_data_file_path

指定InnoDB表空间数据文件名,大小以及其他属性。所有文件的加起来不能少于10M。多个数据文件之间以逗号分割,属性之间以冒号分割。默认创建一个大小10MB名为ibdata1的可自动扩展的数据文件,一般在生产环境中都需要根据实际情况指定,由于往表空间中添加数据文件需要停机,尽量在规划的时候做好准备,如果可以的话最好开启最后一个数据文件的自动增长属性。数据文件的个数在规划的时候还需要考虑另外一个innodb_open_files参数。

innodb_file_per_table

取值为ON或者OFF。是否为每个table使用单独的数据文件保存。如果系统中表的个数不多,并且没有超大表,使用该参数可以使得各个表之间的维护相对独立,有一定的好处。

innodb_autoextend_increment

当自动扩展表空间被填满之时,每次扩展空间的大小,默认值是8(单位MB)。该参数可以动态修改:

mysql> set global innodb_autoextend_increment=10;
Query OK, 0 rows affected (0.01 sec)

innodb_status_file

定期将show inndb status的结果输出保存到文件中,建议开启以便分析性能。

下面是windows上一个MySQL默认的参数查询结果:

mysql> show variables like ‘Innodb%';
+———————————+————————+
| Variable_name | Value |
+———————————+————————+
| innodb_additional_mem_pool_size | 2097152 |
| innodb_autoextend_increment | 8 |
| innodb_buffer_pool_awe_mem_mb | 0 |
| innodb_buffer_pool_size | 8388608 |
| innodb_checksums | ON |
| innodb_commit_concurrency | 0 |
| innodb_concurrency_tickets | 500 |
| innodb_data_file_path | ibdata1:10M:autoextend |
| innodb_data_home_dir | |
| innodb_doublewrite | ON |
| innodb_fast_shutdown | 1 |
| innodb_file_io_threads | 4 |
| innodb_file_per_table | OFF |
| innodb_flush_log_at_trx_commit | 1 |
| innodb_flush_method | |
| innodb_force_recovery | 0 |
| innodb_lock_wait_timeout | 50 |
| innodb_locks_unsafe_for_binlog | OFF |
| innodb_log_arch_dir | |
| innodb_log_archive | OFF |
| innodb_log_buffer_size | 1048576 |
| innodb_log_file_size | 10485760 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | .\ |
| innodb_max_dirty_pages_pct | 90 |
| innodb_max_purge_lag | 0 |
| innodb_mirrored_log_groups | 1 |
| innodb_open_files | 300 |
| innodb_rollback_on_timeout | OFF |
| innodb_support_xa | ON |
| innodb_sync_spin_loops | 20 |
| innodb_table_locks | ON |
| innodb_thread_concurrency | 8 |
| innodb_thread_sleep_delay | 10000 |
+———————————+————————+

更多InnoDB参数,请参考官方文档



无觅相关文章插件,快速提升流量

一条评论

  • […] 翻了一下blog,发现最早一篇关于MySQL的文章是2008.3.14,非常简单,只是了解了下InnoDB引擎的一些参数,其实也差不多是这个时候,淘宝DBA团队开始研究引入MySQL作为Oracle数据库之外的另外一种选择,还记得第一个线上用MySQL的应用是淘宝画报(这个应用今年6月份已经下线,进化成了顽图)。当时对于使用MySQL在一些开发团队中还是有一些阻力的,还记得曾经有人问过,DBA都是做Oracle的,MySQL出了问题你们能搞定么?所以当时面向全国到处招有经验的MySQL DBA,也面试了不少,但是最后因为各种原因都没有进来,后来倒是一来二往都比较熟悉了,现在idata技术沙龙有很多朋友的支持,其中就有不少当年认识的朋友,哈哈。既然招不到MySQL高手,只好自己培养新生力量,于是,2008年应届生@陶方 成为第一个专职MySQL DBA,2009年应届生@苏普 也很快成为了主要力量,而老牌的Oracle DBA们也在迅速的转型,2009年的时候MySQL数据库已经初具规模了。另外,从2007年起就开始和当时的架构团队@菲青,@华黎 畅想的数据中间层TDDL终于也逐渐靠谱起来,虽然还没有真正成熟(在我的定义里,TDDL直到动态数据源稳定应用以后,才算是挠到痒处,当然,成熟不等于就完美了,直到今天还有值得改进的地方,尤其是对于DBA的运维简化方面),有了前面说的服务化,还有数据中间层,以及一年多MySQL线上运行的经验,才有了“去IOE”的基础,而“去IOE”的需要,除了一眼就能看明白的成本节约,更重要的,是垂直拆分做到尽头以后,业务压力还是爆炸式增长带来的水平拆分的需要,以及淘宝整体对于开源的拥抱和投入。 […]


    (Required)
    (Required, will not be published)