TiDB 现在表级别压缩是否支持?

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
想咨询一下TiDB是否有表级别压缩?在SQL语法中有 compression选项。


在github.com 上发现:
|Hi @shenlijungg ,
Compression is not supported now. If the create table statement contains compression options, TiDB will ignore them.|
https://github.com/pingcap/tidb/issues/8847

请问在几版本以后支持compression选项。

目前看忽略是符合预期的。

TiDB 支持以下 table_option 。TiDB 会解析并忽略其他 table_option 参数,例如 AVG_ROW_LENGTHCHECKSUMCOMPRESSIONCONNECTIONDELAY_KEY_WRITEENGINEKEY_BLOCK_SIZEMAX_ROWSMIN_ROWSROW_FORMATSTATS_PERSISTENT

https://docs.pingcap.com/zh/tidb/stable/sql-statement-create-table#语法图

2 个赞

应该是不支持的,官网文档上没有压缩语法介绍,也没有用例

TiDB底层存储引擎是TiKV,它是一个支持事务的存储引擎,它本身就有压缩

载自网络:
TiDB是一个分布式关系数据库系统,它采用了列存储的方式来存储数据,并提供了数据压缩功能。使用TiDB进行数据压缩时,需要在创建表时指定COLUMN_FORMAT参数为COMPRESSED。
下面是一个使用TiDB进行数据压缩的示例代码:

CREATE TABLE mytable (
id int,
name varchar(50)
) COLUMN_FORMAT=COMPRESSED;

在TiDB中,数据使用Snappy压缩算法进行压缩,可以有效减少存储空间的占用。与MySQL不同,TiDB在查询时会自动进行解压缩,查询结果返回前会再次进行压缩,以减少数据传输的开销。
MySQL通过使用字典编码算法进行压缩,而TiDB使用Snappy算法进行压缩。在读写性能方面,MySQL可以通过优化参数配置和索引设计来提高性能,而TiDB则可以通过增加节点数来提高性能。开发人员可以根据具体需求选择适合的数据库系统和优化方法。

tidb的所有表数据都是压缩的,你看到的sst文件就是压缩后的

这个语法现在不支持

不是一个意思,他说的是建表语句中的选项。 :yum:

这个语法是有问题的,我测试了一下直接报错。TiDB文档中没查到COLUMN_FORMAT的具体用法,也没看到COMPRESSED参数。

我查了一下MySQL的官方文档,MySQL中COLUMN_FORMAT对应的是
COLUMN_FORMAT 可用参数 FIXED, DYNAMIC, and DEFAULT` ,也没有COMPRESSED这个参数。

In NDB Cluster, it is also possible to specify a data storage format for individual columns of NDB tables using COLUMN_FORMAT. Permissible column formats are FIXED, DYNAMIC, and DEFAULT. FIXED is used to specify fixed-width storage, DYNAMIC permits the column to be variable-width, and DEFAULT causes the column to use fixed-width or variable-width storage as determined by the column’s data type (possibly overridden by a ROW_FORMAT specifier).

你这个应该是AI生成的答案,但是是有问题的。

Tidb的压缩是通过tikv 的rocksdb实现的,默认是自动实现的,可以在tikv指定压缩算法

参考
TiKV 内存参数性能调优 | PingCAP 文档中心

[rocksdb.defaultcf]
数据块大小。RocksDB 是按照 block 为单元对数据进行压缩的,同时 block 也是缓存在 block-cache
中的最小单元(类似其他数据库的 page 概念)。
block-size = “64KB”

RocksDB 每一层数据的压缩方式,可选的值为:no,snappy,zlib,bzip2,lz4,lz4hc,zstd。注意 Snappy 压缩文件必须遵循官方 Snappy 格式。不支持其他非官方压缩格式。
no:no:lz4:lz4:lz4:zstd:zstd 表示 level0 和 level1 不压缩,level2 到 level4 采用 lz4 压缩算法,
level5 和 level6 采用 zstd 压缩算法,。
no 表示没有压缩,lz4 是速度和压缩比较为中庸的压缩算法,zlib 的压缩比很高,对存储空间比较友
好,但是压缩速度比较慢,压缩的时候需要占用较多的 CPU 资源。不同的机器需要根据 CPU 以及 I/O 资
源情况来配置怎样的压缩方式。例如:如果采用的压缩方式为"no:no:lz4:lz4:lz4:zstd:zstd",在大量
写入数据的情况下(导数据),发现系统的 I/O 压力很大(使用 iostat 发现 %util 持续 100% 或者使
用 top 命令发现 iowait 特别多),而 CPU 的资源还比较充裕,这个时候可以考虑将 level0 和
level1 开启压缩,用 CPU 资源换取 I/O 资源。如果采用的压缩方式
为"no:no:lz4:lz4:lz4:zstd:zstd",在大量写入数据的情况下,发现系统的 I/O 压力不大,但是 CPU
资源已经吃光了,top -H 发现有大量的 bg 开头的线程(RocksDB 的 compaction 线程)在运行,这
个时候可以考虑用 I/O 资源换取 CPU 资源,将压缩方式改成"no:no:no:lz4:lz4:zstd:zstd"。总之,目
的是为了最大限度地利用系统的现有资源,使 TiKV 的性能在现有的资源情况下充分发挥。
compression-per-level = [“no”, “no”, “lz4”, “lz4”, “lz4”, “zstd”, “zstd”]

1 个赞

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。