innodb_flush_method 参数配置为 O_DIRECT:InnoDB Buffer Pool 走 Direct I/O,并且每次写操作导致的文件数据(包括文件元数据)都通过 fsync 系统调用刷新到磁盘;
写一条 redo log 涉及到的步骤有:
日志写入 Redo Log buffer;
日志写入 Page Cache;
通过系统调用 fsync 将 Page Cache 中的脏页刷新到磁盘;
日志提交;
修改表的一行记录涉及到的步骤有:
更新后的数据写于 InnoDB Buffer Pool;
定时进行如下逻辑(异步进行):
InnoDB Buffer Pool 脏数据进行刷新,通过文件的 write 方法进行;
文件的 write 方法直接导致数据写于磁盘上;
定时进行文件的 fysnc 调用,确保文件元数据写于磁盘上;
REFERENCE
[1]Buffer与Cache
[2]MySQL :: MySQL 8.0 Reference Manual :: 15.14 InnoDB Startup Options and System Variables
[3]MySQL 8.0 innodb_flush_method
[4]MySQL :: MySQL 8.0 Reference Manual :: 17.1.6.4 Binary Logging Options and Variables
[5]Why MYSQL still use fsync() to flush the data when the option is O_DIRECT?
Warning: mysqli_query(): (HY000/1030): Got error 28 from storage engine in /www/wwwroot/shulanxt/wp-includes/wp-db.php on line 2007 MySQL之EVENT事件 Warning: mysqli_query(): (HY000/1030): Got error 28 from storage engine in /www/wwwroot/shulanxt/wp-includes/wp-db.php on line 2007 zabbix如何监控MySQL