MySQL:Innodb:innodb_flush_log_at_trx_commit参数影响的位置
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,源码5.7.22影响阶段:MYSQL_BIN_LOG::ordered_commit 的flush阶段一、影响的函数innobase_flush_logs函数,函数如下其实注释也写得很清楚了。binl
千家信息网最后更新 2025年02月01日MySQL:Innodb:innodb_flush_log_at_trx_commit参数影响的位置
源码5.7.22
影响阶段:MYSQL_BIN_LOG::ordered_commit 的flush阶段
一、影响的函数
innobase_flush_logs函数,函数如下其实注释也写得很清楚了。binlog_group_flush 参数为1。
/** Flush InnoDB redo logs to the file system.@param[in] hton InnoDB handlerton@param[in] binlog_group_flush true if we got invoked by binloggroup commit during flush stage, false in other cases.@return false */staticboolinnobase_flush_logs( handlerton* hton, bool binlog_group_flush){ DBUG_ENTER("innobase_flush_logs"); DBUG_ASSERT(hton == innodb_hton_ptr); if (srv_read_only_mode) { DBUG_RETURN(false); } /* If !binlog_group_flush, we got invoked by FLUSH LOGS or similar. Else, we got invoked by binlog group commit during flush stage. */ if (binlog_group_flush && thd_flush_log_at_trx_commit(NULL) == 0) { /* innodb_flush_log_at_trx_commit=0 (write and sync once per second). Do not flush the redo log during binlog group commit. */ DBUG_RETURN(false); } /* Flush the redo log buffer to the redo log file. Sync it to disc if we are in FLUSH LOGS, or if innodb_flush_log_at_trx_commit=1 (write and sync at each commit). */ log_buffer_flush_to_disk(!binlog_group_flush || thd_flush_log_at_trx_commit(NULL) == 1); DBUG_RETURN(false);}
二、可能的组合
innodb_flush_log_at_trx_commit参数为 0
binlog_group_flush && thd_flush_log_at_trx_commit(NULL) == 0 条件成立,因此直接return了,那么这种情况下log_buffer_flush_to_disk函数不会调用,因此不会做redo刷盘。依赖master线程。innodb_flush_log_at_trx_commit参数为 1
!binlog_group_flush|| thd_flush_log_at_trx_commit(NULL) == 1 返回为1即为True,因此调用log_buffer_flush_to_disk(True),因此需要做redo刷盘,也要做sync。innodb_flush_log_at_trx_commit参数为 2
!binlog_group_flush|| thd_flush_log_at_trx_commit(NULL) == 1 返回为0即为Flase,因此调用
log_buffer_flush_to_disk(Flase),因此需要做redo刷盘,不做sync。依赖OS的刷盘机制。
三、调用栈帧
#0 innobase_flush_logs (hton=0x2e9edd0, binlog_group_flush=true) at /root/mysql5.7.14/percona-server-5.7.14-7/storage/innobase/handler/ha_innodb.cc:4385#1 0x0000000000f65893 in flush_handlerton (thd=0x0, plugin=0x7ffff01558e8, arg=0x7ffff0155944) at /root/mysql5.7.14/percona-server-5.7.14-7/sql/handler.cc:2606#2 0x00000000015d7716 in plugin_foreach_with_mask (thd=0x0, func=0xf65835, type=1, state_mask=4294967287, arg=0x7ffff0155944) at /root/mysql5.7.14/percona-server-5.7.14-7/sql/sql_plugin.cc:2318#3 0x0000000000f658ef in ha_flush_logs (db_type=0x0, binlog_group_flush=true) at /root/mysql5.7.14/percona-server-5.7.14-7/sql/handler.cc:2617#4 0x000000000185733d in MYSQL_BIN_LOG::process_flush_stage_queue (this=0x2e01c80, total_bytes_var=0x7ffff0155a88, rotate_var=0x7ffff0155a87, out_queue_var=0x7ffff0155a78) at /root/mysql5.7.14/percona-server-5.7.14-7/sql/binlog.cc:8541#5 0x000000000185899f in MYSQL_BIN_LOG::ordered_commit (this=0x2e01c80, thd=0x7fff2c000b70, all=false, skip_commit=false) at /root/mysql5.7.14/percona-server-5.7.14-7/sql/binlog.cc:9189#6 0x000000000185700c in MYSQL_BIN_LOG::commit (this=0x2e01c80, thd=0x7fff2c000b70, all=false) at /root/mysql5.7.14/percona-server-5.7.14-7/sql/binlog.cc:8440#7 0x0000000000f63df8 in ha_commit_trans (thd=0x7fff2c000b70, all=false, ignore_global_read_lock=false) at /root/mysql5.7.14/percona-server-5.7.14-7/sql/handler.cc:1818#8 0x00000000016b3e5d in trans_commit_stmt (thd=0x7fff2c000b70) at /root/mysql5.7.14/percona-server-5.7.14-7/sql/transaction.cc:458#9 0x00000000015ac677 in mysql_execute_command (thd=0x7fff2c000b70, first_level=true) at /root/mysql5.7.14/percona-server-5.7.14-7/sql/sql_parse.cc:5239#10 0x00000000015adcd6 in mysql_parse (thd=0x7fff2c000b70, parser_state=0x7ffff0158600) at /root/mysql5.7.14/percona-server-5.7.14-7/sql/sql_parse.cc:5836#11 0x00000000015a1b95 in dispatch_command (thd=0x7fff2c000b70, com_data=0x7ffff0158d70, command=COM_QUERY) at /root/mysql5.7.14/percona-server-5.7.14-7/sql/sql_parse.cc:1447#12 0x00000000015a09c6 in do_command (thd=0x7fff2c000b70) at /root/mysql5.7.14/percona-server-5.7.14-7/sql/sql_parse.cc:1010#13 0x00000000016e29d0 in handle_connection (arg=0x3803f30) at /root/mysql5.7.14/percona-server-5.7.14-7/sql/conn_handler/connection_handler_per_thread.cc:312#14 0x0000000001d7b4b0 in pfs_spawn_thread (arg=0x3810b80) at /root/mysql5.7.14/percona-server-5.7.14-7/storage/perfschema/pfs.cc:2188#15 0x0000003f74807aa1 in start_thread () from /lib64/libpthread.so.0#16 0x0000003f740e8bcd in clone () from /lib64/libc.so.6
作者微信:gaopp_22389860
参数
函数
影响
阶段
清楚
作者
情况
机制
条件
注释
源码
线程
组合
位置
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
计算机网络技术的前景怎么样
网页如何调用数据库 asp
北京博宇网络技术有限公司
大观园平面图软件开发
3 d游戏软件开发
市北区苹果软件开发哪家便宜
连云港网络服务器机柜直接供货
宁波大学无线网络技术
企业违反网络安全法第24条
想从软件开发转行
西昌学院网络技术
通用的数据库管理工具
做网站需要数据库吗
共享电单车软件开发公司
英德市税务局网络安全建设
戴尔r630服务器管理口
有偿软件开发
苹果公司6G网络技术
云服务器显示未激活
网络安全知识手抄报内容小诗
战地5怎么去没有挂的服务器
数据库输入
宽表数据库国际技术
域名备案需要服务器备案号码
pe系统数据库
如何打开电脑数据库文件
生产管理软件数据库设计
苹果公司6G网络技术
服务器链接不上怎么解决
汉特网络技术有限公司