我正在尝试使用fio对ZFS 10阵列SATA进行基准测试,这些设置在某种程度上代表了类似于PostgreSQL的数据库工作负载。
例如,对于随机读取:
fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=randread.fio --bs=4k --iodepth=4 --numjobs=16 --size=10G --readwrite=randread但是,我不确定应该将iodepth和numjobs设置为哪些值,以及它们可以用数据库工作负载来表示什么。
可以将numjobs解释为来自客户端的并发数据库连接的数量吗?是否可以将iodepth解释为每个数据库连接中并发/挂起/排队的数据库查询的数量?
您推荐iodepth和numjobs的值范围是什么?
发布于 2020-04-03 15:09:21
像上面用ZFS描述的那样,这个作业有一个大问题:Linux上的ZFS并不总是实现O_DIRECT异步,因为它目前通过(最小)缓冲I/O实现O_DIRECT,这意味着libaio在到达iodepth之前可能会变成阻塞。
Num作业是否可以解释为来自客户端的并发数据库连接的数量?
不太..。一个客户端可能会触发多个I/O,这取决于他们所要求的查询。我们也不知道你的数据库后端是做什么的。
是否可以将in深度解释为每个数据库连接中并发/挂起/排队的数据库查询的数量?
同样,这并不是因为映射将取决于数据库的后端代码选择。有些数据库可以配置为使用线程、进程、AIO,甚至是所有这些.
你推荐的碘深度值和数字值范围是多少?
对此没有很好的答案--您可能需要分析您的数据库(在系统I/O级别)并创建一些匹配的东西(除非您可以安排数据库供应商帮助您)。
https://serverfault.com/questions/1008446
复制相似问题