InnoDB:在fdatasync()和fsync()之间切换配置变量

影响:服务器- 8.0状态:完成

在fdatasync()可用的平台上,我们应该允许用户从fsync()切换到使用fdatasync()。基本上就是Linux。建议配置参数:——innodb-use-fdatasync:= bool
FR1 -在定义了fdatasync的平台上,设置——InnoDB -use-fdatasync将使InnoDB使用fdatasync而不是默认的fsync来清除os缓冲区。
引入一个新的MySQL变量来指示InnoDB是否应该使用fdatasync而不是fsync来执行操作系统的刷新。这是一个动态全局变量。当使用这个标志时,InnoDB将使用fdatasync系统调用,不会每次刷新访问的文件的元数据。这应该允许在某些场景中获得一些性能提高。
1)在ha_innodb中声明新的MYSQL_SYSVAR_BOOL。cc - use_fdatasync: static MYSQL_SYSVAR_BOOL(use_fdatasync, srv_use_fdatasync, PLUGIN_VAR_NOCMDARG, "Use fdatasync() instead of the default fsync().", nullptr, nullptr, false);2)在srv0srv.h中声明底层的bool (srv_use_fdatasync),并在srv0srv中定义。/**使用fdatasync()代替fsync()。*/ bool srv_use_fdatasync = false;3)在os0file。#if defined(HAVE_FDATASYNC) && defined(HAVE_DECL_FDATASYNC) const auto ret = srv_use_fdatasync ?fdatasync(文件):fsync(文件);#else const auto = fsync(file);# endif