1)mysql double write buffer参数详解
什么是double write buffe?参数innodb_doublewrite=1打开
us_card_online_mysql [(none)] [15:03:01]> show global variables like '%innodb_doublewrite%';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| innodb_doublewrite | ON |
+--------------------+-------+
是共享表空间的一段128个连续的page空间,刷新脏页时先通过memcpy函数将其复制到内存中doublewrite buffer,之后通过doublewrite buffer再分两次写,每次写入1M到共享表空间的物理磁盘上,然后马上调用fsync函数,同步磁盘。
2)自动提交autocommit=1
3)innodb_flush_log_at_trx_commit和sync_binlog
innodb_flush_log_at_trx_commit=0 每秒将log_buffer刷新到logfile,并且将日志同步刷新到磁盘。该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。
innodb_flush_log_at_trx_commit=1 每次commit将log_buffer刷新到logfile,并且将日志同步刷新到磁盘
innodb_flush_log_at_trx_commit=2 每次commit将log_buffer刷新到logfile,但是flush(刷到磁盘)操作并不会同时进行,每秒将日志刷新到磁盘
4) sync_binlog=0 像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
sync_binlog=1 MySQL在每写N次二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。如果启用了autocommit,那么每一个语句statement就会有一次写操作;否则每个事务对应一个写操作。
5) binlog_format:statment、row、mixed
statment sql语句型存储。将每条更改数据的sql记录到binlog。减少日志量,减少IO,缺点:不能复制默写特定的函数
row 行格式。只记录每行数据的更改的细节,不会记录sql上线文。而且不会出现某些特定情况下的存储过程,或function,以及trigger的调用和触发无法被正确复制的问题。缺点:日志量大,修改表结构,全表update等
mixed 混合型格式。基于两者之间
6)innodb_flush_method:frsync()、O_DSYNC、O_DIRECT open write flush三个阶段
frsync() 默认方式,write系统缓存即返回success
O_DSYNC 日志是write完成,数据是flush系统缓存完成
O_DIRECT 日志write磁盘缓存返回success,数据直接flush到磁盘返回success
7)read_buffer_size\read_rnd_buffer_size
顺序读取,无法使用索引的全表扫描或索引全表扫描
随机读取,根据索引读取表数据
8)IO threads>
innodb_write_io_threads:默认8
innodb_read_io_threads:默认8
MASTER threads>
innodb_purge_threads:刷新提交的undo
bulk_insert buffer thread: 为一次插入多条新记录的INSERT命令分配的缓存区长度
insert buffer:位于共享表空间中,对于非聚集索引的插入和更新,先判断索引页是否在缓冲池中,若不在插入到insert buffer中
innodb_change_buffering=all: 参数可选的值为:inserts、deletes、purges、changes、all、none.用来开启各种Buffer的选项
innodb_change_buffer_max_size=25:默认为25,表示最多使用1/4的缓冲池内存空间。而需要注意的是,该参数的最大有效值为50。
9)
thread_pool_max_threads=300: 线程池最大线程
innodb_thread_concurrency:并发线程数
innodb_thread_sleep_delay:微秒后尝试重练,如果第二次扔无法获得,则进入fifo队列休眠
innodb_concurrency_tickets:该请求被接受后,获得一个默认500次的通行证
10)
innodb_file_per_table=1: 独立表空间
innodb_autoextend_increment=64:表空间自增64M,该参数可以动态修改
11)
tmp_table_size=132M: 临时内存表大小
max_heap_table_size=64M:用户可以创建的内存表大小
这两个参数决定了如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下
Created_tmp_disk_tables/Created_tmp_tables<5%
12)
back_log: 值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它
13)自增参数
auto_increment_offset=1: 自增值的偏移量
auto_increment_increment=2: 自增值的自增量
如果在原有的序列中强制插入一个值,整体序列不受影响