看数据库的文件大小 MySQL Binlog日志的生成和清理规则
小结:
1、避免并行大大事务对磁盘、内存的消耗;
MySQL数据文件导致实例空间满的解决办法_空间/内存_常见问题_云数据库 RDS 版-阿里云 https://help.aliyun.com/knowledge_detail/101642.html
MySQL实例可能会由于查询语句的排序、分组、关联表产生的临时表文件,或者大事务未提交前产生的binlog cache文件,导致实例空间满,为避免数据丢失,RDS会对实例进行自动锁定,磁盘锁定之后,将无法进行写入操作。
查看数据库的文件大小,分析其中可以删除的历史数据文件或无用数据文件。
SELECT file_name, concat(TOTAL_EXTENTS,'M') as 'FIle_size' FROM INFORMATION_SCHEMA.FILES order by TOTAL_EXTENTS
MySQL Binlog日志的生成和清理规则_数据备份/恢复_常见问题_云数据库 RDS 版-阿里云 https://help.aliyun.com/knowledge_detail/41815.html
Binlog日志的生成规则
MySQL实例空间内生成binlog日志的规则如下:
-
通常情况下,当前binlog大小超过500MB或超过6小时会切换到下一序号文件继续写入,即写满500MB或超过6小时就会生成新的binlog日志文件。新的binlog文件继续写入,老的binlog文件并不会立刻上传,会异步上传。
-
有些情况下,binlog日志不满500MB就不再写入,比如由于命令的执行、系统重启等原因。
-
有些情况下,会出现binlog文件尺寸超过500MB的情况,比如当时在执行大事务,不断写入binlog导致当前binlog文件尺寸超过500MB。
Binlog日志的保存及清理规则
MySQL实例的空间内默认清理binlog日志的规则如下:
-
实例空间内默认会保存最近18个小时内的binlog文件。
-
当实例使用空间小于购买空间的80%时,系统会保存购买空间的30%的binlog(即使该binlog文件已经上传到OSS内)。
-
当实例使用空间超过购买空间的80%时,binlog会在上传到OSS后,发起删除本地数据的请求,但本地删除会有任务调度,有一定延迟。
-
Binlog文件上传到OSS后,才可以在RDS控制台上显示。查看步骤如下:
-
登录RDS管理控制台。
-
选择要管理的实例所在的地域。
-
单击目标实例右的ID,进入基本信息页面。
-
在左侧导航栏中,选择备份恢复,进入备份恢复页面。
-
选择日志备份标签页,即可查看已上传的binlog日志。
-
-
Binlog日志在后台生成,可在RDS控制台中下载,大概需要30~60分钟,如果binlog文件较大,所需时间更长。
后续维护
对于经常有delete
操作的表,容易产生数据空洞,可以在业务低峰期使用optimize table <数据库名>.<表名>
回收空间。
后续维护
- 针对查询产生的临时文件,应该优化SQL语句,避免频繁使用 order by、group by 操作,可以适当调大tmp_table_size和max_heap_table_size,但是为了减少磁盘使用而调高 tmp_table_size 和 max_heap_table_size 并不明智,因为内存资源远比磁盘资源宝贵;可以通过
explain
+SQL语句查看是否使用内部临时表,在 Extra 字段中有 Using temporary 字样的代表会使用内部临时表。示例如下: - 针对binlog cache,应该少执行大事务,尤其应该减少在多个连接同时执行大事务,如果大事务比较多,可以适当调大binlog_cache_size,但是同样不应该为了节省磁盘调整这个参数,使用短连接执行大事务可以有效降低临时空间开销。