fio numjobs 和 iodepth 值来模拟数据库 PostgreSQL 工作负载?

fio numjobs 和 iodepth 值来模拟数据库 PostgreSQL 工作负载?

fio我正在尝试使用能够代表数据库工作负载(例如 PostgreSQL)的设置对ZFS RAID-10 SATA SSD 阵列进行基准测试。

例如,对于随机读取:

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

但是,我不确定应该设置的值iodepthnumjobs以及它们在数据库工作负载方面可以代表什么。

可以numjobs理解为来自客户端的并发数据库连接数吗?可以iodepth理解为每个数据库连接中并发/待处理/排队的数据库查询数吗?

您建议iodepth和的值的范围是多少?numjobs

答案1

如上所述,ZFS 的工作存在一个大问题:Linux 上的 ZFS 并不总是O_DIRECT异步实现目前,因为它目前O_DIRECT通过(最小)缓冲 I/O 实现。这意味着libaio在到达之前实际上可能会阻塞iodepth...

numjobs 可以解释为来自客户端的并发数据库连接数吗?

不是真的……一个客户端可能会根据他们请求的查询触发多个 I/O。我们也不知道您的数据库后端做什么。

并且 iodepth 可以解释为每个数据库连接中的并发/待处理/排队数据库查询的数量吗?

再次说明,事实并非如此,因为映射将取决于数据库的后端代码选择。某些数据库可以配置为使用线程、进程、AIO 或甚至所有这些的混合......

您推荐的 iodepth 和 numjobs 的值范围是多少?

对此没有好的答案 - 您可能必须对数据库进行分析(在系统 I/O 级别)并创建匹配的内容(除非您可以安排数据库供应商来帮助您)。

相关内容