当前位置:首页 >休闲 >面试官问:数据库 delete 表数据,磁盘空间还是被一直占用,为什么? 库d空间导致数据增长过快

面试官问:数据库 delete 表数据,磁盘空间还是被一直占用,为什么? 库d空间导致数据增长过快

2024-06-29 07:47:43 [百科] 来源:避面尹邢网

面试官问:数据库 delete 表数据,面试磁盘空间还是官问被一直占用,为什么?数据数据

作者:低调的干货君 数据库 MySQL 最近有个上位机获取下位机上报数据的项目,由于上报频率比较频繁且数据量大,库d空间导致数据增长过快,磁盘磁盘占用多。还被

最近有个上位机获取下位机上报数据的直占项目,由于上报频率比较频繁且数据量大,面试导致数据增长过快,官问磁盘占用多。数据数据

为了节约成本,库d空间定期进行数据备份,磁盘并通过delete删除表记录。还被

面试官问:数据库 delete 表数据,磁盘空间还是被一直占用,为什么? 库d空间导致数据增长过快

明明已经执行了delete,直占可表文件的面试大小却没减小,令人费解

项目中使用Mysql作为数据库,对于表来说,一般为表结构和表数据。表结构占用空间都是比较小的,一般都是表数据占用的空间。

面试官问:数据库 delete 表数据,磁盘空间还是被一直占用,为什么? 库d空间导致数据增长过快

当我们使用 delete删除数据时,确实删除了表中的数据记录,但查看表文件大小却没什么变化。

面试官问:数据库 delete 表数据,磁盘空间还是被一直占用,为什么? 库d空间导致数据增长过快

MySQL数据结构

凡是使用过mysql,对B+树肯定是有所耳闻的,MySQL InnoDB 中采用了 B+ 树作为存储数据的结构,也就是常说的索引组织表,并且数据时按照页来存储的。因此在删除数据时,会有两种情况:

  •  删除数据页中的某些记录
  •  删除整个数据页的内容

表文件大小未更改和MySQL设计有关

比如想要删除 R4 这条记录:

InnoDB 直接将 R4 这条记录标记为删除,称为可复用的位置。如果之后要插入 ID 在 300 到 700 间的记录时,就会复用该位置。

由此可见,磁盘文件的大小并不会减少。

通用删除整页数据也将记录标记删除,数据就复用用该位置,与删除默写记录不同的是,删除整页记录,当后来插入的数据不在原来的范围时,都可以复用位置,而如果只是删除默写记录,是需要插入数据符合删除记录位置的时候才能复用。

因此,无论是数据行的删除还是数据页的删除,都是将其标记为删除的状态,用于复用,所以文件并不会减小。

那怎么才能让表大小变小

DELETE只是将数据标识位删除,并没有整理数据文件,当插入新数据后,会再次使用这些被置为删除标识的记录空间,可以使用OPTIMIZE TABLE来回收未使用的空间,并整理数据文件的碎片。

OPTIMIZE TABLE 表名;

注意:OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用。

另外,也可以执行通过ALTER TABLE重建表

ALTER TABLE 表名 ENGINE=INNODB

有人会问OPTIMIZE TABLE和ALTER TABLE有什么区别?

alter table t engine = InnoDB(也就是recreate),而 optimize table t 等于 recreate+analyze

Online DDL

最后,再说一下Online DDL,dba的日常工作肯定有一项是ddl变更,ddl变更会锁表,这个可以说是dba心中永远的痛,特别是执行ddl变更,导致库上大量线程处于“Waiting for meta data lock”状态的时候。因此在 5.6 版本后引入了 Online DDL。

Online DDL推出以前,执行ddl主要有两种方式copy方式和inplace方式,inplace方式又称为(fast index creation)。相对于copy方式,inplace方式不拷贝数据,因此较快。但是这种方式仅支持添加、删除索引两种方式,而且与copy方式一样需要全程锁表,实用性不是很强。Online方式与前两种方式相比,不仅可以读,还可以支持写操作。

执行online DDL语句的时候,使用ALGORITHM和LOCK关键字,这两个关键字在我们的DDL语句的最后面,用逗号隔开即可。示例如下: 

  1. ALTER TABLE tbl_name ADD COLUMN col_name col_type, ALGORITHM=INPLACE, LOCK=NONE; 

ALGORITHM选项

  •  INPLACE:替换:直接在原表上面执行DDL的操作。
  •  COPY:复制:使用一种临时表的方式,克隆出一个临时表,在临时表上执行DDL,然后再把数据导入到临时表中,在重命名等。这期间需要多出一倍的磁盘空间来支撑这样的 操作。执行期间,表不允许DML的操作。
  •  DEFAULT:默认方式,有MySQL自己选择,优先使用INPLACE的方式。

LOCK选项

  •  SHARE:共享锁,执行DDL的表可以读,但是不可以写。
  •  NONE:没有任何限制,执行DDL的表可读可写。
  •  EXCLUSIVE:排它锁,执行DDL的表不可以读,也不可以写。
  •  DEFAULT:默认值,也就是在DDL语句中不指定LOCK子句的时候使用的默认值。如果指定LOCK的值为DEFAULT,那就是交给MySQL子句去觉得锁还是不锁表。不建议使用,如果你确定你的DDL语句不会锁表,你可以不指定lock或者指定它的值为default,否则建议指定它的锁类型。

执行DDL操作时,ALGORITHM选项可以不指定,这时候MySQL按照INSTANT、INPLACE、COPY的顺序自动选择合适的模式。也可以指定ALGORITHM=DEFAULT,也是同样的效果。如果指定了ALGORITHM选项,但不支持的话,会直接报错。

OPTIMIZE TABLE 和 ALTER TABLE 表名 ENGINE=INNODB都支持Oline DDL,但依旧建议在业务访问量低的时候使用

总结

delete 删除数据时,其实对应的数据行并不是真正的删除,仅仅是将其标记成可复用的状态,所以表空间不会变小。

可以重建表的方式,快速将delete数据后的表变小(OPTIMIZE TABLE 或ALTER TABLE),在 5.6 版本后,创建表已经支持 Online 的操作,但最好是在业务低峰时使用。

 

责任编辑:庞桂玉 来源: 数据库开发 数据库MySQLdelete

(责任编辑:热点)

    推荐文章
    • 湖北省国资委连续三年为中小企业纾困解难 妥善处理问题诉求

      湖北省国资委连续三年为中小企业纾困解难 妥善处理问题诉求为帮助服务业领域困难行业恢复发展、渡过难关,湖北省国资委连续三年出台《关于减免服务业小微企业和个体工商户房租的通知》,着力为中小企业纾困解难。明确要求对承租省属企业、市州国资委出资企业及子企业(包括国 ...[详细]
    • 蒸肉怎么做

      蒸肉怎么做蒸猪肉的家常做法?1、半肥瘦猪肉500克、葱大蒜籽各适量、蚝油胡椒粉鸡精各适量。2、把猪肉洗干净放机器里打成泥,放在盘子里。再放点生粉,蚝油,盐,大蒜籽,鸡精,胡椒粉,再打。猪肉怎么蒸好吃-九州醉餐饮 ...[详细]
    • 你们不要再打了啦是什么梗

      你们不要再打了啦是什么梗不要打了啦什么梗?不要打了,意思是:你们不要打了,有话好好说嘛。都是大人,都是懂道理的人,你们就不要打了,有话就好好说嘛。大家都不要互相的怨恨对方,有事好好商量,不要打...你们不要吵啦什么梗?台湾一 ...[详细]
    • 薏米可以和绿豆一起煮吗

      薏米可以和绿豆一起煮吗请问薏仁米可以跟一起煮吗?是什么功效?跟黄绿豆能和很有营养的。也可以喝黄豆一起煮。黑芝麻薏米绿豆粉的吃法可以吗?有害吗?薏米具有补益脾胃,利湿的作用。绿豆有一定的清热解毒的作用。意见建议:以上三者可以 ...[详细]
    • 桂发祥(002820.SZ)2020年度净利润降70.41% 基本每股收益0.12元

      桂发祥(002820.SZ)2020年度净利润降70.41% 基本每股收益0.12元桂发祥(002820.SZ)发布2020年年度报告,实现营业收入3.49亿元,同比下降31.29%;归属于上市公司股东的净利润2503.71万元,同比下降70.41%;归属于上市公司股东的扣除非经常性 ...[详细]
    • 2021吉利

      2021吉利前言:2021年最吉利的四大属相生肖虎好运排行第四名属虎人得财神爷关照财运一路高涨,上班者奖金拿到手软,经商者赚的钵满盆满,令人羡慕。腰包鼓鼓,心情美,个人状态极佳,吃得好,睡得香。爱情运势也非常美好 ...[详细]
    • 滚出中国什么梗

      滚出中国什么梗为什么让浙江滚出中国?新浪微博,有个叫“范晓沐”的的人在微博上发表热门话题:#浙江滚出中国#说的是,浙江这次的台风让浙江人自救说浙江人都那么富,那么有钱,有钱人多...d3玩家滚出wow是什么梗?一个 ...[详细]
    • 什么叫脑空梗

      什么叫脑空梗空骑士是什么意思梗?空洞骑士技能,listen力,衣服意思就是说这个其实很厉害。空洞骑士技能,listen力,衣服意思就是说这个其实很厉害。缘某空是什么梗?缘某空意思是和某一个人的缘份是空的,虚无的。 ...[详细]
    • 评价结果显示:零售业务对商业银行收益可持续能力的贡献不断增强

      评价结果显示:零售业务对商业银行收益可持续能力的贡献不断增强据中国银行业协会官网11月9日消息,近日,中国银行业协会行业发展研究委员会发布了2021年度商业银行稳健发展能力“陀螺”(GYROSCOPE)评价体系评价结果。据了解,&ldq ...[详细]
    • 酥饼怎么做

      酥饼怎么做酥饼应该怎么做?酥饼应该怎么做?中式酥皮点心,讲究的是起酥,层层酥脆,在工艺上有一些讲究,以猪油起酥效果是最好的。酥饼做法大全?只要有了这两个面团,酥饼就一定会做成功。步骤二、用擀面杖把白面团擀成一个 ...[详细]
    热点阅读