数据库版本:PanWeiDB V2.0-S3.2.0_B01
一、测试目的
本次测试旨在验证PanWeiDB数据库中压缩表与普通表在COPY写入场景下的性能差异,分析压缩参数对写入性能的影响,为生产环境压缩表迁移提供数据支撑和参数优化建议。
二、测试环境
环境项 | 描述 |
数据库类型 | PanWeiDB(基于openGauss内核) |
数据库版本 | V2.0-S3.2.0_B01 |
测试数据量 | 100万行 |
测试方式 | COPY FROM(客户端\copy命令) |
三、测试方案
1. 测试表结构
(1)普通表 (test_normal)
CREATE TABLE test_normal (
id bigint,
content text,
amount numeric(18,2),
created_at timestamp
);
(2)压缩表 (test_compressed)
CREATE TABLE test_compressed (
id bigint,
content text,
amount numeric(18,2),
created_at timestamp
) WITH (compresstype=2, compress_chunk_size=512, compress_level=12);
2. 压缩参数说明
参数名 | 测试值 | 说明 |
compresstype | 2 | 压缩算法,2表示zstd算法 |
compress_chunk_size | 512 | 压缩块大小(KB),默认512 |
compress_level | 12 | 压缩级别,范围1-12,级别越高压缩比越高但CPU消耗越大 |
3. 测试步骤
1. 准备100万行测试数据文件(CSV格式)
2. 创建普通表和压缩表
3. 使用 \copy 命令分别导入数据到两张表
4. 记录导入耗时
5. 对比分析性能差异
6. 调整 compress_chunk_size 参数进行二次测试
四、测试结果
1. 初次测试(compress_chunk_size=512)
表类型 | 导入耗时 | 平均速度 | 相对性能 |
普通表 (test_normal) | 约3.2秒 | 约31万行/秒 | 100% |
压缩表 (test_compressed) | 约16.8秒 | 约6万行/秒 | 约19% |
结论:在 compress_chunk_size=512 的配置下,压缩表写入性能仅为普通表的约19%,性能下降约81%。
2. 参数调整测试(compress_chunk_size调整后)
compress_chunk_size | 普通表耗时 | 压缩表耗时 | 性能比 |
512 | 3.2秒 | 16.8秒 | 19% |
1024 | 3.1秒 | 8.5秒 | 36% |
2048 | 3.3秒 | 5.2秒 | 63% |
4096 | 3.2秒 | 4.1秒 | 78% |
结论:随着 compress_chunk_size 增大,压缩表写入性能明显提升。当设置为4096时,性能可达到普通表的78%。
3. 生产环境迁移场景测试
在生产环境迁移场景中,使用默认的 compress_chunk_size=512 配置,压缩表COPY写入速度仅为普通表的1/3至1/5,与测试结果一致。
五、问题分析
1. 性能下降根因分析
通过进一步排查和测试,确定压缩表写入性能下降的根本原因是:compress_chunk_size 设置过小(512KB),导致在高并发COPY场景下产生严重的锁竞争。
2. 锁竞争分析
当 compress_chunk_size=512 时,每条数据都需要更频繁地进行压缩块的操作,导致:
压缩块切换频率高,产生大量锁等待
小压缩块导致压缩效率下降
高并发场景下锁竞争加剧
3. 在线参数修改限制
经测试验证,压缩表相关参数的在线修改能力如下:
参数 | 是否支持在线修改 | 说明 |
compresstype | 支持 | 可通过ALTER TABLE直接修改 |
compress_level | 支持 | 可通过ALTER TABLE直接修改 |
compress_chunk_size | 不支持 | 需要重建表才能修改 |
注意:compress_chunk_size 参数不支持在线修改,如需调整需要重建表。因此在初始创建压缩表时,应根据业务场景合理设置此参数。
结论与建议
1. 测试结论
压缩表写入性能受 compress_chunk_size 参数影响显著
默认的512KB压缩块大小在高并发写入场景下性能下降明显(仅为普通表19%)
将 compress_chunk_size 调整至4096KB,性能可恢复至普通表的78%
压缩表在牺牲约22%写入性能的情况下,可获得显著的存储空间节省(具体压缩比取决于数据特征)
2. 参数设置建议
写入密集型业务:建议设置 compress_chunk_size=4096
读取密集型业务:可适当降低 compress_chunk_size 以提高压缩比
建议在测试环境充分验证后,再在生产环境部署
创建压缩表前应评估业务特点,合理设置压缩参数
3. 生产环境迁移建议
迁移前在测试环境进行充分的性能测试
根据业务特点调整压缩参数,避免直接使用默认值
监控迁移过程中的性能指标,及时发现性能瓶颈
对于特别重要的业务表,可考虑分阶段迁移,先迁移部分数据验证




