查看“Mysql 双写缓冲区”的源代码
←
Mysql 双写缓冲区
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
双写缓冲区是一个存储区域,InnoDB 在将从缓冲池中刷新的页面写入 InnoDB 数据文件中的正确位置之前,先将其写入该区域。如果在页面写入过程中出现操作系统、存储子系统或意外的 mysqld 进程退出,InnoDB 可以在崩溃恢复期间从双写缓冲区中找到页面的良好副本。 尽管数据被写入两次,但双写缓冲区不需要两倍的 I/O 开销或两倍的 I/O 操作。数据以较大的连续块写入双写缓冲区,只需对操作系统进行一次 fsync() 调用(除非 innodb_flush_method 设置为 O_DIRECT_NO_FSYNC)。 双写缓冲区的存储区域位于双写文件中。 提供了以下变量用于双写缓冲区配置: * innodb_doublewrite innodb_doublewrite 变量控制双写缓冲区是否启用。在大多数情况下,默认启用。若要禁用双写缓冲区,请将 innodb_doublewrite 设置为 OFF。例如,在进行基准测试时,如果您更关注性能而非数据完整性,可以考虑禁用双写缓冲区。 innodb_doublewrite 支持 DETECT_AND_RECOVER 和 DETECT_ONLY 设置。 DETECT_AND_RECOVER 设置与 ON 设置相同。在此设置下,双写缓冲区完全启用,数据库页面内容写入双写缓冲区,在恢复期间可访问该缓冲区来修复不完整的页面写入。 在 DETECT_ONLY 设置下,仅将元数据写入双写缓冲区。数据库页面内容不会写入双写缓冲区,恢复过程也不会使用双写缓冲区来修复不完整的页面写入。此轻量级设置仅用于检测不完整的页面写入。 MySQL 支持在启用双写缓冲区的 ON、DETECT_AND_RECOVER 和 DETECT_ONLY 之间动态更改 innodb_doublewrite 设置。MySQL 不支持在启用和禁用双写缓冲区的设置之间进行动态更改,反之亦然。 如果双写缓冲区位于支持原子写入的 Fusion-io 设备上,双写缓冲区将自动禁用,而使用 Fusion-io 原子写入来执行数据文件写入。但是,请注意 innodb_doublewrite 设置是全局的。当双写缓冲区被禁用时,它会为所有数据文件禁用,包括那些不在 Fusion-io 硬件上的文件。此功能仅在 Fusion-io 硬件上受支持,并且仅在 Linux 上的 Fusion-io NVMFS 上启用。为充分利用此功能,建议将 innodb_flush_method 设置为 O_DIRECT。 * innodb_doublewrite_dir innodb_doublewrite_dir 变量定义了 InnoDB 创建双写文件的目录。如果未指定目录,则双写文件将在 innodb_data_home_dir 目录中创建,如果未指定该目录,则默认为数据目录。 “#”哈希符号会自动添加到指定的目录名称前,以避免与模式名称冲突。但是,如果在目录名称中明确指定了“.”、“#”或“/”前缀,则不会在目录名称前添加“#”哈希符号。 理想情况下,双写目录应放置在可用的最快存储介质上。 * innodb_doublewrite_files innodb_doublewrite_files 变量定义了双写文件的数量,默认值为 2。默认情况下,为每个缓冲池实例创建两个双写文件:一个刷新列表双写文件和一个 LRU 列表双写文件。 刷新列表双写文件用于从缓冲池刷新列表中刷新的页面。刷新列表双写文件的默认大小为 InnoDB 页面大小 * 双写页面字节数。 LRU 列表双写文件用于从缓冲池 LRU 列表中刷新的页面。它还包含用于单页刷新的插槽。LRU 列表双写文件的默认大小为 InnoDB 页面大小 * (双写页面 + (512 / 缓冲池实例数量)),其中 512 是为单页刷新保留的插槽总数。 至少有两个双写文件。双写文件的最大数量是缓冲池实例数量的两倍。(缓冲池实例的数量由 innodb_buffer_pool_instances 变量控制。) 双写文件名具有以下格式:#ib_page_size_file_number.dblwr(在 DETECT_ONLY 设置下为.bdblwr)。例如,对于 InnoDB 页面大小为 16KB 且只有一个缓冲池的 MySQL 实例,将创建以下双写文件: #ib_16384_0.dblwr #ib_16384_1.dblwr innodb_doublewrite_files 变量用于高级性能调优。默认设置应适合大多数用户。 * innodb_doublewrite_pages innodb_doublewrite_pages 变量控制每个线程的最大双写页面数量。此变量用于高级性能调优。默认值应适合大多数用户。 InnoDB 会自动对属于加密表空间的双写文件页面进行加密。同样,属于页面压缩表空间的双写文件页面也会被压缩。因此,双写文件可以包含不同的页面类型,包括未加密和未压缩的页面、加密的页面、压缩的页面以及既加密又压缩的页面。
返回至“
Mysql 双写缓冲区
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
基础知识
正则表达式
Markdown
分布式
项目管理
系统集成项目管理基础知识
云原生
Docker
云原生安全
云原生词汇表
十二因素应用
Kubernetes
音频处理
音频合成
Edge-tts
CMS系统
Docsify
VuePress
Mediawiki
自动生成
Marp
CI/CD
GitLab
设计
颜色
平面设计
AI
数字人
操作系统
GNU/Linux
数据库
Mysql
工具
链入页面
相关更改
特殊页面
页面信息