怎样解决ibdata1共享表空间文件一直增加的问题

55次阅读
没有评论

共计 1961 个字符,预计需要花费 5 分钟才能阅读完成。

这期内容当中丸趣 TV 小编将会给大家带来有关 ibdata1 共享表空间文件一直增加的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

数据库磁盘使用率一直上升,其中 ibdata1 使用有 323G,并且一直增加持续了 31 天

1、首先看了实例 innodb_file_per_table 是开启的

2、5.6 版本 undo 信息

show variables like  %undo% 
1 innodb_undo_directory .
2 innodb_undo_logs 128
3 innodb_undo_tablespaces 0

那么 ibdata1 文件增大的原因有如下因素:

InnoDB 引擎表由于支持多版本并发控制(MVCC),因此会将查询所需的 Undo 信息保存在系统文件 ibdata1  中。

如果存在对一个 InnoDB 表长时间不结束的查询,而且在查询过程中表有大量的数据变化,

则会生成大量的 Undo 信息,导致 ibdata1 文件尺寸增加。

由于 MySQL 内部机制的限制,ibdata1 文件目前是不支持收缩的。

因此出现这样的情况,只能通过切换主备,或者迁移,再或者增大存储空间解决。

建议:监控和清理执行时间过长的会话或事务。

那么今天的例子大致如下:

通过 show processlist 看到一个 sql 执行了 31 天,并且还处于 query,Sending data 状态,SQL 本身三个表关联,没有关联条件,后面 kill 掉此 sql,通过切换实例,新备重新搭建

1.2 数据文件

对于数据文件占用空间高的情况,可以通过清理数据的方式来减少空间占用情况,比如通过  drop table  和  truncate table  来清理不再需要的数据。

说明 3 个常见问题:

1.2.1 information_schema.tables 查询的数据容量

information_schema.tables 提供的是根据采样获取的表的部分统计信息,因此通过下面的查询获取的表、库数据尺寸和实际数据文件占用尺寸间会有出入(通常要小于实际数据文件占用空间)

select table_name, concat(round((data_length + index_length)/1024/1024,2), MB ) from
 information_schema.tables where
 table_schema =  TESTDB  and table_name =  TESTTABLE

下图中可以看到:在收集表的统计信息前后反馈出的表数据量大小存在差异。

注:即使通过 analyze table 命令,重新收集统计信息,得到的数值通常也小于实际数据文件占用空间;比如本例的  16143 MB 也小于该表的数据文件实际占用空间。

由于数据文件在频繁的 DML 后会出现数据空洞的现象,比较接近实际数据文件占用空间的计算方法请参考:

select 
 sum(data_length + index_length + data_free) / 1024 / 1024from
 information_schema.tables;

注:
因为 information_schema.tables 中提供的是采样统计数据,因此该计算方式在统计数据比较接近实际的情况下,才会比较接近真实空间占用情况。

1.2.2 delete 删除数据

delete 操作不能够直接回收被删除数据占用的数据文件空间,这就好比排空泳池中水但泳池的占地面积不会发生改变一样。而且 delete 操作会生成相应的 Binlog 文件,会进一步恶化空间使用情况。在 delete 操作删除数据后,需要通过 optimize table tab_name; 操作来回收空间。

1.2.3  删除备份

自建 MySQL 可能存在备份占用空间的问题,但是云上 RDS 备份放置在后台 OSS 上,不占用用户的 RDS 实例空间,因此删除备份不能解决实例的空间问题。而且删除备份会影响实例的可恢复性,强烈建议任何情况下不要考虑删除备份。

1.3 临时文件

临时文件会随查询的结束或者会话的终止而自动释放,因此如果是临时文件导致实例空间满而锁定,可以通过终止会话来释放空间。

遇见过一个案例,客户排序操作导致 ibtmp1 很大,占用空间很高,需要释放,那么只能重启,也是切换成备库,然后重启新的备释放掉了

ib_logfile 日志文件:

ib_logfile0 和 ib_logfile1 日志文件保存 InnoDB 引擎表的事务日志信息,其文件大小尺寸固定,不可以改变。较大的尺寸在高并发事务的场景下有利于减少事务日志文件切换的次数,提高实例性能。

上述就是丸趣 TV 小编为大家分享的 ibdata1 共享表空间文件一直增加的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-28发表,共计1961字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)