`
丁林.tb
  • 浏览: 789314 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

查看InnoDB的磁盘空间利用率

阅读更多

这周阿里集团DBA内部分享时,支付宝的黄忠同学提了一个问题,关于InnoDB索引page 的利用率。

 

page利用率

主要是指btee里面每个page的使用被使用的空间大小。我们知道InnoDB默认一个page大小是16k。但实际使用情况不会总用满

我们定义为所有page的总使用字节除以总字节数。

在理论分析之前,我们要先弄个工具,查一下。

 

实例统计

写了一个简单的工具,读ibd文件上的每个page,算出每个page的实际使用字节,可以得到利用率。

我们找了线上一个库来模拟。表中有1个自增主键和3个非聚簇索引。不影响结论地简化为如下:

CREATE TABLE `ctu_factor_risk_99_03` (

`seq_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,

`a` varchar(32) DEFAULT NULL,

`b` varchar(32) DEFAULT NULL,

`c` varchar(32) DEFAULT NULL,
KEY a (a),

KEY bc (b,c),

KEY cb (c,b),

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

插入数据中a,b,c均为长度为30字节的随机字符串。

 

显然主键和其他索引应该分开统计。统计结果发现,主键page利用率71%,其他索引利用率约52%

 

简单分析

上面的结果很好理解。因为按照主键递增顺序插入数据,因此主键上数据“紧凑”。 而其他三个索引,则都是随机更新,需要不停地作索引节点分裂。

 

如何提升磁盘空间利用率

回到最开始的问题。其实我们关心的,是InnoDB为了保存相同的数据,用了多少空间。所以我们的问题变成,存储相同的数据,如何让占用的磁盘空间更小

 

         有一个很直观的结论。把这些索引删了重建,必然会减少空间消耗。因为这个操作之后,在新的数据插入之前,这些索引也变成“紧凑的”。

 

         再建了一个与cb相同的索引,再跑,利用率居然高达98%。这个原理大家应该都知道了,只是量化一下而已。

         工具附后, 用法 ./ibd_used tb.ibd N1 N2 >/tmp/r 最后几行为各个索引的利用率统计值

1
3
分享到:
评论
1 楼 china_fyz 2012-10-15  
ibd_used有版本限制么?我的mysql是5.0.77的官版,CentOS release 5.4执行到500页时候出现浮点错误,而且index_id也不对,测试的表只有2个索引,但统计的时候有5个

相关推荐

    Mysql InnoDB删除数据后释放磁盘空间的方法

    Innodb数据库对于已经删除的数据只是标记为删除,并不真正释放所占用的磁盘空间,这就导致InnoDB数据库文件不断增长。 如果在创建数据库的时候设置innodb_file_per_table=1,这样InnoDB会对每个表创建一个数据文件,...

    Mysql 的InnoDB引擎相关读书笔记

    1.3.3.InnoDB磁盘结构——表空间.md 1.4.0.Mysql文件——参数文件.md 1.4.1.0.Mysql文件——日志文件.md 1.4.2.Mysql文件——socket文件.md 1.4.3.Mysql文件——pid文件.md 1.4.4.0.Mysql文件——MYISAM文件.md ...

    Mysql innodb tablespace 表空间实践

    Mysql innodb tablespace 表空间实践

    InnoDB存储引擎中有页(Page)的概念

    系统从磁盘读取数据到内存时是以磁盘块(block)为基本单位的,位于同一个磁盘块中的数据...而系统一个磁盘块的存储空间往往没有这么大,因此InnoDB每次申请磁盘空间时都会是若干地址连续磁盘块来达到页的大小16KB。In

    【用Python 脚本查看MySQL innodb表空间中页的汇总情况】

    用Python 脚本查看MySQL表空间中页的汇总情况

    InnoDB 中文参考手册

    MySQL 的企业级解决方案,高...在InnoDB表中不需要扩大锁定(lock escalation),因为 InnoDB 的列锁定(row level locks)适宜非常小的空间。InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。

    InnoDB中文参考手册

    InnoDB 的设计目标是处理大容量数据库系统,它的 CPU 利用率是其它基于磁盘的关系数据库引擎所不能比的。 在技术上,InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速...

    MySQL技术内幕 InnoDB存储引擎.pdf

    最近在学习MySQL技术内幕 InnoDB存储引擎 第2版,整理了一些文档分享出来,同时也方便以后查看。若有不当之处,烦请批评指正。 1. MySQL体系结构和存储引擎 2. InnoDB存储引擎 2.1 InnoDB体系结构 2.2 ...

    MySQL Innodb 索引原理详解

    MySQL Innodb 索引原理详解

    MySQL InnoDB 查询优化实现分析

    MySQL InnoDB 查询优化实现分析,欢迎下载,1111111111111

    MySQL InnoDB表空间加密示例详解

    主要给大家介绍了关于MySQL InnoDB表空间加密的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    mysql内核 innodb存储引擎

    接着以InnoDB的内部实现为切入点,逐一详细讲解了InnoDB存储引擎内部的各个功能模块,包括InnoDB存储引擎的体系结构、内存中的数据结构、基于InnoDB存储引擎的表和页的物理存储、索引与算法、文件、锁、事务、备份,...

    InnoDB官方文档中文翻译版

    InnoDB官方文档中文翻译版 InnoDB官方文档中文翻译版 InnoDB官方文档中文翻译版

    详解MySQL中InnoDB的存储文件

    从物理意义上来讲,InnoDB表由共享表空间文件(ibdata1)、独占表空间文件(ibd)、表结构文件(.frm)、以及日志文件(redo文件等)组成。 1、表结构文件 在MYSQL中建立任何一张数据表,在其数据目录对应的数据库...

    MySQL判别InnoDB表是独立表空间还是共享表空间的方法详解

    InnoDB采用按表空间(tablespace)的方式进行存储数据, 默认配置情况下会有一个初始大小为10MB, 名字为ibdata1的文件, 该文件就是默认的表空间文件(tablespce file),用户可以通过参数innodb_data_file_path对其...

    mysql 5.6 新特性-innodb

    mysql 5.6 新特性 innodb

    MyISAM InnoDB 区别

    MyISAM InnoDB 区别 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的...

    innodb_ruby-master.zip

    MySQL分析 innodb

Global site tag (gtag.js) - Google Analytics