关于表空间压缩

首页    知识库    典型案例    关于表空间压缩

实现方法

1YashanDB 的表空间压缩通过文件打(Hole Punching)实现。

2文件打简单地说,如果文件中有连续字0x00出现,只需要记0字节数据块开始出现位置和块长度,而不需要实际保存原数据块。

3表空间压缩支LZ4()ZSTD两种压缩算法。

4数据库首先BLOCK内容进行压缩,然后根据压缩结果做如下操作:

  压缩失败或压缩之后的大小大于等BLOCK大小,则不压缩,写入原始BLOCK

  压缩释放的空间不足一个文件系统的页大小,则不压缩,写入原始BLOCK

  压缩释放的空间大于等于一个文件系统的页大小,将释放的空间按照文件系统的页向下取整,写入压缩后BLOCK,并将释放的空间进行打洞

5DBWR写入时进行压缩;读取DATA BUFFER过程解压。

 

环境要求

不是所有的文件系统都支持文件打洞功能,目前支持的文件系统有xfsext4 btrfs tmpfs gfs2。此外YashanDB还要求文件系统的的页大小512102420484096

 

使用方法

创建表空间时指定压缩属性及压缩算法,示例如下:

CREATE TABLESPACE tbs_data COMPRESS lz4;

 

如何查看压缩率

在视v$datafile中字disk_bytesdatafile在文件系统中实际大小

SELECT id, name, bytes, disk_bytes, bytes/disk_bytes as compression_ratio FROM v$datafile;

 

压缩率与哪些因素有关

1首先是数据本身

2与数据BLOCK大小,及文件系统的页大小有关,如BLOCK大小8K,文件系统页4K,每BLOCK最多只能节省一个文件系统(4K),因此理论上压缩率不超50%,建库时选取更大BLOCK大小有可能提升压缩率

 

 

浏览量:0