我有一个由4个服务器组成的集群。其中一个名称空间是基于原始设备的。这些设备位于SAS机械硬盘上。
下面是故事中奇怪的部分。我正在使用小记录运行其中一个测试(2x50字节=100个字节总计)。我可以在15万到200000的老年退休金之间写信。现在,当谈到阅读-吞吐量下降到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
}
}任何洞察力都将不胜感激。
干杯,
鲍里斯。
发布于 2018-01-31 18:02:10
您不应该使用HDD作为您的主要存储设备和Aerospike,因为您将错过所有针对SSD的低级别优化。HDD不是用来处理大量并发读取的,因为这是SSD的主要优点之一。HDD在Aerospike中唯一合适的地方是作为内存中命名空间的持久性层。您的命名空间将其数据存储在设备上,该设备应该是一个像样的企业级(AKA质量) SSD。
请参见基于“配置配方”的SSD性能比较和常见问题(常见问题)中的以下内容:
我可以将数据存储在硬盘上而不是SSD上吗?不是的。Aerospike数据库是一个高性能、低延迟的数据库.因此,旋转磁盘的物理限制给数据增加了不可接受的延迟量。
下面是一些快速解决方案:
storage-engine device块中,确保显式地将scheduler-mode设置为noop。请参阅常见问题-磁盘调度程序的目的是什么?post-write-queue,将其设置为2048年。见当客户端将记录写入/数据库中的持久化存储时,会发生什么情况?。您可以动态地调整这一点:asadm -e "asinfo -v 'set-config:context=namespace;id=test-raw;post-write-queue=2048' "发布于 2018-02-02 05:22:20
...since您的记录只有100个字节,每个记录可能使用256个字节(具有开销&128个字节边界)。如果写入块大小为1MB,默认为1MB,则在写入时,要在1MB内存中安装大约4K记录,这是作为1MB块异步刷新到磁盘的。在读取时,您将从磁盘读取128字节读取块的单个记录。如果您正在读取最近更新的记录,则可能是从RAM中的post写入队列中获得的,否则您将访问磁盘。因此,您的读取延迟来自磁盘的缓慢性能,因为必须从磁盘中获取记录。如果写块的大小是128 K,那么每个块应该有大约500条记录。您可以在测试集群上使用写块大小,并查看性能是否跟踪。检查/var/log/aerospike/ospike.log中的写-q值,以查看磁盘是否慢。如果磁盘不是瓶颈,那么在写吞吐量下写-q将为零。您有一个非常大的最大写缓存- 8G -(64米是默认的),这也有助于您编写。您还可以通过将后写队列减少到非常小的数量进行测试,并查看读取吞吐量是否会变得更糟。
https://serverfault.com/questions/895083
复制相似问题