MariaDB InnoDB 空洞清理

2024-04-22 10:28
文章标签 清理 innodb mariadb 空洞

本文主要是介绍MariaDB InnoDB 空洞清理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、背景

        数据库占用服务器内存越来越高,除了bin-log文件之外,还发现了一些带有text或者longtext数据类型字段的表,这种表也会占用很高的服务器磁盘空间

数据库版本:

表引擎: InnoDB

数据量:清理之前1500万,清理之后600万

2、清理

        建议在系统运行中,时刻关注类似表空间是否增大,如发现异常,需要及时处理。

        1、查询数据库空洞的SQL

    SELECT table_schema,TABLE_NAME , concat(data_free/1024/1024,"M") FROM `information_schema`.tables WHERE data_free >8*1024*1024 AND ENGINE ='innodb'  ORDER BY data_free DESC;

        table_schema:库名
        TABLE_NAME:表名
        concat:空洞空间大小

        2、清理方法

        OPTIMIZE TABLE your_table_name;  这种方法不支持InnoDB引擎的表

        ALTER TABLE your_table_name ENGINE=InnoDB; InnoDB引擎的表建议使用这种方法

3、注意事项

        1、锁表问题

        因为作者这边的表是InnoDB引擎,所以这里只验证了ALTER TABLE这种方式,在执行了SQL之后,任然有数据进入操作的表,说明不会造成锁表。

        2、服务器磁盘空间是否充足

        ALTER TABLE 会创建一个新的临时表,并将原表中的数据复制到新表中,然后删除原表,将新表重命名为原表的名字,在复制到新表过程中,原表未被删除的数据会占用磁盘空间,作者这边的表是有500多个G,所以在执行这个SQL之前,要确保服务器还有额外的500个G的磁盘空间

        3、系统业务

        执行过程中,会占用数据库服务器的资源,交换空间基本上是拉满了,内存空间占用也比较高,如果此时还有其他业务在频繁访问数据库的话,可能造成很严重的后果,所以建议选择业务低峰时期来执行

4、结语

        内心非常忐忑,整个执行过程花了2小时,原本被清理的表占用了580个G左右,清理了900万左右的数据之后,执行了ALTER TABLE之后,新的表还有300多个G,也就是说在处理过程中,看着磁盘空间一点一点的减少(总共需要占用900多个G),心头慌得一批,担心服务器啥时候崩掉了。

        

这篇关于MariaDB InnoDB 空洞清理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/925528

相关文章

Mysql中InnoDB与MyISAM索引差异详解(最新整理)

《Mysql中InnoDB与MyISAM索引差异详解(最新整理)》InnoDB和MyISAM在索引实现和特性上有差异,包括聚集索引、非聚集索引、事务支持、并发控制、覆盖索引、主键约束、外键支持和物理存... 目录1. 索引类型与数据存储方式InnoDBMyISAM2. 事务与并发控制InnoDBMyISAM

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙

电脑多久清理一次灰尘合? 合理清理电脑上灰尘的科普文

《电脑多久清理一次灰尘合?合理清理电脑上灰尘的科普文》聊起电脑清理灰尘这个话题,我可有不少话要说,你知道吗,电脑就像个勤劳的工人,每天不停地为我们服务,但时间一长,它也会“出汗”——也就是积累灰尘,... 灰尘的堆积几乎是所有电脑用户面临的问题。无论你的房间有多干净,或者你的电脑是否安装了灰尘过滤器,灰尘都

InnoDB的多版本一致性读的实现

InnoDB是支持MVCC多版本一致性读的,因此和其他实现了MVCC的系统如Oracle,PostgreSQL一样,读不会阻塞写,写也不会阻塞读。虽然同样是MVCC,各家的实现是不太一样的。Oracle通过在block头部的事务列表,和记录中的锁标志位,加上回滚段,个人认为实现上是最优雅的方式。 而PostgreSQL则更是将多个版本的数据都放在表中,而没有单独的回滚段,导致的一个结果是回滚非

MySQL技术内幕_innodb存储引擎

MySQL技术内幕_innodb存储引擎 INNODB innodb中如果表没有主键 表是否由 非空唯一键,有则该字段为主键没有,则自动创建一个6字节大小的指针 innodb存储引擎的所有数据都存储在表空间中,表空间由段,区,页(块)组成。 如果启用了 innodb_file_per_table, 则每张表内的数据可以单独放在一个表空间中即使启用了上面参数,共享表空间也会因为 系统事务信息

插件:清理maven错误缓存.bat

插件:https://pan.baidu.com/s/1nHIxHoo1C4MvFlW7QbZe5Q?pwd=7zenhttps://pan.baidu.com/s/1nHIxHoo1C4MvFlW7QbZe5Q?pwd=7zen没错误缓存时: 有错误缓存时:

在Webmin上默认状态无法正常显示 Mariadb V11.02及以上版本

OS: Armbian OS 24.5.0 Bookworm Mariadb V11.02及以上版本 Webmin:V2.202 小众问题,主要是记录一下。 如题 Webmin 默认无法 Mariadb V11.02及以上版本 如果对 /etc/webmin/mysql/config 文件作相应调整就可以再现Mariadb管理界面。 路径+文件:/etc/webmin/mysql/config

redis内存清理和linux系统清理缓存以及redis启动

1清空所有数据库 redis-cli FLUSHALL 2清空所有数据库 redis-cli FLUSHDB 3. 删除指定的缓存键 redis-cli DEL <key> 4. 设置键过期 redis-cli EXPIRE <key> <seconds>例如:redis-cli EXPIRE mykey 60 5.启动redis 这个启动命令要在/usr/loc

proe5.0 config.pro 选项清理垃圾关系

proe5.0 config.pro 选项:  cleanup_drawing_dependencies YES_CS_NOT_REQUIRED c leanup_layout_dependencies YES_CS_NOT_REQUIRED 可以清理所有不应该存在的依赖关系 在某些情况下,图纸、布局和模型可能包含对模型的不需要的默认、幽灵、无效、旧的或遗留引用或者垃圾引用,如何删除这些引用?