千家信息网

MySQL InnoDB常见参数详解

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,一、文件(数据文件、日志文件)1、相关参数:innodb_data_home_dirinnodb_data_file_path=file_name:file_size[:autoextend[:max
千家信息网最后更新 2024年11月18日MySQL InnoDB常见参数详解一、文件(数据文件、日志文件)
1、相关参数:
innodb_data_home_dir
innodb_data_file_path=file_name:file_size[:autoextend[:max:max_file_size]]

注:
a、innodb_data_file_path的值应该为一个或多个 数据文件规格的列表。如果命名一个以上的数据文件,用 分号(';')分隔它们
b、autoextend属性和后面跟着的属性只可被用来对innodb_data_file_path行里最后一个数据文件。
c、InnoDB不创建目录,所以在启动服务器之前请确认/ibdata目录的确存在
d、如果没有指定innodb_data_home_dir,则默认为mysql数据目录
e、如果你指定innodb_data_home_dir为一个空字符串,你可以为列在innodb_data_file_path值里的数据文件指定绝对路径。
[mysqld]
innodb_data_home_dir =
innodb_data_file_path=/ibdata/ibdata1:50M;/ibdata/ibdata2:50M:autoextend
二、参数
1、innodb_autoextend_increment(动态,默认为8M)
当自动扩展表空间被填满之时,为扩展而增加的尺寸(MB为单位)。
2、innodb_fast_shutdown(动态,默认为1)
0:在关闭之前做一个完全净化、插入缓冲合并和刷脏页,最慢,但重启最快
1:InnoDB在关闭之时跳过purge和insert buffer merge,只刷脏页
2:刷新日志并强制关闭,类似crash,数据不会丢,但在启动时会做一次崩溃恢复
mysql在关闭的时候进行的操作:
1、purge all:删除无用的undo页
2、merge insert buffer
3、flush dirty page
3、innodb_flush_log_at_trx_commit(动态,默认为1)
0:最快,日志缓冲按默认每秒一次地刷到磁盘,但在事务提交时不做操作,mysql崩溃时会丢失最后一秒的事务
1:最安全,日志缓冲按默认每秒一次地刷到磁盘,并在事务提交时刷新到日志文件,同时调用fsync刷新到磁盘
2:折中,日志缓冲按默认每秒一次地刷到磁盘,并在事务提交时刷新到日志文件,但不调用fsync,只有在系统崩溃时才会丢失最后一秒的事务
4、innodb_force_recovery(静态,默认为0),用于从损坏的DB转储数据
0:表示当需要恢复时执行所有的恢复操作(即校验数据页/purge undo/insert buffer merge/rolling back&forward).当不能进行有效的恢复操作时,mysql有可能无法启动,并记录下错误日志.
1.(SRV_FORCE_IGNORE_CORRUPT): 忽略检查到的corrupt页.
2.(SRV_FORCE_NO_BACKGROUND): 阻止主线程的运行,如主线程需要执行full purge操作,会导致crash.
3.(SRV_FORCE_NO_TRX_UNDO): 不执行事务回滚操作.
4.(SRV_FORCE_NO_IBUF_MERGE): 不执行插入缓冲的合并操作.
5.(SRV_FORCE_NO_UNDO_LOG_SCAN): 不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交.
6.(SRV_FORCE_NO_LOG_REDO): 不执行前滚的操作.
当设置参数值大于0后,可以对表进行select、create、drop操作,但insert、update、delete这类操作是不允许的
5、innodb_lock_wait_timeout
InnoDB事务在回滚之前可以等待一个锁定的秒数
6、innodb_max_dirty_pages_pct
InnoDB中的主线程试着从缓冲池写页面,使得脏页的百分比不超过这个值。
在show innodb status的log段中,可以查看Last checkpoint at与Log flushed up to的距离判断当前脏页的情况
在BUFFER POOL AND MEMORY中,查看Modified db pages与Buffer pool size的比例关系,该值约等于innodb_max_dirty_pages_pct

show innodb status\G;


LOG
---
Log sequence number 16 881655880
Log flushed up to 16 881649862
Last checkpoint at 16 546135914
可以看到检查点与log sequence number,Log flushed up to都有相当大的差距。

----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 19338953832; in additional pool allocated 13600768
Buffer pool size 1048576
Free buffers 17666
Database pages 1009478
Modified db pages 204553


修改的页占到整个数据库buffer pool页将近20%,大小为204553*16k/1024=3.196G
7、innodb_max_purge_lag
8、innodb_mirrored_log_groups(默认为1,没有镜像)
为数据库保持的日志组内同样拷贝的数量。
9、innodb_open_files
在InnoDB中,这个选项仅与你使用多表空间时有关。它指定InnoDB一次可以保持打开的.ibd文件的最大数目。最小值是10。 默认值300。
对.ibd文件的文件描述符是仅对InnoDB的。它们独立于那些由--open-files-limit服务器选项指定的描述符,且不影响表缓存的操作。


innodb_thread_concurrency
InnoDB试着在InnoDB内保持操作系统线程的数量少于或等于这个参数给出的限制。如果有性能问题,并
且SHOW INNODB STATUS显示许多线程在等待信号,可以让线程"thrashing" ,并且设置这个参数更小或更
大。如果你的计算机有多个处理器和磁盘,你可以试着这个值更大以更好地利用计算机的资源。一个推荐的值
是系统上处理器和磁盘的个数之和。值为500或比500大会禁止 调用并发检查。默认值是20,并且如果设置大
于或等于20,并发检查将被禁止。
· innodb_status_file
这个选项让InnoDB为周期的SHOW INNODB STATUS输出创建一个文件/innodb_status.
0