龙空技术网

MYSQL存储引擎InnoDB(五十七):表压缩概述

泡泡研究笔记 70

前言:

此刻各位老铁们对“mysql压缩数据”大概比较关心,小伙伴们都想要分析一些“mysql压缩数据”的相关资讯。那么小编在网摘上汇集了一些关于“mysql压缩数据””的相关资讯,希望同学们能喜欢,各位老铁们快快来学习一下吧!

由于处理器和高速缓存的速度比磁盘存储设备的增长速度更快,因此许多工作负载都是与磁盘性能绑定的。数据压缩可实现更小的数据库大小、更少的 I/O 和更高的吞吐量,同时增加的 CPU 负荷成本很低。在具有足够 RAM 以将常用数据保存在内存中的系统上,压缩对于读取密集型应用程序特别有价值。

InnoDB使用ROW_FORMAT=COMPRESSED创建的表可以在磁盘上使用比配置innodb_page_size值更小的页面大小。较小的页面使用较少的 I/O 来读取和写入磁盘,这对于 SSD设备尤其有价值。

压缩页面大小通过 CREATE TABLE或ALTER TABLE的KEY_BLOCK_SIZE参数指定。根据不同的页面大小,将表放置在独立表空间或通用表空间中,而不是放在系统表空间中,因为系统表空间不能存储压缩表。

无论KEY_BLOCK_SIZE值如何,压缩级别都是相同的。当您为KEY_BLOCK_SIZE指定较小的值时,您将获得小页面的 I/O 优势。但是,如果您指定的值太小,则当数据值无法压缩到足以容纳每页中的多行时,重新组织页面会产生额外的开销。根据每个索引的键列的长度,KEY_BLOCK_SIZE有一个硬性限制。指定的KEY_BLOCK_SIZE值太小, CREATE TABLE或ALTER TABLE语句会失败。

在缓冲池中,压缩数据保存在小页面中,页面大小基于KEY_BLOCK_SIZE 值。为了提取或更新列值,MySQL 还使用未压缩数据在缓冲池中创建一个未压缩页面。在缓冲池中,对未压缩页面的任何更新也会重新写回等效的压缩页面。您可能需要调整缓冲池的大小以容纳压缩和未压缩页面的附加数据。在需要空间时将未压缩页面从缓冲池中逐出,然后在下次访问时再次解压缩。

标签: #mysql压缩数据 #mysql压缩表空间