事务的表存储引擎I
oDB时,所有未提交的二进制日志会被记录到一个缓存中,等该事务提交时直接将缓冲中的二进制日志写入二进制日志文件,而该缓冲的大小由bi
log_cache_size决定,默认大小为32KB。此外,bi
log_cache_size是基于会话的,当一个线程开始一个事务时,MySQL会自动分配一个大小为bi
log_cache_size的缓存,因此该值不能设置过大。当一个事务的记录大于设定的bi
log_cache_size时,MySQL会把缓冲中的日志写入一个临时文件中,因此该值又不能设得太小。通过查看bi
log_cache_use、
fbi
log_cache_disk_use的状态可以判断当前bi
log_cache_size的设置是否合适。Bi
log_cache_use记录了使用缓冲写二进制日志的次数,bi
log_cache_disk_use记录了使用临时文件写二进制日志的次数。如果bi
log_cache_disk_use与Bi
log_cache_use之间的比值很大,就应该增加bi
log_cache_size的值,只要保证大部分的事务都在二进制日志缓存里就可以了。bi
log_cache_disk_useBi
log_cache_use比值非常小,说明本系统绝大部份事务都能下入在二进制日志缓存。
Created_tmp_disk_tables
Created_tmp_tables
每次创建临时表时,Created_tmp_tables增加,如果是在磁盘上创建临时表,则Created_tmp_disk_tables也会增加
,
通常可以通过
Created_tmp_tablesCreated_tmp_disk_tablesCreated_tmp_tables来判断基于内存的临时表利用率。如果Created_tmp_disk_tables太大,则需要检查并优化查询语句,或有可能是tmp_table_size和max_heap_table_size不够大。Created_tmp_disk_tablesCreated_tmp_tables5就属于比较好的情况,如果该比值超过25则需要调整,本系统中该比值约为1124。tmp_table_size
max_heap_table_size
ftmp_table_size规定了内部内存临时表的最大值,每个线程都要分配,但实际起限制作用的是tmp_table_size和max_heap_table_size的最小值。如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下(showvariablesliketmpdir)。max_heap_table_size变量定义了用户可以创建的内存表memorytable的大小这个值用来计算内存表的最大行数值。这个变量支持动态改变,改变后对于已经存在的内存表就没有什么用了,除非这个表被重新创建createtable或者修改altertable或者tru
catetable。当然也可以在配置文件中设置全局变量。本系统中,只有32MB以下的临时表才能全部放内存,超过的就会用到硬盘临时表。基于内存的临时表利用率:Created_tmp_tablesCreated_tmp_disk_tablesCreated_tmp_tables≈90,该比值较理想,如果需要使用大数据量临时表时,则手工r