首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InnoDB行元数据大小(最小行大小)

InnoDB行元数据大小(最小行大小)
EN

Database Administration用户
提问于 2015-03-02 22:03:01
回答 2查看 586关注 0票数 2

我正试图决定是否进一步规范一件事情,并且需要知道InnoDB中最小的一行可以是什么(我已经得到了MySQL 5.6)。

这并不完全是我的情况,但为了简单起见,让我们假设我只有一个代理程序PK (bigint)和两个TINYINT列,两者都不能为null。如果我要拥有10亿字节的存储空间,那么每一行需要多少字节?

我设想每一行都需要一些元数据(我知道至少在有NULLable列时需要元数据),但似乎找不到关于如何计算它的文档。

那么,我可以期望被页面中的空闲空间和页面中的元数据吃掉多少(或者所有这些都在一起)?

我想知道,这样我才能更好地判断什么时候我会有一张狭小的长桌,以避免适当的正常化。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2015-03-02 22:31:50

InnoDB中的每一行(假设为紧凑格式)都有以下标题:

  • 偏移量-每个可变长度类型字段一个或两个字节。
  • 空标志-每个空字段一个位,对齐整个字节数.
  • 所谓的“额外字节”--一堆像is_deleted、指向下一个记录的指针等标志。五个字节的紧凑格式,固定。

接着是主键场(S)。然后是6个字节事务id和7个字节回滚指针。那么剩余的字段值。

对于给定的行(BIGINT、TINYINT、TINYINT),它的大小为:

  • 0字节偏移量
  • 0字节空标志
  • 5个字节“额外字节”
  • 8字节BIGINT
  • 6字节trx_id
  • 7字节roll_ptr
  • 1字节
  • 1字节

所以,每条记录有28个字节。

但是,要计算表的空间,您需要考虑到:

  • 页头(38+56字节)
  • 页式拖车
  • 页填充系数
  • 无穷大,上确界记录
  • 非叶页使用的空间

查看这些幻灯片以获得更多详细信息http://www.slideshare.net/akuzminsky/data-recovery-talk-on-pluk

票数 5
EN

Database Administration用户

发布于 2015-03-03 07:02:44

(我添加的是“答案”,而不是出于格式化原因的评论。)

@akuzminsky完全涵盖了大多数事情。

为什么是BIGINT一个不带符号的INT (最大值40亿)不就足够了吗?这样可以节省4GB。

填充因子有两种口味--

如果写干净了,那么块就满了15/16。总计可能是40-45 40。

如果有随机插入,那么块平均满69%。

现在。让我们问一下为什么会有这样的布局?这两个TINYINT将在10亿行中重复多次。(特别是,至少1B/(256*256) =某些威尔对将至少重复4K次。也许你可以只有65K行,并在其中有计数器?也许其他的总结技巧会对您的应用程序有用?(好吧,也许这张桌子是人造的。)

顺便说一句,MyISAM将为该表的数据取11 no (假设没有漏洞)。加上主键的另一个15-20GB。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/94222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档