表数据删一半,为什么表文件大小不变?
参数innodb_file_per_table
这个参数设置为ON,表示每个表数据单独存在一个文件中,这时如果执行drop命令,系统会直接删除表文件。
这个参数设置为off时,所有表的数据和索引都存在共享的.ibdata文件,即使表删掉了,磁盘空间也不会回收,而是将表数据标记为可复用。
系统表空间
所有表的数据和索引都存储在共享的.ibdata
文件
数据删除其实是标记为可复用
每个b+数的叶子节点是一个数据页,一个数据页包含很多条记录,一条记录被删除时,仅仅是这个记录的位置被标记为可复用,不管是主键索引还是二级索引,数据都是按照索引的顺序排好的,当一条记录被标记为可复用时,当有一条记录可以插在这个被复用的位置上时,就直接复用了这个位置,但是如果这条记录不能插在这个位置上就不能复用,比如一个主键索引树上,一个数据页有R1(100,数据),R2(200,数据),R3(300,数据),当R2被删除标记为可复用时,有个记录为100~300之间的都能复用这个位置,但是超过这个范围的就不行了。
当一个数据页都被标记为可复用时,就没有范围了,当需要新开辟一个数据页时,直接复用这个数据页。
所以,即使我们使用delete删除一个表的所有记录,磁盘文件也是不会减小的,而是都标记成可复用。
而这些可以复用但是没被复用的空间就是空洞。
删除数据会产生空洞,插入数据也会
在数据页内的数据很紧凑的情况下(不是100,200,300而是1,2,3,4,5这种)
假如一个数据页A已经满了,这时再插入一个比较靠后的位置,就会把这个新数据和数据页A后面的记录放在另一个新申请的数据页中。这就导致了A后面的记录变成空洞。
更新索引上 的值是先删除一个旧的值,再插入一个新的值
这也会产生空洞
通过重建表来收缩表空间,填补空洞
使用alter table A engine=InnoDB命令来重建表
(MYSQL5.5之前,默认的隐含意思是alter table t engine=innodb,ALGORITHM=copy)
MYSQL5.5之前,这条语句的执行逻辑是这样的:
首先创建一个临时表B,再将A中的数据一条一条按照顺序读写到表B中
这时B中数据是按照顺序插入的,没有空洞。
最后将A和B互换(重命名),删除表B。完成表A的重建
Online DDL
在上面这个流程中,最耗时的就是拷贝数据这个部分了,这个过程中如果写数据到A中,就会造成数据丢失。
Online DDL: 在对表结构进行更改时(执行DDL语句),同时支持对表数据进行增删改查。
此时重建表的逻辑就变成了
(MYSQL5.5之后,默认的隐含意思是alter table t engine=innodb,ALGORITHM=inplace)
首先创建临时文件B,在拷贝数据到临时文件B期间,将对表A的数据增删改查记录到一个日志文件row log中。
在拷贝完成后,将日志文件对表A数据的更改应用到临时文件B中,这样临时文件B中的数据旧和是一样的了
最后用临时文件B替换表A的数据文件
注意到这里和MYsql5.5之前有个不同的点是,之前的B是创建的表,是在server创建的,而这里是创建的临时文件,是在innodb内部创建的。对于server来说没有将表A的数据迁移到其他表,因为inno代办对其数据文件进行了更换。是在原表上直接进行DDL操作,所以这种方式叫做inplace
DML写锁退化成读锁
这个流程中,在Alter 语句启动时会获取DML元数据写锁,防止其他线程来对这个进行结构的更改,同时DML写锁会阻塞数据的增删改查操作,但是读锁不会。所以在进行拷贝数据时,DML写锁会退化成DML读锁,DML读锁只会阻塞DML写锁,但是不会阻塞增删改查。
Online和inplace
DDL过程如果是Online的,就一定是inplace的
原因
因为Online DDl依赖于inplace算法,在重建表时,如果是使用的COPY模式,那就会创建新的表来作为临时中间表,这会阻塞增删改查,而inplace可以不创建新的表,仅仅是创建临时文件。
并且inplace在对DML写锁的持有上进行了优化,在进行拷贝数据到临时文件时就退化成读锁了。
但是一个DDL是inplace的,就不一定是Online的
原因
Online DDL指的是在进行DDL时不阻塞DML(数据的增删改查)。
即使是inplace地添加全文索引和添加空间索引时(在原表上创建索引而不创建临时表),仍然不能进行DML操作。
相关文章:
表数据删一半,为什么表文件大小不变?
参数innodb_file_per_table 这个参数设置为ON,表示每个表数据单独存在一个文件中,这时如果执行drop命令,系统会直接删除表文件。 这个参数设置为off时,所有表的数据和索引都存在共享的.ibdata文件,即使表删掉了&…...
MoCoOp: Mixture of Prompt Learning for Vision Language Models
文章汇总 当前的问题 1)数据集风格变化。 如图1所示,对于一个数据集,单个软提示可能不足以捕获数据中呈现的各种样式。同一数据集中的不同实例可能与不同的提示符兼容。因此,更**自然的做法是使用多个提示来充分表示这些变化**。 2)过拟合…...
YOLOv8 onnx 部署
本文是在win10系统下进行yolov8目标检测推理的过程记录。 yolov8 已经集成到OpenCV,可以通过两种方式调用,一种是直接通过OpenCV 调用,另外一种是通过onnx runtime(ort)调用。 1、安装cuda 、opencv 等依赖库,具体可以参考 Win1…...
在文件里引用目录文件下的静态资源图片不显示
问题:两种图片路径的指定方式,第一种能展示图片但第二种不能 两个 示例中,图片展示的差异。 在第一个示例中,图片路径是硬编码在 标签的 src 属性中的: <img src"../../assets/img/header01.png" style…...
vue使用 jsplumb 生成流程图
1、安装jsPlumb: npm install jsplumb 2、 在使用的 .vue 文件中引入 import { jsPlumb } from "jsplumb"; 简单示例: 注意:注意看 id 为"item-3"和"item-9"那条数据的连线配置 其中有几个小图片&#x…...
攻坚金融关键业务系统,OceanBase亮相2024金融科技大会
10月15-16日,第六届中新数字金融应用博览会与2024金融科技大会(简称“金博会”)在苏州工业园区联合举办。此次大会融合了国家级重要金融科技资源——“中国金融科技大会”,围绕“赋能金融高质量发展,金融科技创新前行”…...
《纳瓦尔宝典:财富和幸福指南》读书随笔
最近在罗胖的得到听书中听到一本书,感觉很有启发,书的名字叫《纳瓦尔宝典》,从书名上看给人的感觉应该财富知识类、鸡汤爆棚哪类。纳瓦尔,这个名字之前确实没有听说过,用一句话介绍一下,一个印度裔的硅谷中…...
C++ | STL | 侯捷 | 学习笔记
C | STL | 侯捷 | 学习笔记 文章目录 C | STL | 侯捷 | 学习笔记1 STL概述1.1 头文件名称1.2 STL基础介绍1.3 typename 2 OOP vs. GP3 容器3.1 容器结构分类3.2 序列式容器3.2.1 array测试深度探索 3.2.2 vector测试深度探索 3.2.3 list测试深度探索 3.2.4 forward_list测试深度…...
C函数基础
C语言中的函数教程 在C语言中,函数是一段组织好的、可重复使用的、用于执行特定任务的代码。函数可以提高代码的模块化和可重用性。以下是关于C语言中函数的详细教程。 1. 函数的定义与声明 1.1 函数定义 函数定义包括函数头和函数体。函数头包括函数返回类型、…...
html和css实现页面
任务4 html文件 任务5 htm文件 css文件 任务6 html文件 css文件 任务7 html文件 css文件...
Github_以太网开源项目verilog-ethernet代码阅读与移植(八)——移植工程分享
实验背景 第六篇计划是写项目中各个模块的实现和约束文件的编写,有的小伙伴有裁剪工程的需要,就先分享一个半成品以供参考,由于笔者水平有限,错误肯定会有,望批评指正。 实验内容 移植工程共享 实验步骤 工程一部…...
【大模型实战篇】大模型分词算法BPE(Byte-Pair Encoding tokenization)及代码示例
词元化是针对自然语言处理任务的数据预处理中一个重要步骤,目的是将原始文本切分成模型可以识别和处理的词元序列。在大模型训练任务中,就是作为大模型的输入。传统的自然语言处理方法,如基于条件随机场的序列标注,主要采用基于词…...
低功耗4G模组LCD应用示例超全教程!不会的小伙伴看这篇就够了!
希望大家通过本文的介绍,学会LCD显示屏与Air780E开发板结合使用的方法。利用LCD显示屏,你可以为你的项目增加丰富的显示内容,提升用户体验。记住,实践出真知,赶快动手尝试吧!相信这篇教程对你有所帮助~ 本文…...
Java while语句练习 C语言的函数递归
1. /* public static void main(String[] args) {int[] arr {25, 24, 12, 98, 36, 45};int max arr[0];//不能写0for (int i 1; i < arr.length; i) {if (arr[i] > max) {max arr[i];}}System.out.println(max);}*//*public static void main(String[] args) {doubl…...
illustrator免费插件 截图识别文字插件 textOCR
随手可得的截图识别文字插件 textOCR,识别出来的文字可直接输入到illustrator的当前文档中: 执行条件 1、需截图软件支持,推荐笔记截图工具 2、截好图片直接拖入面板即可完成识别 ****后期可完成实现在illustrator选择图片对象完成文字识别。…...
提升数据管理效率:ETLCloud与达梦数据库的完美集成
达梦数据库的核心优势在于其强大的数据处理能力和高可用性设计。它采用先进的并行处理技术,支持大规模的数据操作,同时具备出色的事务处理能力和数据安全保障。此外,达梦数据库还提供了丰富的功能模块,如数据备份、恢复、监控等&a…...
头歌——人工智能(搜索策略)
文章目录 第1关:搜索策略第2关:盲目搜索第3关:启发式搜索 - 扫地机器人最短路径搜索第4关:搜索算法应用 - 四皇后问题 第1关:搜索策略 什么是搜索技术 人类的思维过程可以看作是一个搜索过程。从小学到现在࿰…...
gorm.io/sharding改造:赋能单表,灵活支持多分表策略(下)
背景 分表组件改造的背景,我在这篇文章《gorm.io/sharding改造:赋能单表,灵活支持多分表策略(上)》中已经做了详细的介绍——这个组件不支持单表多个分表策略,为了突破这个限制做的改造。 在上一篇文章中&…...
域渗透AD渗透攻击利用 MS14-068漏洞利用过程 以及域渗透中票据是什么 如何利用
目录 wmi协议远程执行 ptt票据传递使用 命令传递方式 明文口令传递 hash口令传递 票据分类 kerberos认证的简述流程 PTT攻击的过程 MS14-068 漏洞 执行过程 wmi协议远程执行 wmi服务是比smb服务高级一些的,在日志中是找不到痕迹的,但是这个主…...
C++进阶-->继承(inheritance)
1. 继承的概念及定义 1.1 继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要手段,他允许我们在保证原有类的特性基础上还进行扩展,通过继承产生的类叫做派生类(子类),被继承的类叫做基类&a…...
可视化项目 gis 资源复用思路(cesium)
文章目录 可视化项目 gis 资源复用思路底图、模型替换思路具体操作 可视化项目 gis 资源复用思路 背景: A项目的底图、模型 是现在在做的 B项目所需要的,现在要把 B项目的底图之类的替换成 A系统的 底图、模型替换思路 观察可访问系统的 gis 相关网络请…...
SQL实战测试
SQL实战测试 (请写下 SQL 查询语句,不需要展示结果) 表 a DateSalesCustomerRevenue2019/1/1张三A102019/1/5张三A18 1. **用一条 ** SQL 语句写出每个月,每个销售有多少个客户收入多少 输出结果表头为“月”,“销…...
Java 基础教学:基础语法-变量与常量
变量 变量是程序设计中的基本概念,它用于存储信息,这些信息可以在程序执行过程中被读取和修改。 变量的声明 在Java中,声明变量需要指定变量的数据类型以及变量的名称。数据类型定义了变量可以存储的数据种类(例如整数、浮点数…...
vue3使用element-plus手动更改url后is-active和菜单的focus颜色不同步问题
在实习,给了个需求做个新的ui界面,遇到了一个非常烦人的问题 如下,手动修改url时,is-active和focus颜色不同步 虽然可以直接让el-menu-item:focus为白色能解决这个问题,但是我就是想要有颜色哈哈哈,有些执…...
每天五分钟深度学习框架pytorch:从底层实现一元线性回归模型
本文重点 本节课程我们继续搭建一元线性回归模型,不同的是这里我们不使用pytorch框架已经封装好的一些东西,我们做这个目的是为了更加清楚的看到pytorch搭建模型的本质,为了更好的理解,当然实际中我们还是使用pytorch封装好的一些东西,不要重复造轮子。 模型搭建 #定义…...
编辑器加载与AB包加载组合
解释: 这个 ABResMgr 类是一个资源加载管理器,它用于整合 AB包(Asset Bundle)资源加载和 编辑器模式资源加载。通过这个管理器,可以根据开发环境选择资源加载方式,既支持 运行时使用Asset Bundle加载&…...
【c++】vector中的back()函数
nums.back() 是 C 中 std::vector 类的一个成员函数,用于获取数组(向量)中的最后一个元素。以下是一些关于 nums.back() 的详细解释和示例使用: 1. 功能 nums.back() 返回数组 nums 中的最后一个元素。如果数组为空,…...
[分享] SQL在线编辑工具(好用)
在线SQL编写工具(无广告) - 在线SQL编写工具 - Web SQL - SQL在线编辑格式化 - WGCLOUD...
element-ui隐藏表单必填星号
// 必填星号在前显示 去掉 .el-form-item.is-required:not(.is-no-asterisk) > .el-form-item__label:before { content: !important; margin-right: 0px!important; } // 必填星号在结尾显示 .el-form-item.is-required:not(.is-no-asterisk) > .el-form-item__labe…...
自动驾驶系列—激光雷达点云数据在自动驾驶场景中的深度应用
🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…...
网站制作怎样盈利/怎么做产品推广和宣传
本篇文章主要给大家介绍网页html文字滚动代码效果如何写?当我们在浏览新闻播放的页面时,总会看到底部有一段实时新闻不停的滚动出现,这样的效果通常可以由js或者css来完成操作。下面给大家具体介绍两种方法,一、js文字滚动代码具体…...
dede网站后台打不开/企业关键词大全
request作用域单个请求之间 session作用域打开浏览器,关闭浏览器之间,浏览器相关,同一个用户访问网站的次数 application对象作用域:服务器启动,关闭之间,一个网站被不同用户访问的次数 pageContext作用域&…...
外贸网站优化免费渠道/网络营销师官网
描述 假如你有一堆的盘子。如果你堆得太高的话,就可能会垮掉。所以,在真实的生活中,如果盘子叠到一定高度,你会重新开始堆新的一堆盘子。 实现这样的一个数据结构,我们称之为栈集,来模拟这个过程。这个栈…...
商城网站需要多少钱/百度题库
这是我的小窝,呵呵,希望大家都喜欢~转载于:https://blog.51cto.com/gjfan/122539...
十大小程序开发公司/seo培训师
参考链接: https://segmentfault.com/a/1190000012156828?utm_sourcetag-newest 这里说的很详细了,所以我就直接搬过来了,仅做笔记使用。 css选择器常见包括id(#id)、标签(tag)、class…...
让你做一个旅游网站你会怎么做/游戏推广公司怎么接游戏的
腾讯企点服务是什么?企点服务是在腾讯旗下各大社交数据与AI能力的基础上,专为满足企业现代化移动办公需求而研发打造的SAAS服务社会化客户关系管理平台,为企业的网络营销推广、内部办公协同、客服接待咨询提供解决方案,助力企业高…...