几招省磁盘空间的方法

标签: MySQL优化设计 空间 | 发表时间:2014-11-27 07:07 | 作者:OurMySQL
出处:http://ourmysql.com

   我们在工作中时常会遇到一些客户的TPS\QPS都不太高,但磁盘占用非常大,一旦单实例空间太大,像内存、网络、CPU以及备份都将增加相应的开销。可能仅仅是由于空间不满足使得我们不得不进行扩容,下面的方法提供给大家参考。有则改之无则加勉。

   1、表结构设计上

   1) 字符集是否遵循了最小化原则?(能用latin的就不用gbk。能用gbk的就不用utf8)

   2) 索引上是否有滥用?(根本不使用的字段建索引、不适合建索引的字段建索引、重复建索引或者不能很好的利用前缀索引等)

   3) 冗余字段是否太多?(各表中不用的或者字段冗余太多)

   4) 不正确的字段类型?(能用1个字节非要用几个字节,像枚举类、状态类比较常见)

   5) 将较长的字段或者几个字段组合做为主键?(主键最好用mysql自增)

   具体事例如下:

   CREATE TABLE `class_meta` (

   `class_name` varchar(128) NOT NULL COMMENT ‘类名’,

   `class_desc` varchar(2048) default ” COMMENT ‘类的描述’,

   `class_status` char(20) default ‘test1′ COMMENT ‘test1,test2′,

   PRIMARY KEY (`class_name`),

   UNIQUE KEY `cm_cn_uk` (`class_name`),

   KEY `cm_cd_ind` (`class_desc`(767)),

   KEY `cm_cs_ind` (`class_status`),

   KEY `cm_cdcn_ind` (`class_desc`(767),`class_name`)

   ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT=’meta信息’;

   通过上面的表结构能看到如下地方不合适

   1、主键与唯一索引明显重复,索引cm_cd_ind与索引cm_cdcn_ind索引重复(这种情况经常出现,大家留意下)

   2、cm_cs_ind如果两个状态分布均匀也明显不合适建索引

   3、class_desc由于是描述性质的,也不合适建索引

   4、最好以自增做为主键,可以减少整表的空间

   5、class_status列明显可以用tinyint来存,可以省下19个字节

   2、存储内容上

   1) 是否将图片、视频、音乐等大数据存储在表中?(表里最好只保留路径而不是实际的文件内容)

   3、数据保留上

   1)是否有已过期而未删除的数据?(对于无效数据及时清理或者进行历史归档)

   4、后期维护上

   1)是否对经常删除的表进行维护(optimize table)

   建议:

   1、在性能要求不高的case中(并发不太高),可以考虑使用压缩表。一般压缩率在30%-70%之间,收益非常可观。

   2、对于删除非常频繁的表要定期进行优化,使表中碎片减少。提高查询、写入的性能。

   3、在表结构设计上,一定要发扬“斤斤计较”的精神,能用1个字节表示的坚决不用2个字节。

   4、尽量减少大字段的使用。

   ps:经常在跟开发评审表结构的时候,时常会被笑话说DBA太抠门,一点都不大气。当数据量小的时候可能大家不觉得,但当你的数据级到T或者P的时候,哪怕多省几个字节都是非常可观的,给大家简单算笔账,如果我们将一张5亿条记录的表,字段从100个字节降到60个字节(应该很容易做到吧),那么不算上索引将节约大约18G的空间。

抱歉猜想失败,您看看下面的文章有用吗?

相关 [磁盘空间 方法] 推荐:

几招省磁盘空间的方法

- - OurMySQL
   我们在工作中时常会遇到一些客户的TPS\QPS都不太高,但磁盘占用非常大,一旦单实例空间太大,像内存、网络、CPU以及备份都将增加相应的开销. 可能仅仅是由于空间不满足使得我们不得不进行扩容,下面的方法提供给大家参考.    1) 字符集是否遵循了最小化原则?(能用latin的就不用gbk.    2) 索引上是否有滥用.

磁盘空间不足的临时解决方案

- - OurMySQL
    一、通过软连接的方式迁移部分表空间到其他硬盘.    优点:对数据没有任何影响,反而可以适当增加IO能力,使用多个磁盘的IOPS.    1、关掉mysql实例.    6、启动数据库,检查是否异常.    7、删掉 remove的文件..     二、通过blackhole引擎,清理掉一些不重要,但是占用空间较大的表.

delete 清空表之后,磁盘空间未发生变化?

- - SegmentFault 最新的文章
上篇文章结尾和小伙伴们留了一个小问题,就是关于 optimize table 命令,今天我想花点时间再来和小伙伴们聊一聊这个话题. 我现在有一个名为 sakila 的数据库,该库中有一个 film 表,这个表中有 1000 条记录,我么先来看下这 1000 条记录占用了多少存储空间:. 小伙伴们可以看到,这个文件大小是 360448 个字节.

Chrome OS 会在磁盘空间不足之时自动删除用户数据

- delphij - 谷奥——探寻谷歌的奥秘
在最新版的Chrome OS Dev分支 (14.0.835.87) 里,文件管理器最底部多出了一行提示,说:. 警告:这些临时文件可能会被自动删除以释放磁盘空间. 如果你的Chromebook磁盘空间不多的时候,你的浏览器数据会被自动删除. 在需要额外空间的时候,超过3个月没登录过的非拥有者帐户的信息都会被删除(包括下载的文件).

SpaceSniffer — 找出侵占你磁盘空间的罪魁祸首 | 小众软件 > 实用工具

- manabomb - 小众软件 - Appinn
SpaceSniffer是一个运行于 Windows 下的磁盘空间占用查看工具. 打开“计算机”,鲁二狗看着那几行红红的硬盘空间条又郁闷了:硬盘又满了,想清理一下还不知道哪个文件占的空间,于是向 root 请教. root 麻利地拿出 SpaceSniffer 给鲁二狗传去,于是各种超大的文件全部浮出水面,而且 SpaceSniffer 支持直接选中之后的 Windows 右键菜单,这样就可以直接删除了(当然,不按住 Shift 的话最后还得清空回收站).

模板方法

- - 博客园_首页
由于前两天刚好用到模板方法这个模式,而且这个模式相对来 比较简单实用,就写写个人的一些认知吧. 大家对宋丹丹和赵本山的小品里有一个很经典的台词一定不会陌生,而且还日常中经常引用:. 《钟点工》中宋丹丹问要把大象装冰箱,总共分几步. 赵本山就懵了,大象那么大,冰箱那么小,怎么才能把大象装冰箱里呢. 答案也很经典:三步:第1步,把冰箱门打开;第2步,把大象装进去;第3步,把冰箱门带上.

详解 equals() 方法和 hashCode() 方法

- - ImportNew
Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码. equals()和hashCode()都不是final方法,都可以被重写(overwrite). 本文介绍了2种方法在使用和重写时,一些需要注意的问题. Object类中equals()方法实现如下:.

mysql优化方法

- - 数据库 - ITeye博客
通过show status和应用特点了解各种SQL的执行频率. 通过SHOW STATUS可以提供服务器状态信息,也可以使用mysqladmin extended-status命令获得. SHOW STATUS可以根据需要显示session级别的统计结果和global级别的统计结果. 以下几个参数对Myisam和Innodb存储引擎都计数:.

WinDump使用方法

- - 研发管理 - ITeye博客
Windump是Windows环境下一款经典的网络协议分析软件,其Unix版本名称为Tcpdump. 它可以捕捉网络上两台电脑之间所有的数据包,供网络管理员/入侵分析员做进一步流量分析和入侵检测. 在这种监视状态下,任何两台电脑之间都没有秘密可言,所有的流量、所有的数据都逃不过你的眼睛(当然加密的数据不在讨论范畴之内,而且,对数据包分析的结果依赖于你的TCP/IP知识和经验,不同水平的人得出的结果可能会大相径庭).