mysql 磁盘空间100%

MySQL大事务可能会导致过多的占用临时文件,导致磁盘空间撑满的问题

本例说明下binlog cache产生的临时文件

案例复现

调小binlog_cache_size,让DML使用临时文件

使用存储过程模拟大事务

创建表 create table t1( id int AUTO_INCREMENT, name varchar(11) not null, addr varchar(11) not null, PRIMARY KEY ( id ) )ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建存储过程

创建表
create table t1(
id int AUTO_INCREMENT,
name varchar(11) not null,
addr varchar(11) not null,PRIMARY KEY ( id )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;创建存储过程
show create procedure insert_data;
drop procedure if exists insert_data;
delimiter $$
create procedure insert_data()
begindeclare n int default 1;declare MAX int default 50000000;while n < MAX doinsert into t1 values (null,'cjr','成都');set n = n + 1;end while;
end
$$
delimiter ;执行存储过程(大事务)
call insert_data();

mysql进程号 25319

lsof -p 25319 |grep deleted 查看binlog cache临时文件

产生大量临时文件

也可通过select * from performance_schema.file_instances ;查看临时文件的路径和名字

可以看到此时产生大量临时文件,会占用到

使用fallocate产生一个大文件,模拟磁盘即将撑满

磁盘满了

此时报错

binlog cache相关概念

 binlog cache:它是用于缓存binlog event的内存,大小由binlog_cache_size控制

 binlog cache 临时文件:是一个临时磁盘文件,存储由于binlog cache不足溢出的binlog event,该文件名字由"ML"打头,由参数max_binlog_cache_size控制该文件大小

 binlog file:代表binglog 文件,由max_binlog_size指定大小。

 binlog event:代表binlog中的记录,如MAP_EVENT/QUERY EVENT/XID EVENT/WRITE EVENT

 Binlog_cache_disk_use统计值用于表示使用了多少次临时物理文件存储event

整个事务的event在commit的时候才会真正写入到binary log,在此之前这些Event都存放在另外一个地方我们可以统称为binlog cache 。

事务binlog event写入流程

binlog cache和binlog临时文件都是在事务运行过程中写入,一旦事务提交,binlog cache和binlog临时文件都会释放掉。而且如果事务中包含多个DML语句,他们共享binlog cache和binlog 临时文件。整个binlog写入流程如下:

1. 事务开启

2. 执行dml语句,在dml语句第一次执行的时候会分配内存空间binlog cache

3. 执行dml语句期间生成的event不断写入到binlog cache

4. 如果binlog cache的空间已经满了,则将binlog cache的数据写入到binlog临时文件,同时清空binlog cache。如果binlog临时文件的大小大于了max_binlog_cache_size的设置则抛错ERROR 1197

5. 事务提交,整个binlog cache和binlog临时文件数据全部写入到binlog file中,同时释放binlog cache和binlog临时文件。但是注意此时binlog cache的内存空间会被保留以供THD上的下一个事务使用,但是binlog临时文件被截断为0,保留文件描述符。其实也就是IO_CACHE(参考后文)保留,并且保留IO_CACHE中的分配的内存空间,和物理文件描述符

6. 客户端断开连接,这个过程会释放IO_CACHE同时释放其持有的binlog cache内存空间以及持有的binlog 临时文件。

总结

如果事务过大,将会导致在binlog cache内存中放不下,需要启用临时文件。ML开头的临时文件就是为大事务开辟的一个临时空间用于在执行期间存放binlog event的临时文件。

注意这里是语句执行期间,事务的binlog只有在提交的时候才会写入到binlog物理文件。因此大事务在执行期间,如果遇到某些原因不能继续进行(比如本处的磁盘满,导致写入binlog cache问题),大事务做的语句是不会出现从库的。

大事务极有可能导致磁盘空间被临时文件占满,在生产中要避免大事务的产生。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/589811.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

地表径流分布数据/水文站点分布/降雨量分布/辐射分布数据

引言 大气降水落到地面后&#xff0c;一部分蒸发变成水蒸气返回大气&#xff0c;一部分下渗到土壤成为地下水&#xff0c;其余的水沿着斜坡形成漫流&#xff0c;通过冲沟&#xff0c;溪涧&#xff0c;注入河流&#xff0c;汇入海洋。这种水流称为地表径流。 正文 数据简介 来自…

[力扣]根据前中序构造二叉树--详细解析

根据前中序遍历顺序构建一个二叉树 力扣练习链接 过程 总体框架 设preorder的左边界为pleft,右边界为pright[注意这里是闭区间能取到]同时设inorder的左边界为ileft,有边界为iright[同样也是可以取到的索引区间]我们生成每一个区间的树的头结点,然后向上返回,对于他的父亲结点…

非关系型数据库-----------Redis的主从复制、哨兵模式

目录 一、redis群集有三种模式 1.1主从复制、哨兵、集群的区别 1.1.1主从复制 1.1.2哨兵 1.1.3集群 二、主从复制 2.1主从复制概述 2.2主从复制的作用 ①数据冗余 ②故障恢复 ③负载均衡 ④高可用基石 2.3主从复制流程 2.4搭建redis主从复制 2.4.1环境准备 2.4…

mysql计划事件即定时任务的实现

目录 前言设置系统参数创建计划事件时间间隔举例 前言 在MySQL中&#xff0c;创建一个定时任务&#xff08;即“计划事件”&#xff09;通常涉及使用EVENT对象。有些时候使用mysql定时任务做一些批量处理是非常方便的&#xff0c;比如每天零晨记录头天的库存数据&#xff0c;发…

南京大学提出用于大模型生成的动态温度采样法,简单有效!

在自然语言处理&#xff08;NLP&#xff09;的领域&#xff0c;大语言模型&#xff08;LLMs&#xff09;已经在各种下游语言任务中展现出了卓越的性能。这些任务包括但不限于问答、摘要、机器翻译等。LLMs的强大能力在于其生成的文本质量和多样性。为了控制生成过程&#xff0c…

iptables 与 firewalld 防火墙

iptables iptables 是一款基于命令行的防火墙策略管理工具 四种防火墙策略&#xff1a; ACCEPT&#xff08;允许流量通过&#xff09; 流量发送方会看到响应超时的提醒&#xff0c;但是流量发送方无法判断流量是被拒绝&#xff0c;还是接收方主机当前不在线 REJECT&#xff08…

VMware创建Ubuntu虚拟机详细教程

下载ISO映像文件 进入官网下载&#xff1a;Download Ubuntu Desktop | Download | Ubuntu 下面是一些其他的下载路径&#xff1a; 中国官网 https://cn.ubuntu.com/ 中科大源 Index of /ubuntu-releases/ (ustc.edu.cn) 阿里云开源镜像站 ubuntu-releases安装包下载_开源镜像…

C语言——内存函数

引言 在之前的两篇文章中&#xff0c;我们学习了字符函数和字符串函数&#xff0c;C语言中还有一类库函数叫做内存函数 我们接下来去学习一下这类函数 内存函数 内存函数的功能和某些字符函数的功能相似&#xff0c;它们是通过访问地址的方式操作对象&#xff0c;可应用于任…

MySQL生产环境常见故障及解决方案汇总

MySQL生产环境常见故障及解决方案汇总 1. MySQL主从同步异常故障1.1. 情景说明1.2. 排查过程1.3. 数据同步2. MySQL慢查询故障1. MySQL主从同步异常故障 1.1. 情景说明 MySQL主库网卡需要更换IP地址,并将原IP地址配置为MySQL集群的VIP地址,上层应用程序其实不需要更改连接My…

docker版Elasticsearch安装,ik分词器安装,用户名密码配置,kibana安装

1、安装es和ik分词器 创建映射目录并赋予权限&#xff1a; mkdir -p /docker_data/elasticsearch/conf mkdir -p /docker_data/elasticsearch/data mkdir -p /docker_data/elasticsearch/plugins chmod -R 777 /docker_data/elasticsearch编写配置文件&#xff1a; vi /dock…

Spring拓展点之SmartLifecycle如何感知容器启动和关闭

Spring为我们提供了拓展点感知容器的启动与关闭&#xff0c;从而使我们可以在容器启动或者关闭之时进行定制的操作。Spring提供了Lifecycle上层接口&#xff0c;这个接口只有两个方法start和stop两个方法&#xff0c;但是这个接口并不是直接提供给开发者做拓展点&#xff0c;而…

1379. 找出克隆二叉树中的相同节点

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是出于什么原因&#xff0c;算法学习需要持续保持。 题目描述 给你两棵二叉树&#xff0c;原始树 original 和克隆树 cloned&#xff0c;以及一个位于原始…