Aerospike ASD 3.15.1.4 上的奇怪原始设备性能

Aerospike ASD 3.15.1.4 上的奇怪原始设备性能

我有一个由 4 台服务器组成的集群。其中一个命名空间基于原始设备。设备位于 SAS 机械硬盘上。

现在故事的奇怪部分来了。我正在运行一个包含小记录的测试(2x50 字节 = 总共 100 字节)。我以 150 - 200k OPS 的速度写入。现在,在读取时 - 吞吐量下降到 4k OPS!!!是的,我知道 - 这可能很奇怪,我完全糊涂了。

读取期间服务器显示负载很小。iotop 和 nload 没有显示任何我认为有问题的内容。

这是设备配置:

namespace test-raw {
        replication-factor 4
        memory-size 16G
        default-ttl 7200
        max-ttl 2D
        high-water-disk-pct 80
        high-water-memory-pct 60
        stop-writes-pct 90
        partition-tree-locks 64
        partition-tree-sprigs 4096

        storage-engine device {
                device /dev/sdb1
                write-block-size 1M
                max-write-cache 8G
                data-in-memory false
                cold-start-empty true
        } 
}

任何见解都将不胜感激。

干杯,

鲍里斯。

答案1

您不应将 HDD 与 Aerospike 一起使用作为主存储设备,因为您将错过所有针对 SSD 的低级优化。HDD 并非为处理大量并发读取而设计的,而这是 SSD 的主要优势之一。Aerospike 中 HDD 唯一适合的地方是作为内存命名空间的持久层。 您的命名空间将其数据存储在设备上,该设备应该是合适的企业级(又称 DC 质量)SSD。

根据“配置配方”比较 SSD 性能以及以下内容常见问题 (FAQ)

我可以将数据存储在硬盘而不是 SSD 上吗?

否。Aerospike 数据库旨在成为高性能、低延迟的数据库。因此,旋转磁盘的物理限制会给数据带来不可接受的延迟。

现在进行一些快速修复:

答案2

...由于您的记录只有 100 字节,因此您可能每条记录使用 256 字节(包括开销和 128 字节边界)。如果写入块大小默认为 1 MB,则写入时您将在 RAM 中的 1 MB 中装入大约 4K 条记录,这些记录将以 1 MB 块的形式异步刷新到磁盘。在读取时,您将以 128 字节的读取块从磁盘读取单个记录。如果您正在读取最近更新的记录,则您可能正在从 RAM 中的写入后队列中获取它,否则您将访问磁盘。因此,您的读取延迟来自磁盘对必须从磁盘获取的记录的缓慢性能。如果写入块大小为 128K,那么每个块大约可以容纳 500 条记录。您可以在测试集群上使用写入块大小,看看性能是否有所提升。检查 /var/log/aerospike/aerospike.log 中的 write-q 值以查看磁盘是否很慢。如果磁盘不是瓶颈,则在写入吞吐量下 write-q 将为零。您有一个非常大的最大写入缓存 - 8G -(默认为 64M),这也有助于您进行写入。您还可以通过将 post-write-queue 减少到非常小的数字进行测试,看看读取吞吐量是否会变得更糟。

相关内容