网站改版对优化的影响福建省住房和城乡建设厅的网站
news/
2025/9/28 16:20:02/
文章来源:
网站改版对优化的影响,福建省住房和城乡建设厅的网站,营销网站外包,晋中网络推广MySQL大事务可能会导致过多的占用临时文件#xff0c;导致磁盘空间撑满的问题
本例说明下binlog cache产生的临时文件 案例复现
调小binlog_cache_size#xff0c;让DML使用临时文件 使用存储过程模拟大事务
创建表 create table t1( id int AUTO_INCREMENT, name varchar…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 ) )ENGINEInnoDB DEFAULT CHARSETutf8; 创建存储过程
创建表
create table t1(
id int AUTO_INCREMENT,
name varchar(11) not null,
addr varchar(11) not null,PRIMARY KEY ( id )
)ENGINEInnoDB DEFAULT CHARSETutf8;创建存储过程
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.mzph.cn/news/920811.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!