【YashanDB知识库】关于表空间压缩

本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7106886.html?templateId=1718516

实现方法

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

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

3、表空间压缩支持LZ4(默认),ZSTD两种压缩算法。

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

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

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

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

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

环境要求

不是所有的文件系统都支持文件打洞功能,目前支持的文件系统有:xfs,ext4, btrfs, tmpfs, gfs2。此外,YashanDB还要求文件系统的的页大小为512、1024、2048或4096。

使用方法

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

CREATE TABLESPACE tbs_data COMPRESS lz4;

如何查看压缩率

在视图v$datafile中字段disk_bytes表示datafile在文件系统中实际大小

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大小有可能提升压缩率

posted @   YashanDB  阅读(8)  评论(0编辑  收藏  举报
编辑推荐:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
点击右上角即可分享
微信分享提示