我们在 PostgreSQL 配置方面遇到了一些问题。经过一些基准测试后,我发现非常简单的查询需要相对较长的时间,经过进一步检查,实际的 COMMIT 命令似乎非常慢。
我使用下表进行了一个非常简单的测试:
CREATE TABLE test (
id serial primary key,
foo varchar(16),
);
Run Code Online (Sandbox Code Playgroud)
在打开所有语句的登录后,我运行了以下查询 10000 次:
BEGIN;
INSERT INTO test (a) VALUES ('bar');
COMMIT;
Run Code Online (Sandbox Code Playgroud)
BEGIN 和 INSERT 需要 < 1ms 才能完成,但 COMMIT 平均需要 22ms 才能完成。
在我自己的 PC 上运行相同的基准测试,它慢得多,对 BEGIN 和 INSERT 语句产生相同的平均值,但平均 COMMIT 大约为 0.4 毫秒(快 20 倍以上)。
经过一番阅读后,我尝试使用该pg_test_fsync
工具来确定问题所在。在服务器上,我得到以下结果:
$ ./pg_test_fsync -o 1024
1024 operations per test
O_DIRECT supported on this platform for open_datasync and open_sync.
Compare file sync methods using one 8kB write: …
Run Code Online (Sandbox Code Playgroud) 我目前正计划在我的家庭服务器上安装 FreeBSD 9。这台机器有 4 个 1.5TB 磁盘,在某个时候,当 HDD 价格下降时,我会升级到更大的,也许是 3TB。
磁盘在 IT 模式下连接到 IBM ServerRaid m1015,该卡最多可容纳 8 个磁盘。现在问题来了,目前 4x 1.5TB 将连接到 m1015。然后当价格下降时,我会添加类似 4x 3TB 的东西,也连接到 m1015。没问题,我可以只运行 2 个 raidz2 vdev 并将它们放在同一个池中。
但是,在某些时候 1.5TB 将开始损坏,或者当池空间不足时我将不得不升级它们。所以我开始研究是否可以扩展一个 raidz vdev,我发现了几个页面解释了相同的过程,就像 SF 上的这样:如何在 OpenSolaris 上将 ZFS RAID-Z 阵列升级到更大的磁盘?.
所以我在 vmware 中尝试了一下,我安装了 FreeBSD 9 并创建了 6 个虚拟磁盘,每个 1GB 的 3 个和每个 10GB 的 3 个。在构建了 1GB 的 raidz vdev 之后,我用 10GB 一个一个地替换了它们,但是池的大小没有增加。
这是 FreeBSD 中 ZFS 实现的限制吗?还是我只是做错了什么?