”运维笔谈”公众号,对话回复 “阿里云k8s” 可以获取《阿里云Kubernetes项目实战手册》PDF。
我们使用数据库存储数据,随着时间的推移,数据的录入增加,数据库的空间也必然出现不足的情况。除了数据的自然增长,那么数据库常见的空间问题有哪些呢?
根据以往的工作经验来看,总结了下面几点,抛砖引玉!
1. 数据库的索引设置不是很合理
索引固然很好,但是滥用索引也会出现数据库磁盘空间的浪费,比如重复索引,不但浪费空间,数据的每次写入更新删除的时候,相关的索引都要更新。
2. 临时表空间异常增长
在执行大型查询,排序操作时,假如查询不能在内存中完成,数据库会使用临时表空间来存储中间结果,假如磁盘富余空间不足就容易导致磁盘100%,另外关联表产生的临时表文件,或者大事务未提交前产生的binlog cache文件也容易占用很多磁盘空间。
很不幸我在阿里云RDS遇到几次这个情况,半夜做一些表清理工作的时候,导致过一次磁盘100%的灾难。
3. 一些日志表,审计表未及时归档
虽然数据库里搞日志表不是很赞同,但是有些业务场景搞个ELK也不现实,所以会有MySQL有日志类的表,假如这些表的日志不注意及时表归档,也会导致空间满。
4. MySQL的数据库的binlog文件没有及时的清理
数据库日志文件的保留时长也是需要注意的,假如时间保留的过多,不及时清理也会导致数据库空间满。还有个可能是大事务快速生成Binlog文件导致空间不足。
5. 表空间碎片
由于频繁的数据增删改操作,表空间中的数据块可能会变得分散,形成碎片,这会降低数据访问效率并占用额外的空间。不过此类操作我感觉代价不小。
6. 系统文件过大主要是由于undo文件过大
当存在对InnoDB表长时间不结束的查询语句,而且在查询过程中表有大量的数据变化时,系统会生成大量的undo信息,占用大量存储空间,导致存储空间耗尽。
undo文件清理需要MySQL5.7版本支持,后期注意及时优化慢SQL。尽量在业务低峰期进行索引创建删除、表结构修改、表维护和表删除操作,注意清理执行时间过长的会话或事务可以避免undo文件异常增大。
之前我们阿里云上RDS是使用的本地磁盘,后来我发现云原生版本的RDS(云盘版的RDS),磁盘空间可以弹性扩容,我们可以设定一个弹性扩容的上限,然后此范围内的磁盘空间增加就无须每次手动进行扩容了。
清晰度不够[尬笑],阅读累了,大伙儿凑合放松下眼睛[笑]