innodb_log&并发参数设置--(深入浅出读书笔记)

==innodb log==
1.redo log
更新数据的时候,innodb内部的操作流程大致是:
1》将数据读入innodb buffer pool,并对相关记录加独占锁;
2》将undo信息写入undo表空间的回滚段中;
3》更改缓存页中的数据,并将更新记录写入redo buffer
4》提交时,根据innodb_flush_log_at_trx_commit的设置,用不同的方式将redo buffer中的更新记录刷新到inndb redolog file ,释放独占锁。
5》后台IO线程根据需要将缓存中更新过的数据刷到磁盘。
LSN( log sequence number 日志序列号)对应日志文件的偏移量
新的LSN=旧的LSN+写入日志大小
 
2.innodb_flush_log_at_trx_commit
  该参数可以控制redo buffer 的更新记录写入到日志文件以及日志文件的数据刷新到磁盘的操作时机。默认值为1,提高性能并能容忍数据库丢失小部分数据,可选择2,能减少IO次数;
 
3.innodb_log_file_size 
  该参数可以控制日志写到某个size切换到另一个日志文件;切换时会触发checkpoint,导致innodb缓存脏页的刷新,会降低性能。一般以innodb半小时的日志量来设置;
  计算innodb每分钟的日志量:
mysql> pager grep -i "log sequence number"
PAGER set to 'grep -i "log sequence number"'
mysql> show engine innodb status\G select sleep(60); show engine innodb status\G
Log sequence number 2491260195
1 row in set (0.00 sec)
 
1 row in set (1 min 0.00 sec)
 
Log sequence number 2521268195
1 row in set (0.00 sec)
(2521268195-2497280298)/1024/1024 作为mb;然后把30*这个数值;取一个2的n次方;
mysql> select round((2521268195-2497280298)/1024/1024)  as mb;
+------+
| mb   |
+------+
|   23 |
+------+
1 row in set (0.00 sec)
将23mb*30min=半小时的日志量690M,至少应该设置为512mb;
 
4.innodb_log_buffer_size
  该参数决定redo_log的缓存池大小,默认8MB,可能产生大量更新记录的大事务,可以增加参数大小
 
 
=====MySQL并发参数=====
1.max_connections
  最大连接数,在RDS的基本配置中,排除弹性升级的话,最高连接数是2000
2.back_log
  该参数是控制MySQL监听TCP端口时设置的积压请求栈大小,5.6版本默认50+,是5的倍数,最大不能超过900;阿里RDS的参数设置为3000
3.table_open_cache 
  该参数可以控制所有sql执行线程可以打开表缓存的数量。一般设定为最大连接数*关联查询涉及到的表的最大数量
4.thread_cache_size
  该参数是控制缓存客户服务线程的数量;可以根据threads_created/connections 急速那线程cache的失效率,越接近1,说明cache命中率越低,应当增加参数的值
5.innodb_lock_wait_timeout
  该参数可以控制innodb事务等待行锁的时间。默认是50ms,注意单位

posted on 2018-03-06 14:31  Kid_Zora  阅读(278)  评论(0编辑  收藏  举报

导航