mysql 5.5 优化_MySQL5.5.X不可不说的优化秘密下

14.支持创建压缩数据页

从MySQL5.5.X版本开始支持InnoDB数据页压缩,数据页的压缩使数据文件体积变小,减少磁盘I/O,提高吞吐量,小成本地提高了CPU利用率。尤其是对读多写少的应用来说最为有效,同样的内存可以存储更多的数据,充分地“榨干”内存利用率。

工作原理是:当用户获取数据时,如果压缩的页没有在Innodb_Buffer_Pool缓冲池里,那么会从磁盘加载进去,并且会在 Innodb_Buffer_Pool缓冲池里开辟一个新的未压缩的16 KB的数据页来解压缩,为了减少磁盘I/O以及对页的解压操作,在缓冲池里同时存在着被压缩的和未压缩的页。为了给其他需要的数据页腾出空间,缓冲池里会 把未压缩的数据页踢出去,而保留压缩的页在内存中,如果未压缩的页在一段时间内没有被访问,那么会直接写入磁盘中,因此缓冲池中可能有压缩和未压缩的页, 也可能只有压缩页。

InnoDB采用最近最少使用(LRU)算法,将经常被访问的热数据放入内存里。当访问一个压缩表时,InnoDB会通过自适应的LRU算法来实现内存中 压缩页和未压缩页的平衡,其目的是避免当CPU繁忙时花费太多的时间在解压缩上,也是为了避免在CPU空闲时在解压缩操作上做过多的I/O操作。

当系统处于I/O瓶颈时,这个算法会踢出未压缩的页,而不是未压缩和压缩的页,从而为更多的页注入内存腾出空间;

而当系统处于CPU瓶颈时,这个算法会同时踢出未压缩的页和压缩的页,留出更多的内存来存放热数据,减少解压缩带来的开销。

在以前的版本中,一个数据页是16 KB,现在可以在建表时指定压缩的页是1 KB、2 KB、4 KB还是8 KB,如果设置过小,会导致消耗更多的CPU,通常设置为8 KB。

注意,必须采用Barracuda文件格式且独立表空间,才支持数据页压缩,如下所示: innodb_file_format = Barracuda innodb_file_per_table = 1

要设置数据页为8 KB,在建表的时候加入ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8即可,代码如下: CREATE TABLE 'compressed' ( 'id' int(10) unsigned NOT NULL AUTO_INCREMENT, 'k' int(10) unsigned NOT NULL DEFAULT '0', 'c' char(120) NOT NULL DEFAULT '',

'pad' char(60) NOT NULL DEFAULT '', PRIMARY KEY ('id'), KEY 'k' ('k') ) ENGINE=InnoDB DEFAULT CHARSET=gbk ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值