关于 YMatrix
部署数据库
使用数据库
管理集群
最佳实践
高级功能
高级查询
联邦查询
Grafana 监控
备份恢复
灾难恢复
图数据库
管理手册
性能调优
故障诊断
工具指南
系统配置参数
SQL 参考
为了适应不同场景的需求,在 YMatrix 中支持三种写入模式,由表级参数 prefer_load_mode 和 rowstore_size 共同决定,默认为 Normal 模式:

在 Single 模式下,数据会在本地内存中最多积攒 1MB,然后直接插入到 rowstore 中,整个写入过程和传统的 PostgreSQL Heap 写入类似,数据直接放置在 Shared Buffers 中,其大小由同名参数 shared_buffers 控制,在 Single 模式下,可以酌情调大此参数,否则也会发生内存置换。

优点:
vacuum + vacuum full;在 Bulk 模式下,数据会先拷贝到本地内存,最多达到 rowstore_size 大小,当达到 rowstore_size 大小时,会被直接转换成 columnstore 刷新到磁盘,当插入结束,本地内存未达到 rowstoresize 大小时,仍然会转换成 columnstore 刷新到磁盘中。
优点:
智能插入模式,数据会被拷贝到本地内存,当达到 rowstore_size 大小时,会被直接转换成 columnstore 刷新到磁盘,当插入结束,本地内存未达到 (rowstore_size / 2) 大小时,则会写入到当前的 rowstore 中,否则会转换成 columnstore 刷新到磁盘中,默认为 normal 模式。
pgbench -n -f single_insert.sql -c 1 -j 1 -t 100000 test | 测试类型 | 每客户端事务数 | 客户端数 | 线程数 | 平均延迟 (ms) | TPS (包括连接) | TPS (不包括连接) |
|---|---|---|---|---|---|---|
| single_insert.sql | 100,000 | 1 | 1 | 1.98 | 505.03 | 505.06 |
| bulk_insert.sql | 100,000 | 1 | 1 | 15.282 | 65.44 | 65.44 |
| normal_insert.sql | 100,000 | 1 | 1 | 1.968 | 508.02 | 508.05 |
time for i in {1..2000}; do psql test -f batch_insert.sql; done | 模式 | 总耗时 | 总秒数 (s) | 每秒行数 (rows/s) |
|---|---|---|---|
| single | 2m27s | 147 | ≈ 680 |
| normal | 2m28s | 148 | ≈ 676 |
| bulk | 4m55s | 295 | ≈ 339 |
| 模式 | 行数 | 用时 (秒) |
|---|---|---|
| bulk | 50,000,000 | 69.287 |
| single | 50,000,000 | 50.868 |
| normal | 50,000,000 | 70.612 |
| 表名 | 压缩比 | 存储节省 |
|---|---|---|
| fi_voucher | 7:01 | 86% |
| fi_voucher_b | 15:01 | 93% |
| aai_voucher | 4.5:1 | 78% |
| aai_voucher_record | 8.9:1 | 89% |
某实测场景中,插入相同大小的数据,可以看到产生 WAL 的速率相同,但是总体生成的 WAL 大约是 Heap 的 1/3,可以大幅减少 WAL 占用的存储空间。

返回上一章节:存储引擎原理