mysql innodb表压缩

使用row_format=compressed创建的表能使用比默认16KB更小的页。页的大小是参数key_block_size控制的。在创建压缩表之前,确认innodb_file_per_table配置启用了,innodb_file_format设置成了Barracuda。
对表启用压缩,需要在建表或alert table语句中使用ROW_FORMAT=COMPRESSED, KEY_BLOCK_SIZE从句。
CREATE TABLE t1
(c1 INT PRIMARY KEY)
ROW_FORMAT=COMPRESSED
KEY_BLOCK_SIZE=8;
如果指定了ROW_FORMAT=COMPRESSED,可以不指定key_block_size,默认的,innodb_page_size一半大小的页被使用。如果指定了key_block-size,可以忽略row_format=compressed参数,压缩也会自动启用。
key_block_size的值只能是小于或等于innodb_page_size,如果设置过大的话,会有告警,并忽略这个值,使用innodb_page_size的一半去设置。如何去决定key_block_size的大小,可以使用不同的值创建几个副本,对比ibd文件。key_block_size的大小应该大于记录大小的最大值,否则操作会失败,如果该值太小,插入和更新也许会导致耗时的解压操作,b-tree节点也许会更频繁的分裂,导致更大的数据文件和低效的索引。一般情况下key_block_size=8是个安全的设置。
key_block_size这个值决定了每个压缩chunk的大小,多少行能被打包到一个压缩页中。
表上的索引也都使用相同的页大小来压缩。
表压缩主要是用在表上的字符串字段比较多,数据的读比写更频繁的情况下,如果你的应用是io密集型的,不是cpu密集型的,那么压缩会带来很多性能的提升。

mysql> delete from comp_big_table;
Query OK, 1007872 rows affected (8.17 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

查看idb文件-rw-rw—-. 1 my3333 mysql 192937984 May 17 14:38 comp_big_table.ibd
文件没有收缩

mysql> optimize table comp_big_table;
+———————+———-+———-+——————————————————————-+
| Table | Op | Msg_type | Msg_text |
+———————+———-+———-+——————————————————————-+
| test.comp_big_table | optimize | note | Table does not support optimize, doing recreate + analyze instead |
| test.comp_big_table | optimize | status | OK |
+———————+———-+———-+——————————————————————-+
2 rows in set, 4 warnings (0.03 sec)
-rw-rw—-. 1 my3333 mysql 98304 May 17 14:38 comp_big_table.ibd
收缩了
对比下压缩效果,压缩效果还可以,760多M压缩到了200M,压缩表的count查询时间更长些。实际环境中,还是要测试业务sql在压缩表上执行效果评估。
select count() from big_table;select count() from key_block_size_4;
+———-+
| count(*) |
+———-+
| 4031488 |
+———-+
1 row in set (4.11 sec)

+———-+
| count(*) |
+———-+
| 4031488 |
+———-+
1 row in set (8.02 sec)
update语句,压缩表的时间也要长些。delete的一样,delete就是mark下,后续在删除。
mysql> update key_block_size_4 set column_type=”test” where id=3;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> update big_table set column_type=”test” where id=3;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> delete from big_table where id=2;
Query OK, 1 row affected (0.00 sec)

mysql> delete from key_block_size_4 where id=2;
Query OK, 1 row affected (0.00 sec)

-rw-rw
—-. 1 my3333 mysql 767557632 May 17 15:04 big_table.ibd
-rw-rw—-. 1 my3333 mysql 205520896 May 17 15:07 key_block_size_4.ibd

监控压缩表:
innodb_cmp
innodb_cmp_per_index

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值