最新要闻
- 铝合金铸造工艺有哪些?铝合金铸造工艺流程
- 苦主是什么意思?苦主引申含义是什么?
- 【环球热闻】基于汉兰达开发而来 雷克萨斯TX效果图曝光:竟与奇瑞星途“撞衫”
- 微软正式放弃Win10 21H1!将无法收到任何安全更新或补丁
- 亚米级的高精度定位 高德北斗卫星日定位量已超2100亿次
- 不枉马粉苦等一场 全新马自达CX-90预告:六缸、后驱全都有
- 【全球快播报】对标迈巴赫S级!蔚来百万级豪车计划落地 售价百万
- 【当前独家】告别LCD/mini LED iPad Pro全系升级到OLED屏
- 全球快资讯:高端成了!小米12S Ultra被中国移动评为4000元以上最强旗舰
- 视点!果粉霸气!花万元同时入手小米13和13 Pro:之前用的是iPhone 14 Pro Max
- 火箭平民化!中国民营火箭朱雀二号即将首飞:人类首次挑战甲烷燃料
- 小米13系列刷新认知 卢伟冰6字评价:彻底脱胎换骨
- 快讯:3999元起!小米13今日开售:手感、续航碾压iPhone 14 Pro
- 消息称苹果要对iOS开放 iPhone等自由了:功能、应用商店向第三方放开
- 苹果推送iOS 16.2正式版:新增无边记、Apple Music唱歌
- 阿根廷3-0克罗地亚晋级决赛!梅西创纪录之夜:成现役世界杯射手王
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
MySQL 行溢出
本文基于MySQL 5.7
行格式
InnoDB包含多张行格式
- Compact
- Redundant
- Dynamic
- Compressed
Compact行记录格式
Compact行记录是在MySQL 5.0中就引入的,其设计目标是高效地存储数据:一个页中存放的行数据越多,其性能就越高。
(资料图)
格式的首部是一个非NULL变长字段长度列表,并且是按照列的顺序逆序放置的,其长度为:
若列的长度小于255字节,则用1字节表示;
若大于255字节,则用2字节表示。
变长字段的长度最大不可超过2字节,这是因为VARCHAR类型的最大长度限制是65545(2^16 - 1)
如果是TEXT或者BLOB等情况会存在溢出页,行中不存储长度,具体后面会降到
第二部分是NULL标识位,标识这行数据中是否有NULL值,有则用1表示。占用1字节
接下来是记录头信息,固定占用5字节(40)位
名称 | 大小(bit) | 描述 |
---|---|---|
() | 1 | 未知 预留位 |
() | 1 | 未知 预留位 |
delete_mask | 1 | 标记该记录是否被删除 |
min_rec_mask | 1 | B+树的每层非叶子节点中的最小记录都会添加该标记 |
n_owned | 4 | 表示当前记录拥有的记录数 |
heap_no | 13 | 表示当前记录在记录堆的位置信息 |
record_type | 3 | 表示当前记录的类型,0 表示普通记录,1 表示B+树非叶子节点记录,2 表示最小记录,3 表示最大记录 |
next_record | 16 | 表示下一条记录的相对位置 |
Total | 40 |
每行记录除了用户数据外还会额外有一些隐藏列
列名 | 是否必须 | 占用空间 | 描述 |
---|---|---|---|
row_id | 否 | 6 字节 | 行ID,唯一标识一条记录 |
transaction_id | 是 | 6 字节 | 事务ID |
roll_pointer | 是 | 7 字节 | 回滚指针 |
光说不练没什么用我们实际搞点数据看看
相信大家下面的代码都能看懂
CREATE TABLE mytest(t1 VARCHAR(10),t2 VARCHAR(10),t3 CHAR(10),t4 VARCHAR(10)) ENGINE=INNODB CHARSET=LATIN1 ROW_FORMAT = COMPACT;INSERT INTO mytest VALUES("a","bb","bb","ccc");
拿到idb文件,这里有两个文件在InnoDB中 frm是表结构文件,idb为表数据文件
用hexdump等工具打开idb文件查看,这里我用的是vscode的插件
hexeditor
表数据是从*0xc000*
开始直接跳到0xc000
即可
03 02 01 是变长标识位 分别对应t4,t2,t1的长度 逆序存放
00 NULL标识位标识没有NULL值
00 00 10 FF EF 记录头数据
00 00 00 00 02 00 Row ID InnoDB自行创建
00 00 00 00 1A 02 transaction_id事物id
BD 00 00 01 35 01 10 roll_pointer 回滚指针
61 列1数据a
62 62 列2数据 bb
62 62 20 20 20 20 20 20 20 20 列3数据 bb 不足用20空格代替
63 63 63 列3数据
Redundant行记录格式
Redundant是MySQL5.0之前的InnoDB的行记录格式,之后只是为了兼容之前的版本所以这里不展开讲解
Dynamic与Compressed
Dynamic是MySQL 5.7默认的行格式
这两种格式为InnoDB 1.0.x版本后新引入的格式,在格式上与Compact基本相同只是在行溢出上处理不同
行溢出是什么下面会讲到
Compressed行记录还会对行数据进行zlib的算法进行压缩,因此对于BLOB、TEXT、VARCHAR这类大长度类型数据会有更好的存储优化
行溢出
试想一个问题VARCHAR ASCII(一个字符占用1个字节)编码下最大的大小是多少?
CREATE TABLE mytest2(t1 VARCHAR(100000)) ENGINE = INNODB CHARSET = ASCII
报错
1074 - Column length too big for column "t1" (max = 65535); use BLOB or TEXT instead, Time: 0.002000s
提示我们最大是65535也就是2^16 -1
那么我们思考一个问题 MySQL以页为单位进行操作 每个页默认大小为16k,同时MySQL规定一个页中最少有两条数据,至于为什么和B+树结构有关(后面会给出引用),我们不考虑页额外占用的大小以及行额外占用的大小65532肯定大于8k,那数据是怎么存储的呢?
对于这种情况InnoDB会把TEXT、BLOB、VARCHAR等格式数据存放在页类型为Uncompress BLOB的页中,在行中存储前768个字节+偏移量指向溢出页,注意:这里不是绝对会存储前768个字节,不同行格式之间是不同的
在Compact
和Reduntant
行格式中溢出页是这样存储的
Dynamic
和Compressed
行格式溢出页存储有所不同
行溢出的边界
如果你看过一些八股文可能会说TEXT类型超过40个字节就会行溢出,或者看官方文档
真实情况是这样么?
CREATE TABLE `testText` (`id` int(11) unsigned NOT NULL,`before` char(6) NOT NULL DEFAULT "before",`data` VARCHAR(10240) NOT NULL,`after` char(5) NOT NULL DEFAULT "after",PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4insert into testText (id,data) values (1,repeat("0123456789abcdef",5));
新建一个表使用的格式是utf8mb4变长也就是1个字母占用一个字节,我用的MySQL版本为5.7所以默认行格式是Dynamic
接下来插入一条数据重复0123456789abcdef
这里是16个字节重复5次这样肯定超过了40个字节对吧
分析发现还是在行中存储,你可能会问不对啊 我看八股文和官方文档上确实说40个字节会导致行溢出,我们再来看官方文档
在40个字节之前还有个限定条件具体是否溢出还需要看页大小以及行大小
我们继续使用之前的数据这次改为重复506次,再来看二进制的数据
发现这里已经变成了20字节的指针
溢出页数据
所以我们可以知道只有在行长度太长的情况下才会出现页溢出,但是页溢出的大概值是多少呢
- 每个页16k会有一些额外信息大概136个字节
- 每个记录的额外字节大概是27 不是具体值可能会因为没有NULL值等情况
- 每个页最少两条行记录
所以可以得出 如果136 + 2×(27 + n) > 16384
n = 8098 这里只是大概值具体会有上下浮动,所以结论是:如果行长太长导致一行存不下时才会发生行溢出,如果有多列会溢出最长的那列直到一行能存下所有数据
影响
当出现行溢出时会查询溢出的页导致多余的磁盘I/O也会导致查询时间增加,所以建议在查询时只查询需要的列,对于可能溢出的列又用不到就不要去查了。
引用
MySQL技术内幕MySQL是怎样运行的InnoDB 如何处理 TEXT/BLOB 列what is off page in mysqlInnoDB Row Formats
-
MySQL 行溢出
本文基于MySQL5 7行格式InnoDB包含多张行格式CompactRedundantDynamicCompressedCompact行记录格式Compact行记录是在MySQL
来源: -
springboot+vue 若依项目在windows2008R2企业版部署流程
2022 12 12记录问题方便以后查看。一、准备工作1、本次使用jar包启动后端,故而准备打包后的jar文件。...
来源: -
环球视点!SpringCloud-Nacos学习笔记
spring-cloud-alibaba版本说明https: github com alibaba spring-cloud-alibaba wiki %E7%89%88%E6%9C%AC%E8%
来源: MySQL 行溢出
springboot+vue 若依项目在windows2008R2企业版部署流程
环球视点!SpringCloud-Nacos学习笔记
铝合金铸造工艺有哪些?铝合金铸造工艺流程
苦主是什么意思?苦主引申含义是什么?
世界微速讯:上网认证(锐捷睿易篇)
当前快看:JNPF3.4.5消息模块:多渠道应用,配置灵活多样,满足更多使用场景
【环球热闻】基于汉兰达开发而来 雷克萨斯TX效果图曝光:竟与奇瑞星途“撞衫”
微软正式放弃Win10 21H1!将无法收到任何安全更新或补丁
亚米级的高精度定位 高德北斗卫星日定位量已超2100亿次
不枉马粉苦等一场 全新马自达CX-90预告:六缸、后驱全都有
【全球快播报】对标迈巴赫S级!蔚来百万级豪车计划落地 售价百万
SAP根据源码导入/ui2/cl_json类
Docker 安装,常用命令
【当前独家】告别LCD/mini LED iPad Pro全系升级到OLED屏
全球快资讯:高端成了!小米12S Ultra被中国移动评为4000元以上最强旗舰
视点!果粉霸气!花万元同时入手小米13和13 Pro:之前用的是iPhone 14 Pro Max
火箭平民化!中国民营火箭朱雀二号即将首飞:人类首次挑战甲烷燃料
小米13系列刷新认知 卢伟冰6字评价:彻底脱胎换骨
快讯:3999元起!小米13今日开售:手感、续航碾压iPhone 14 Pro
消息称苹果要对iOS开放 iPhone等自由了:功能、应用商店向第三方放开
苹果推送iOS 16.2正式版:新增无边记、Apple Music唱歌
阿根廷3-0克罗地亚晋级决赛!梅西创纪录之夜:成现役世界杯射手王
后退N帧协议(GBR)
环球新资讯:taro 编译报:模块引入顺序不一致报错
环球微动态丨主持人邀请世界首富马斯克登台后 现场嘘声一片:尴尬到家
前沿资讯!科幻美剧《西部世界》凉凉!将被彻底下线:美国都不能播了
播报:美国宣布首次实现“核聚变点火”!终于不再“赔本”了
短讯!RX 7900 XT/XTX首发开卖几分钟告罄!黄牛炒疯了:两倍溢价
每日观点:阿根廷时隔四年再战克罗地亚!半决赛现场将播放陈奕迅《孤勇者》
焦点讯息:前端入门教程:CSS标准盒模型和怪异盒模型区别
世界新资讯:卡梅隆力荐!《阿凡达:水之道》CINITY版明日点映:我国自主研发
啥?青岛海边能捡到帝王蟹引围观 网友称赚大 专家解答:不是帝王蟹
世界短讯!神舟十四号航天员摄影作品展:16个地方你认识多少?
《三体》动画爆火 “三体宇宙”能成中国版“漫威宇宙”吗?
每日短讯:Django框架:3、Django请求生命周期(重要)
环球微头条丨全年零事故率!换换智能换电解决电动车最大安全隐患
暴雪与新代理展开洽谈 魔兽等国服谁接?网易偷笑 新版号这难题无解
当前热文:一加11R参数曝光:6.7寸120Hz屏、搭载红外传感器
1*5 句话月考游寄
快资讯:女子下班回家发现2千万豪宅“塌了”:科普何为毛细管网
国际乒联服务器出问题 马龙、樊振东等信息遭泄漏
《暗黑破坏神4》IGN前瞻来了!堪称《暗黑2》超级强化版
环球新动态:被马斯克预言“倒闭” Lucid开始在华招人:明年国内销售
观速讯丨canvas处理切图并旋转图片
天天播报:MIUI 14上手:系统瘦身 更流畅了
天天快讯:不靠CG!诺兰新片《奥本海默》实拍还原第一颗原子弹爆炸场面
【时快讯】花几百亿“烧一壶开水” 美国是不是有“大病”?
国外发现马航MH370起落架残骸:或成蓄意坠毁关键证据
https代理服务器(一)问题引出
观点:路由分发 路由别名的名称空间 虚拟环境 HTTPresponse JsonResponse request对象获取文件 CBV源码剖析 模板语法传值特性
世界要闻:做7秒动画赢13W大奖?总奖池超80W、国内最火爆的3D渲染动画创作大赛开始报名!
全球今热点:iPhone 15拍照值得期待!苹果CEO库克拜访索尼传感器工厂
当前快看:iPad 10耐用性测试:惨遭一掰两半!质量堪忧
中国卫星拍的第一批太阳照片公布!你看懂了吗?
今日讯!MIUI 14脱胎换骨 张宇:梦回MIUI 9快如闪电的感觉
甄子丹主演 新大片《天龙八部之乔峰传》定档:宣传中国武侠
热资讯!字符串相关类
微动态丨Python工具箱系列(二十)
portainer安装,配置,使用
世界速递!Fiddler拦截请求、修改refer数据
全球报道:厘清企业数据治理难题,《网易数据治理白皮书》重磅发布!
天天报道:全球第一次:万兆家用宽带成了!上传、下载都是几千兆
北京小客车指标会过期?官方:谣言、不用着急买车
观焦点:口碑很差?《三体》动画豆瓣开分:几万人给五星 你看没
天天看热讯:红魔27英寸电竞显示器2K版来了:240Hz高刷卖2499元
今日播报!雷军希望的超越苹果做到了!近8成网友认为小米13比iPhone 14 Pro好看
基于zookeeper的kafka中间件
全球快讯:redis缓存穿透、缓存雪崩、缓存击穿【项目总结】
今日热议:零基础开启元宇宙|抖音快手虚拟形象直播【源码】
全球最资讯丨概率论之重要的随机变量
Zabbix技术分享——zabbix命令详解
索尼被曝测试新版PS5:性能不变、增设可拆卸光驱
全球热消息:因担心投资者被吸引到他国:欧盟再次推迟将锂列为有害物质
世界今亮点!苹果担心的事儿发生了 男子用AirTag追踪妻子被逮捕
《巫师3》次时代版体积惊人:PS5升级包超50GB
【世界播资讯】国家邮政局官方回应“快递不快”:加快恢复 邮政顺丰京东开启夜派
环球简讯:eval和ast.literal_eval区别
即时:MySQL索引必知必会
焦点速看:深入理解Whitelabel Error Page底层源码
短讯!字符串函数
【脚本项目源码】Python实现鲁迅名言查询系统
短讯!NGINX常见的变量说明
程序员也可以很浪漫,精选10个圣诞节特效及源码
天天资讯:使用Cpolar搭建一个图片网站2 (Piwigo网站环境准备及安装)
苹果笔记本是什么系统?苹果笔记本怎么安装win10系统?
关闭笔记本触摸板的方法有哪些?关闭笔记本触摸板的四种方法
柳叶刀是哪个国家的杂志?柳叶刀杂志是什么水平?
2023年元旦股市放假几天?2023年元旦股市休市时间表
消防车也要去加油站加油吗?消防车多少钱一台?
win10可以免费升级吗?免费升级win10的条件有哪些?
wlan和wifi哪个网速更快?wlan和wifi的区别是什么?
内存卡读不出来是什么原因?内存卡读不出来怎么修复?
一加8t和一加8pro哪个好?一加8t参数配置
环球微动态丨下载selenium及其适配谷歌浏览器插件chromedriver(含chrome各版本及下载地址)
19.13备库duplicate恢复新主库(二)
iPhone6多少钱?iphone6系统最高可以升级到多少?
锵锵三人行停播原因是什么?锵锵三人行女嘉宾名单大全
沙海吴邪的计划是什么?沙海吴邪的计划成功了吗?
什么边野草花什么口夕阳斜?什么边野草花什么口夕阳斜是什么诗?