优化GreatSQL日志文件空间占用

news/2025/3/14 10:22:46/文章来源:https://www.cnblogs.com/greatsql/p/18771617

优化GreatSQL日志文件空间占用

GreatSQL对于日志文件磁盘空间占用,做了一些优化,对于binlog、relay log、slow log和audit log的总空间占用进行了限制,使DBA免除了大量日志生成导致磁盘满的顾虑,极大的方便了数据库磁盘空间管理。

1.binlog二进制日志

  • binlog_space_limit
    • GreatSQL增加了静态参数 binlog_space_limit,限制数据库binlog的最大磁盘占用。当所有binlog文件的空间占用合计,超过此设置时,GreatSQL自动清理最旧的binlog文件。

参数行为表现测试:

# 查询参数配置值
greatsql> SHOW GLOBAL VARIABLES LIKE 'binlog_space_limit';
+--------------------+------------+
| Variable_name      | Value      |
+--------------------+------------+
| binlog_space_limit | 1073741824 |
+--------------------+------------+
1 row in set (0.00 sec)# 进行业务处理,检查binlog大小
greatsql> SHOW BINARY LOGS;
+-----------------+-----------+-----------+
| Log_name        | File_size | Encrypted |
+-----------------+-----------+-----------+
| mybinlog.000009 | 433980378 | No        |
| mybinlog.000010 |   7590652 | No        |
| mybinlog.000011 | 208398410 | No        |
| mybinlog.000012 | 414221182 | No        |
+-----------------+-----------+-----------+
4 rows in set (0.00 sec)          # 达到binlog_space_limit的1G限制,清理了最旧的binlog文件
greatsql> SHOW BINARY LOGS;
+-----------------+-----------+-----------+
| Log_name        | File_size | Encrypted |
+-----------------+-----------+-----------+
| mybinlog.000010 |   7590652 | No        |
| mybinlog.000011 | 208398410 | No        |
| mybinlog.000012 | 455964041 | No        |
+-----------------+-----------+-----------+
3 rows in set (0.00 sec)

2.relay log中继日志

  • relay_log_space_limit
    • 静态参数,此选项为复制副本上所有中继日志的总大小(以字节为单位)设置了上限。这对于磁盘空间有限的副本服务器主机非常有用。值为0表示“无限制”。当达到限制时,I/O(接收器)线程停止从源服务器读取二进制日志事件,直到SQL线程赶上并删除了一些不再使用的中继日志。

    • 请注意,此限制不是绝对的:在某些情况下,SQL线程需要更多的事件才能删除中继日志。在这种情况下,会超过此限制,直到SQL线程可以删除一些中继日志,因为不这样做会导致死锁。不应将--relay-log-space-limit设置为小于--max-relay-log-size值的2倍。在这种情况下,IO线程可能会等待空闲空间,因为超过了--relay-log-space-limit 限制,但SQL线程没有中继日志可以清除,无法满足IO线程的需求。这会迫使IO线程暂时忽略--relay-log-space-limit限制。

参数行为表现测试:

修改配置后,重启 mysqld,将slave改为延时8小时应用。

greatsql> SHOW GLOBAL VARIABLES LIKE 'relay_log_space_limit';  
+-----------------------+------------+
| Variable_name         | Value      |
+-----------------------+------------+
| relay_log_space_limit | 3221225472 |
+-----------------------+------------+
1 row in set (0.01 sec)greatsql> STOP SLAVE SQL_THREAD;CHANGE MASTER TO MASTER_DELAY=28800;START SLAVE SQL_THREAD;

在主节点,业务加压,生成relay log,当relay log的文件总和达到3G时,relay log不在增加。

$ du -sm  /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/*relay*
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000018
596     /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000019
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000020
1025    /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000021
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000022
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000023
1028    /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000024
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000025
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000026
426     /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000027
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.index

检查slave status,Slave的IO和SQL线程都是Yes,当IO线程已停止接收新的事务。

greatsql> pager grep -E '_Log_|Gtid|Running'
PAGER set to 'grep -E '_Log_|Gtid|Running''greatsql> SHOW SLAVE STATUS\GMaster_Log_File: greatsql-bin.000006Read_Master_Log_Pos: 445825094Relay_Log_File: greatsql-relay.000019Relay_Log_Pos: 410Relay_Master_Log_File: greatsql-bin.000003Slave_IO_Running: YesSlave_SQL_Running: YesExec_Master_Log_Pos: 459045495Relay_Log_Space: 3221226704Until_Log_File: Until_Log_Pos: 0Slave_SQL_Running_State: Waiting until SOURCE_DELAY seconds after source executed eventRetrieved_Gtid_Set: d02f35e9-afdc-11ef-a49b-00163e0ea4a5:138815-387659Executed_Gtid_Set: d02f35e9-afdc-11ef-a49b-00163e0ea4a5:1-138814
1 row in set, 1 warning (0.00 sec)greatsql> SHOW SLAVE STATUS\GMaster_Log_File: greatsql-bin.000006Read_Master_Log_Pos: 445825094Relay_Log_File: greatsql-relay.000019Relay_Log_Pos: 410Relay_Master_Log_File: greatsql-bin.000003Slave_IO_Running: YesSlave_SQL_Running: YesExec_Master_Log_Pos: 459045495Relay_Log_Space: 3221226704Until_Log_File: Until_Log_Pos: 0Slave_SQL_Running_State: Waiting until SOURCE_DELAY seconds after source executed eventRetrieved_Gtid_Set: d02f35e9-afdc-11ef-a49b-00163e0ea4a5:138815-387659Executed_Gtid_Set: d02f35e9-afdc-11ef-a49b-00163e0ea4a5:1-138814
1 row in set, 1 warning (0.00 sec)

将slave改为延时10分钟应用,sql线程在应用完greatsql-relay.000019的事务后,io线程开始接收新的事务到greatsql-relay.000027,sql线程在应用完greatsql-relay.000021的事务之前,IO线程再次暂停。

greatsql> STOP SLAVE SQL_THREAD;CHANGE MASTER TO MASTER_DELAY=600;START SLAVE SQL_THREAD;

relay log的始终合计控制在3G左右。

$ du -sm  /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/*relay*
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000020
1025    /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000021
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000022
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000023
1028    /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000024
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000025
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000026
1450    /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000027
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.index......
$ du -sm  /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/*relay*
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000032
1025    /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000033
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000034
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000035
1025    /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000036
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000037
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000038
1024    /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.000039
1       /data/greatsqldata/16315fff-72c5-4ea6-b26e-3604869063a6/dbdata/greatsql-relay.index

slow log 慢日志

GreatSQL增加slow log的如下控制参数:

  • max_slowlog_size
    • 数据库每个slow log文件的最大空间占用。
  • max_slowlog_files
    • 数据库保留的slow log的文件个数,慢查询日志总的磁盘空间占用是max_slowlog_size*max_slowlog_files。

参数行为表现测试:

#参数默认值为0,表示不限制
greatsql> SHOW GLOBAL VARIABLES LIKE 'max_slow%';  
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| max_slowlog_files | 0     |
| max_slowlog_size  | 0     |
+-------------------+-------+
2 rows in set (0.01 sec)#修改参数值
greatsql> SET GLOBAL max_slowlog_files=2;
Query OK, 0 rows affected (0.00 sec)greatsql> SET GLOBAL max_slowlog_size=1024*1024;
Query OK, 0 rows affected (0.01 sec)greatsql> SHOW VARIABLES LIKE 'max_slow%'; 
+-------------------+---------+
| Variable_name     | Value   |
+-------------------+---------+
| max_slowlog_files | 2       |
| max_slowlog_size  | 1048576 |
+-------------------+---------+
2 rows in set (0.01 sec)

slow.log当达max_slowlog_size 设置的大小时,会发生轮转生成一个新的文件,当文件数达到max_slowlog_files设置的数量时,删除最旧的文件。

$ ll slow*
-rw-r----- 1 GreatSQL GreatSQL 1048621 Dec 17 10:52 slow.log.000010
-rw-r----- 1 GreatSQL GreatSQL 1043247 Dec 17 10:53 slow.log.000011#--继续生成slow.log,删除了slow.log.000010
$ ll slow*
-rw-r----- 1 GreatSQL GreatSQL 1048692 Dec 17 10:53 slow.log.000011
-rw-r----- 1 GreatSQL GreatSQL   46119 Dec 17 10:53 slow.log.000012

audit log审计日志

GreatSQL 的 audit 插件参数audit_log_rotate_on_sizeaudit_log_rotations用于控制审计日志。

  • audit_log_rotate_on_size
    • 审计日志文件大小超过此设置时,进行轮转,存储为新的文件。
  • audit_log_rotations
    • 除audit.log外,保留的audit.log轮转文件的个数。

参数行为表现测试:

greatsql> INSTALL PLUGIN audit_log SONAME 'audit_log.so';
Query OK, 0 rows affected (0.12 sec)#默认值为0,不轮转,不限制文件大小
greatsql> SHOW GLOBAL VARIABLES LIKE 'audit_log_rotat%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| audit_log_rotate_on_size | 0     |
| audit_log_rotations      | 0     |
+--------------------------+-------+
2 rows in set (0.01 sec)#设置参数值
greatsql> SET GLOBAL audit_log_rotate_on_size=1048576;
Query OK, 0 rows affected (0.00 sec)greatsql> SET GLOBAL audit_log_rotations=4;
Query OK, 0 rows affected (0.00 sec)greatsql> SHOW VARIABLES LIKE 'audit_log_rota%';
+--------------------------+---------+
| Variable_name            | Value   |
+--------------------------+---------+
| audit_log_rotate_on_size | 1048576 |
| audit_log_rotations      | 4       |
+--------------------------+---------+
2 rows in set (0.01 sec)

检查audi.log文件的变化:

$ ll audit*
-rw-r----- 1 GreatSQL GreatSQL  492556 Dec 17 11:26 audit.log
-rw-r----- 1 GreatSQL GreatSQL 1050204 Dec 17 11:26 audit.log.1
-rw-r----- 1 GreatSQL GreatSQL 1050485 Dec 17 11:26 audit.log.2
-rw-r----- 1 GreatSQL GreatSQL 1051191 Dec 17 11:26 audit.log.3
-rw-r----- 1 GreatSQL GreatSQL 1050767 Dec 17 11:26 audit.log.4# audit.log发生轮转
$ ll audit*
-rw-r----- 1 GreatSQL GreatSQL     993 Dec 17 11:26 audit.log
-rw-r----- 1 GreatSQL GreatSQL 1542990 Dec 17 11:26 audit.log.1
-rw-r----- 1 GreatSQL GreatSQL 1050204 Dec 17 11:26 audit.log.2
-rw-r----- 1 GreatSQL GreatSQL 1050485 Dec 17 11:26 audit.log.3
-rw-r----- 1 GreatSQL GreatSQL 1051191 Dec 17 11:26 audit.log.4

日志写入audit.log文件,当达到audit_log_rotate_on_size时,发生轮转:

删除audit.log.4,audit.log.3轮转为audit.log.4,audit.log.2轮转为audit.log.3,audit.log.1轮转为audit.log.2,audit.log轮转为audit.log.1

共保留audit_log_rotations个轮转的审计日志文件。


Enjoy GreatSQL 😃

关于 GreatSQL

GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html

image-20230105161905827

技术交流群:

微信:扫码添加GreatSQL社区助手微信好友,发送验证信息加群

image-20221030163217640

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

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

相关文章

day:21 python——列表数据处理

一.列表的介绍和定义 1 .列表 类型: <class list> 2.符号:[] 3.定义列表: 方式1:[] 通过[] 来定义 list=[1,2,3,4,6] print(type(list)) #<class list>方式2: 通过list 转换 str2="12345" print(type(str2)) #<class str> list2=list(str2) prin…

工业相机视频播放(RTSP)

需求:工业相机图像能在rtsp流上播放。 实现手段:C#利用工业相机的SDK拿到图后,通过ffmpeg管道推给流媒体程序,再转流播放。 模拟测试:两张图在rtsp上进行轮播 qq:505645074

PTFE大型反应容器-聚四氟乙烯圆桶

聚四氟乙烯圆桶具有以下特点: 一、材料特性耐腐蚀性:能够抵抗绝大多数化学物质的侵蚀,包括强酸、强碱、有机溶剂等。耐高温性:长期使用温度可达 -196℃至 260℃。低摩擦系数:表面光滑,摩擦系数极小,有利于物料的流动和排放。不粘性:几乎所有物质都不与聚四氟乙烯粘连,…

NET 模拟编辑平滑曲线

本文介绍不依赖贝塞尔曲线,如何绘制一条平滑曲线,用于解决无贝塞尔控制点的情况下绘制曲线、但数据点不在贝塞尔曲线的场景。 在上一家公司我做过一个平滑曲线编辑工具,用于轮椅调整加减速曲线。基于几个用户可控制的点,生成一条平滑的曲线,控制点需要保持在曲线上。 今天…

PFA药铲一体成型氟树脂铲子

PFA药铲一体成型氟树脂铲子 2025-03-13 15:05南京瑞尼克科技管悦 PFA铲子是一种由全氟烷氧基树脂(PFA)制成的工具,具有耐腐蚀、耐高低温、低溶出析出等特性,广泛应用于制药、实验室等领域。以 产品特性 耐腐蚀性:PFA铲子能够耐受强酸、强碱和有机溶剂,适用于腐蚀性环境。…

Cisco ASAv 9.23.1 - 思科自适应安全虚拟设备 (ASAv)

Cisco ASAv 9.23.1 - 思科自适应安全虚拟设备 (ASAv)Cisco ASAv 9.23.1 - 思科自适应安全虚拟设备 (ASAv) Cisco Adaptive Security Virtual Appliance (ASAv) 请访问原文链接:https://sysin.org/blog/cisco-asav/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.or…

CMU_15445_P4_Part3

Primary Key Index BUSTUB 支持使用下面的方式创建主键索引 CREATE TABLE t1(v1 int PRIMARY KEY); CREATE TABLE t1(v1 int, v2 int, PRIMARY KEY(v1, v2));当创建一个表的时候如果确定了主键, 那么这张表的 is_primary_key 会被设置为 true. 由于在 P4 中添加了主键相关的信息…

Hyper V文件复制优化:减少复制冲突与错误

在Hyper-V环境中进行文件复制时,为了减少复制冲突与错误,可以采取以下优化措施:一、权限设置与访问控制 确保足够的访问权限: 无论是使用共享文件夹还是其他复制方法,都要确保主机和虚拟机之间有足够的访问权限。权限设置不当可能会导致无法访问或复制文件失败。 在Window…

苍穹外卖开发记录 -day2

好久没写博了,这几天一直在写简历,投简历,然后吃闭门羹。加了个技术学习群,能和别人交流一下感觉还挺有用的。昨天和前天其实也在写苍穹外卖,都是写了一些增删改查的无聊接口。今天更新一下记录一下知识点。学了一个很重要的知识点是面向切面编程(AOP)。 AOP的概念 AOP的作…

Z.Fantasy.GenerateCode:代码生成器

Z.Fantasy.GenerateCode:代码生成器 在当今快速迭代的软件开发环境中,如何提高开发效率一直是开发者们关注的焦点。今天为大家推荐一款简单的代码生成工具 —— Z.Fantasy.GenerateCode,它不仅能帮助你快速生成代码,更能让代码生成过程变得优雅而灵活。 🌟 为什么选择 Z.…

[Java] Java 17 FAQ

概述: Java 17 FAQ for Java 17 Q: 利用反射机制给 private 属性的 Field 设置为 true(field.setAccessible(true))时报: "java.lang.reflect.InaccessibleObjectException: Unable to make field private int java.io.StringReader.next accessible: module java.base d…

Hyper-V单硬盘空间管理

在Hyper-V环境中,单硬盘空间管理是一项至关重要的任务,它直接关系到虚拟化环境的稳定性和性能。以下是一些关于Hyper-V单硬盘空间管理的关键策略和建议:一、磁盘空间紧张的原因分析 在Hyper-V环境中,磁盘空间紧张的原因多种多样,主要包括: 虚拟机快照积累:虚拟机快照是虚…