mysql支持两种压缩模式:compressed和Transparent Page Compression【透明页压缩TPC 5.7】
  • 开启compressed
    CREATE TABLE t2 (c1 INT) row_format=compressed,key_block_size=8;
    alter table t2 row_format=compressed,key_block_size=8;

  • 开启TPC
    CREATE TABLE t1 (c1 INT) COMPRESSION=“zlib | lz4”;
    alter table t1 compression=“zlib | lz4”;
    optimzie table t1;

  • 禁用TPC
    alter table t1 compression=“none”;
    optimzie table t1;

zlib压缩比高但速度慢,测试5000w表需要30min

  • compressed 需要配合innodb_file_format = Barracuda 否则压缩无效(不会报错,只有警告信息)
  • compressed key_block_size只能指定为16的因数,如:4,8,16,默认是page_size的一半。数据的具体形式决定了压缩程度,通常会压缩50%以上。通过指定innodb_compression_level级别调整压缩比和cpu的开销(可调整到1~9,默认是6,级别越低压缩比越高CPU开销越大)
    对于具有列值较长的表,使用compressed压缩表格式往往更高效
  • TPC压缩利用文件系统‘打孔’技术,如果innodb_page_size = 16K,文件系统块大小为4K,则页面数据必须压缩到小于或等于12K才能进行‘打孔’
    TPC压缩需要linux文件系统支持 hole punching功能**(阿里云支持)**

传统压缩:
传统压缩
TPC压缩:
TPC压缩

3.真实应用

真实应用表结构:
表结构
MySQL存储空间使用情况:
请添加图片描述

记得一次面试中,面试官问我是否知道表的 压缩 ,这个时候我才知道 mysql 有个表 压缩 这么个功能,今天试用下看看表的 压缩 率怎么样。 这里分两个部分说明,第一部分:官方文档说明;第二部分:具体实例测试。 【第一部分】 一、表 压缩 概述: 表 压缩 可以在创建表时开启, 压缩 表能够使表中的数据以 压缩 格式存储, 压缩 能够显著提高原生性能和可伸缩性。 压缩 意味着在硬盘和内存之间传输的数据更小且占用相对少的内存及硬盘...
使用row_format=compressed创建的表能使用比默认16KB更小的页。页的大小是参数key_block_size控制的。在创建 压缩 表之前,确认innodb_file_per_table配置启用了,innodb_file_format设置成了Barracuda。 对表启用 压缩 ,需要在建表或alert table语句中使用ROW_FORMAT=COMPRESSED, KEY_BLOCK_
数据库 由一行行记录组成,每行记录存放到页中,一个页的默认大小为16k,一个个页组成了每张表的表空间 如果一个页中存放记录越多,那么性能也越高 这是因为, 数据库 表空间中的页存放在磁盘上, MySQL 数据库 先从磁盘中的页读取到内存缓冲池中,以页为单位进行读取和管理记录 如果想页中的记录变多,可以启用 压缩 (记录、页、表 压缩 ) 普遍使用页 压缩 压缩 每条记录: 因为每次读写都要 压缩 和解压,过于依赖 CPU 的计算能力,性能会明显下降;另外,因为单条记录大小不会特别大,一般小于 1K, 压缩 效率也并不会特别好。 第一种:传统 压缩 传统的表 压缩 方式是在 MySQL 5.0.7之前使用的,现在已经废弃了,因为这种方式不但没有提升 数据库 的效率,反而降低了效率,导致buffer pool的使用率降低了。 create table时指定 压缩 后表的大小,即 KEY_BLOCK_SIZE 的大小,page默认大小为16KB。 压缩 是按page为单位进行 压缩 的。
TDSQL MySQL 版(TDSQL for MySQL )是部署在腾讯云上的一种支持自动水平拆分、Shared Nothing 架构的分布式 数据库 。TDSQL MySQL 版 即业务获取的是完整的逻辑库表,而后端会将库表均匀的拆分到多个物理分片节点。 水平拆分方案是 TDSQL MySQL 版 的基础原理,它的每个节点都参与计算和数据存储,且每个节点都仅计算和存储一部分数据。因此,无论业务的规模如何增长,我们仅需要在分布式集群中不断的添加设备,用新设备去应对增长的计算和存储需要即可。 通过如下视
MySQL InnoDB表支持行格式 压缩 压缩 后的表能够显著减少磁盘空间占用,但是 压缩 功能也会造成一定的性能损耗,比如加重CPU的负载,降低 数据库 吞吐量。本文通过测试案例,来具体了解 MySQL InnoDB行格式 压缩 的效果以及对性能的影响。 MySQL 版本:5.7.19 测试工具:sysbench,10张表,单张表1000w数据,32线程并发 测试场景:read_only,write_only,read_write 行格式 压缩 语法: ALTER TABLE sbtest1 ROW_FORMAT=COM
官网地址:https://github.com/Percona-Lab/t pc c- mysql [root@test3 src]# unzip t pc c- mysql -master.zip [root@test3 src]# mv t pc c- mysql -master /usr/local/src/ [root@test3 l...