innodb_buffer_pool_size
innodb_buffer_pool_size 参数指的是内存中缓存 innodb 表的索引、数据的插入时缓冲,这是 innodb 参数优化的首要参数
innodb_buffer_pool_size 默认值是 8M,如果 mysql 所用的是专用的 DB 服务器,那么可以把这个数字设置为实际物理内存的 70% 到 80%,这个参数不能动态改变,所以配置时需要考虑:如果分配过大,那么会导致 mysql 占用内存过大,使机器 swap 增多,导致查询变慢
如果分配过小,又会由于缓存无法被充分利用而致使磁盘io增多,降低性能
通过 show engine innodb status 命令可以查看该参数
innodb_additional_mem_pool
innodb 内部目录存放空间大小
这个参数通常不需要配置太大,16M 即可,可以在运行时进行调整,如果数据库中表较多,可以适当增大该参数
通过 show engine innodb status 命令查看运行中的 DB 状态,Total memory allocated 与 in additional pool allocated 两项数值进行比较,可以根据实际情况适当调整
执行 innodb_additional_mem_pool=16M 可以设置该参数
innodb_file_per_table
是否为每个表使用独立的文件存储,参数为 0 或 1,1 是开启,0 是关闭
通常来说还是建议将这一项开启的
innodb_flush_logs_at_trx_commix
事务提交方式,有三种取值:0、1、2,默认为 1,推荐为了保证数据的可靠性,主库设置为 1,如果设置为 0 或 2 可以提高效率,但是会丢失 1 秒的事务0 -- log buffer 数据每隔 1 秒写入到日志文件中,并将文件刷新到磁盘,而事务提交不会触发写磁盘操作
1 -- 事务提交时立刻写入日志文件并刷新磁盘
2 -- 每次事务提交时,立即将数据写入文件,但每隔 1 秒刷新一次磁盘
autocommit
是否自动提交,1 表示启用,0 表示禁用,可以在运行时通过 SET AUTOCOMMIT = 1 或 0 来改变这一参数
当 AUTOCOMMIT = 0 时,所有查询都在一个事务中,直到显式 COMMIT 提交或 ROLLBACK 回滚,事务才结束,而该事务结束的同时又会开始一个新的事务
long_query_time
mysql 的日志功能非常强大,通常我们都会打开 binlog,而另一个重要的 log 就是慢查询日志
通过 set global log_low_queries=on 可以开启慢查询日志
通过 set global long_query_time 可以设置慢查询日志捕获慢查询的阈值(秒数),可以通过把这个值设为 0 让 mysql 捕获所有查询
但是,全部符合下列条件的查询才会被计入慢查询日志:查询必询不是管理语句,或者开启了log_slow_admin_statements
查询的时间至少是long_query_time的秒数,或者查询没有使用索引并且开启了log_queries_not_using_indexes
查询至少检索了min_examined_row_limit 的行数
查询必要不会根据log_throttle_queries_not_using_indexes 的设置而被抑制
所以如果设置没有生效,需要检查上述其他配置项是否影响了慢查询日志的记录
本文介绍了MySQL InnoDB存储引擎的关键参数,包括innodb_buffer_pool_size、innodb_additional_mem_pool、innodb_file_per_table等,详细解释了这些参数的作用及合理设置的方法。
1190

被折叠的 条评论
为什么被折叠?



