innodb_flush_log_at_trx_commit 和 sync_binlog 参数解析

news/2024/12/5 4:19:37/

这两个参数和MySQL的一致性以及性能相关,默认配置大多数情况下不是最优的。一般来说,互联网线上系统的配置:

innodb_flush_log_at_trx_commit —— 0

sync_binlog —— 1000

一、innodb_flush_log_at_trx_commit 事务提交刷盘时机

如果我们想要提交一个事务了,会根据一定的策略把 redo 日志从 redo log buffer 刷入到磁盘文件里去。通过 innodb_flush_log_at_trx_commit 来配置的:

值为0 : 提交事务的时候,不立即把 redo log buffer 数据刷入磁盘文件,而是依靠 InnoDB 的主线程每秒执行一次刷新到磁盘。此时可能你提交事务了,结果 mysql 宕机了,然后此时内存里的数据全部丢失。

值为1 : 提交事务的时候,必须把 redo log 从内存刷入磁盘文件,只要事务提交成功,那么 redo log 就必然在磁盘里了。注意,因为操作系统的“延迟写”特性,此时的刷入只是写到了操作系统的缓冲区中,因此执行同步操作才能保证一定持久化到了硬盘中。

值为2 : 提交事务的时候,把 redo 日志写入磁盘文件对应的 os cache 缓存里去,而不是直接进入磁盘文件,可能 1 秒后才会把 os cache 里的数据写入到磁盘文件里去。

可以看到,只有1才能真正地保证事务的持久性,但是由于刷新操作 fsync() 是阻塞的,直到完成后才返回,写磁盘速度很慢,因此 MySQL 的性能会明显地下降。

如果不在乎事务丢失,0和2能获得更高的性能。

# 查询
select @@innodb_flush_log_at_trx_commit;

二、sync_binlog 控制着二进制日志写入磁盘的过程

该参数的有效值为0 、1、N:

0:默认值。事务提交后,将二进制日志从Buffer写入磁盘,但是不进行刷新操作(fsync()),此时只是写入了操作系统缓冲,若操作系统宕机则会丢失部分二进制日志。

1:事务提交后,将二进制文件写入磁盘并立即执行刷新操作,相当于是同步写入磁盘,不经过操作系统的缓存。

N:每写N次操作系统缓冲就执行一次刷新操作。

将这个参数设为1以上的数值会提高数据库的性能,但同时会伴随数据丢失的风险。

二进制日志文件涉及到数据的恢复,以及想在主从之间获得最大的一致性,那么应该将该参数设置为1,但同时也会造成一定的性能损耗。

默认,sync_binlog=0,表示MySQL不控制binlog的刷新,由文件系统自己控制它的缓存的刷新。这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。

对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。

所以很多MySQL DBA设置的sync_binlog并不是最安全的1,而是100或者是0。这样牺牲一定的一致性,可以获得更高的并发和性能。


http://www.ppmy.cn/news/60998.html

相关文章

15. Pod 自动管理——ReplicaSet 和 Deployment

本章讲解知识点 前言ReplicaSet 和 DeploymentDeployment 的升级Deployment 的回滚1. 前言 通过前面对 Pod 的由浅入深的了解后,我们知道了 Kubernetes 中最小的部署单元就是 Pod,Pod 确实也很方便,配置一些参数就能够有很多强大的功能,如探针检查、preStop 等。 Pod 这个…

Golang中context包使用场景和示例详解

之前的文章《Golang中context包基础知识详解》详细介绍了context包的基础知识和使用时需要注意的点,本文结合示例代码讲解一下context包的几种使用场景。 控制子协程退出 context包提供了一种机制,可以在多个goroutine之间进行通信和控制。使用Context…

基于web的商场商城后台管理系统

该系统用户分为两类:普通员工和管理员。普通员工是指当前系统中的需要对商品和客户的信息进行查询的人。此类用户只能查看自己的信息,以及对商品和客户的信息进行查看。管理员用户可以对自己和他人的信息进行维护,包括对商品入库、销售、库存…

2000-2019年30省研发资本存量(含计算过程和原始数据)

2000-2019年30省份研发资本存量(含计算过程和原始数据)/2000-2019年30个省市R&D资本存量或研发资本存量数据 1、时间:2000-2019年 2、范围:包括30个省市不含西藏 3、指标:省研发资本存量 4、参考文献&#xff…

现代CMake高级教程 - 第 8 章:跨平台与编译器

双笙子佯谬老师的【公开课】现代CMake高级教程课程笔记 第 8 章&#xff1a;跨平台与编译器 在 CMake 中给 .cpp 定义一个宏 #include <cstdio>int main() { #ifdef MY_MACROprintf("MY_MACRO defined! value: %d\n", MY_MACRO); #elseprintf("MY_MACR…

TS2322错误解决方案

废话 之前写C#&#xff0c;所以使用强类型的语言比较习惯&#xff0c;用js觉得有些自由散漫了&#xff0c;所以学习学习ts,结果感觉ts也有好多坑&#xff0c;好多限制&#xff0c;但是又不想使用ts-ingore。多少有点强迫症吧 从网上找了好久都没找到方法。以下方法不一定是主…

【JavaEE】CSS基础知识

文章目录 1.CSS概念1.1CSS是干啥的&#xff1f;1.2基础语法规范1.2基础语法规范1.3引入格式✨内部样式表✨行内样式表✨外部样式&#xff08;最常用的样式&#xff09; 1.4代码风格✨样式格式✨样式大小写 2.选择器2.1选择器的功能2.2基础选择器有哪些&#xff1f;&#x1f6e0…

携手中国电信打造 5G 智慧机场, ALVA Systems 创新 AR 应用闪耀云生态成果展

4 月 26 日&#xff0c;由国家网信办、国家发改委、科技部、工信部、国务院国资委、福建省人民政府共同主办&#xff0c;福州市人民政府等有关单位承办的第六届数字中国建设峰会数字福州暨生态大会在福州举办。 作为数字中国建设主力军之一&#xff0c;中国电信天翼云重磅亮相&…