binlog写盘后多久flush的机制

来源:互联网 发布:宝马撞人案与网络舆论 编辑:程序博客网 时间:2024/06/10 06:20
std::pair<bool, bool>

MYSQL_BIN_LOG::sync_binlog_file(bool force)

mysql_file_sync

int my_win_fsync(File fd)


mysql_bin_log.write_cache

MYSQL_BIN_LOG::write_cache


MYSQL_QUERY_LOG::write(


my_b_write(


Query_log_event::write(

get_binlog_accessed_db_names

case THD::STMT_QUERY_TYPE: //获取binlog的内容

int my_b_safe_write(IO_CACHE *info, const uchar *Buffer, size_t Count)

Binlog最大值,最大和默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束

sync_binlog
这个参数直接影响mysql的性能和完整性

sync_binlog=0
当事务提交后,Mysql仅仅是将binlog_cache中的数据写入Binlog文件,但不执行fsync之类的磁盘        同步指令通知文件系统将缓存刷新到磁盘,而让Filesystem自行决定什么时候来做同步,这个是性能最好的。

sync_binlog=n,在进行n次事务提交以后,Mysql将执行一次fsync之类的磁盘同步指令,同志文件系统将Binlog文件缓存刷新到磁盘。

Mysql中默认的设置是sync_binlog=0,即不作任何强制性的磁盘刷新指令,这时性能是最好的,但风险也是最大的。一旦系统绷Crash,在文件系统缓存中的所有Binlog信息都会丢失


0 0
原创粉丝点击