【数据库】表数据delete了,表文件大小不变

news2024/11/26 14:57:40

背景

在本周的时候,接到了短信数据空间报警短信,提示的是磁盘空间占用80以上,而这个数据库总体的存储量一共100G,商量之后决定在不升配置的前提下,删除一些不需要的数据表。比如针对A表删除1000W数据。但是和DBA沟通后,说删除数据后,还需要进行缩表的操作,我在想删除数据后,空间不就缩小了嘛?为什么还需要进行缩表操作?基于这个背景来学习下表数据是如何存储和删除的原理。

参数innodb_file_per_table

目前主流的数据库都采用的是InnoDB存储引擎,一个InnoDB表包含两部分,表结构定义和数据,8.0之前,表结构存在.frm后缀的文件中,8.0之后表结果存储在系统数据表中。而表结构占用的数据表少,所以主要删除的都是表数据。

表数据即可以存在共享表空间中,也可以存储在单独的文件中。可以通过innodb_file_per_table参数指定

  • OFF:表数据存储在系统表空间中,也就是和数据字典放在一起。
  • ON:数据存储在.ibd文件中
    在这里插入图片描述
SHOW VARIABLES LIKE 'innodb_file_per_table';

select version();

而在5.6.6版本之后默认值是ON,推荐方式是使用当数据存储在单独的文件进行管理,直接使用drop table可以删除这个文件,而如果存储在系统表空间中,即使删除表,数据也不会删除。大多数的时候,我们使用drop table删除表可以将数据删除,但是更多的时候是使用delete 删除部分数据。

数据删除流程

在这里插入图片描述
InnoDB的存储结构采用的是B+树方式存储。假设我们删除R4这个记录,而InnoDB只会把这个记录标记为删除,而如果正好有插入300/600之间的数据,就会复用这个位置。但是,磁盘的大小并没有缩小。而这个就是记录复用。
如果我们删除的数据正好都在一个page页中,那么这个数据页就是可复用的。但是数据页复用和记录复用不一样的,记录页复用需要符合一定的条件才可以,但是数据页复用,可以复用到任何位置。
比如相邻的两个数据页利用率比较小的时候,就会进行page merge的过程,将另一个数据页标记为可复用。
所以我们在进行delete删除某些数据的时候,数据被删除了,但是所在的记录位置或者数据页只是被标记为了可复用,但是磁盘的大小是不会变的。通过delete命令是不能回收表空间的。

插入数据同样会存在这样的问题
如果我们按照顺序插入数据,那么数据页是比较紧凑的,但是如果是随机插入,就可能造成数据页的分裂。
在这里插入图片描述
如果pageA是满的,当插入一条500-600之间的数据,那么就会发生页分裂,也就是分裂成两个数据页,而PageA就会出现数据空洞,不止在插入数据,在更新索引上的值,也会出现数据空洞。也就是哪些频繁的随机修改的表,都可能出现数据空洞。如果将数据空洞去掉之后,就可以达到收缩表空间的目的,而通过重建表的方式就可以实现。

重建表

假如有一个表A,存在大量的delete操作,为实现表空间收缩,我们可以建立一个表B,然后将表A中的数据,按照主键顺序依次插入数据到表B中,然后修改表B的名称为表A,也可以实现重建表的过程。而这个过程中就是使用alter table A engine = InnoDB重建表。
但是想过没有在整个过程中,如果出现有新增的数据或者修改的数据,我们是没有办法保证增量数据的存储。为此5.6版本后,引入了Online DDL。
而这个过程说白了,就是在复制数据的过程中,有一个raw log专门记录修改数据,在复制数据到新表的过程中,插入进入。
在这里插入图片描述

一般这种重建表的过程都是进行整个表的重建工作,对于千万级、亿级别的表,比较消耗IO和CPU资源。需要谨慎操作。

小结

optimize table 、analyze table 、alter table三种重建表的区别
5.6版本,alter table t engin = InnoDB使用的是online的重建表过程。而analyze table t不是重建表,只是对表的索引信息做重新统计,没有修改数据,加了DML读锁。optimize table t 等于recreate+analze 。

所以我们在删除数据之后,要进行表空间收缩操作,直接使用alter table engine = InnoDB,这样表空间数据占用空间才会恢复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/608322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FAST-LIO2论文阅读

目录 迭代扩展卡尔曼滤波增量式kd-tree(ikd-tree)增量式维护示意图ikd-tree基本结构与构建ikd-tree的增量更新(Incremental Updates)逐点插入与地图下采样使用lazy labels的盒式删除属性更新 ikd-tree重平衡平衡准则重建及并行重建…

SMTP简单邮件传输协议(C/C++ 发送电子邮件)

SMTP是用于通过Internet发送电子邮件的协议。电子邮件客户端(如Microsoft Outlook或macOS Mail应用程序)使用SMTP连接到邮件服务器并发送电子邮件。邮件服务器还使用SMTP将邮件从一个邮件服务器交换到另一个。它不用于从服务器下载电子邮件;相…

jmeter安装及使用

jmeter安装及使用 一、说明二、安装2.1 目录结构 三、使用3.1 运行jmeter3.2 设置语言3.3 设置线程组3.3.1 设置压测请求3.3.2 设置汇总报告3.3.3 设置结果树 3.4 开始压测 四、导出执行报告4.1 保存配置4.2 执行命令4.3 生成报告常见问题 一、说明 最近需要对项目接口进行压测…

vue简单实现一个类似微信左右滑动更多功能

1、需求背景 产品需要在购物车加一个左右滑动更多的功能,由于是PC端,大致扫描了下使用的UI库,貌似没有单独提供此类组件,反正有时间,就自己造一个轮子试试 2、先看效果 大致有一个橡皮筋的效果,可能没那…

分布式锁方案学习

很久没有写文章了,前些天的面试被问到了分布式锁的解决方案,回答的比较简单,只知道Redis,Mysql,Zookeeper能够作为分布式锁应用,今天就来详细的学习一下这三种分布式锁的设计思想及原理。 能够来看这篇文章…

05WEB系统的通信原理图

WEB系统的通信原理 名称作用URL统一资源定位符, 例如:http://www.baidu.com域名在https://www.baidu.com/这个网址中www.baidu.com 是一个域名IP地址计算机在网络当中的一个身份证号, 在同一个网络当中IP地址是唯一的, 有了IP地址两台计算机直接才能建立连接通信端口号一个计算…

如何让你的汇报更有说服力?数据监控是关键!

第5讲中玩过一个扫雷游戏,目标是排除计划中的“延期地雷”,但是,总有些“雷”防不胜防。我们在做计划的时候,明明已经想得非常周全了,可是,真正开工几天之后才发现,很多事情并没有那么简单。 1…

4-1 活动安排问题

1.什么是贪心算法 我的理解: 贪心算法是一种常用的问题求解方法,它在每个步骤上都选择当前看起来最优的解,而不考虑整体的最优解。简单来说,贪心算法采取局部最优的决策,希望通过每个局部最优解的选择,最终…

网络安全面试题大全(整理版)500+面试题附答案详解,最全面详细,看完稳了

前言 随着国家政策的扶持,网络安全行业也越来越为大众所熟知,想要进入到网络安全行业的人也越来越多。 为了拿到心仪的Offer之外,除了学好网络安全知识以外,还要应对好企业的面试。 作为一个安全老鸟,工作这么多年&…

全网最全的网络安全技术栈内容梳理(持续更新中)

前言 本文篇幅比较长~~耐心看完哦~ 网络安全真的那么好吗 据我了解现在我国网络安全人才缺口相当大,预计在2023年这方面人才缺口达到327万,我每年这方面的大学生才2W多。现在各政企都在发展数字化变革,对网络安全方面人才也是垂涎若渴&…

【31】核心易中期刊推荐——电子信息技术计算机技术

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…

06SpringCloud rabbitmq安装

rabbitmq安装 说明:请使用资料里提供的CentOS-7-x86_64-DVD-1810.iso 安装虚拟机. 1. 安装依赖环境 在线安装依赖环境: yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel …

动态规划-概率DP

Bag of mice 题面翻译 https://www.luogu.com.cn/problem/CF148D 袋子里有 w w w 只白鼠和 b b b 只黑鼠 ,A和B轮流从袋子里抓,谁先抓到白色谁就赢。A每次随机抓一只,B每次随机抓完一只之后会有另一只随机老鼠跑出来。如果两个人都没有抓到…

【小沐学GIS】基于Cesium实现三维数字地球Earth(CesiumJS入门安装)

文章目录 1、简介1.1 平台1.1.1 Cesium ion1.1.2 CesiumJS1.1.3 Cesium for Unity1.1.4 Cesium for Unreal1.1.4 Cesium for Omniverse1.1.5 Cesium for O3DE 1.2 支持的数据格式 2、CesiumJS安装3、代码测试3.1 安装node3.2 安装依赖项3.3 运行测试示例3.4 注册获取token 4、扩…

常见的前端框架

随着前端行业的发展,前端框架越来越多出现,为我们的项目开发工作带来了极大的便利,那目前主流的前端框架有哪些呢? 工作中我们常用的前端框架有vue框架、React框架、Bootstrap框架、Angular框架等,下面给大家简单介绍…

【AI绘图】二、stable diffusion环境准备与安装

前一篇:一、stable diffusion的发展史 放一张SD的效果图 硬件配置要求 Stable Diffusion是使用显卡生成图片,对电脑硬件有一定要求。 电脑配置最核心的关键点:看显卡、看内存、看硬盘、看 CPU。 显卡:N 卡(英伟达 N…

基于内点法求解最优潮流研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Spring源码(二)— AbstractApplicationContext

上一篇文章简单的介绍了一下Spring框架大体的一个执行流程,整个专栏的内容也会根据第一篇序言中的流程图一步一步的向下梳理,并会慢慢补充更多的细节进去。 Test 创建ClassPathXmlApplicationContext来解析xml。 public class Test {public static vo…

剖析 OpenShift 中的 DNS

深入分析 OpenShift 内部 DNS OpenShift 中的DNS 相关组件及其配置1.1 Pod 中的 DNS 配置1.2 Pod 所在宿主机上的 DNS 配置及服务1.2.1 resolv.conf 文件 DNS 配置DNS 查询流程为什么需要内部 DNS? 本文基于 OpenShift 3.11,Kubernetes 1.11 进行测试 O…

2023/6/4周报

目录 摘要 论文阅读 1、标题和现存问题 2、使用GNN进行文本分类 3、INDUCT-GCN 4、实验准备 5、实验结果 深度学习 1、时空图的种类 2、图在环境中的应用 3、STGNN 总结 摘要 本周在论文阅读上,阅读了一篇InducT-GCN:归纳图卷积文本分类网络的论文。基…