安装
            
            
              bash
              
              
            
          
          sudo yum install epel-release -y
sudo yum install fio -y
        适合pg的磁盘测试
这个配置模拟的是:
- PostgreSQL 对数据库文件的随机 8KB 读取
 - 多并发(4 jobs)、深队列(iodepth 32)
 - 绕过操作系统缓存(--direct=1)
 
            
            
              bash
              
              
            
          
          fio --name=pg-test \
    --filename=/tmp/fio.test \
    --rw=randread \
    --bs=8k \
    --iodepth=32 \
    --numjobs=4 \
    --time_based \
    --runtime=60s \
    --ioengine=libaio \
    --direct=1
    
        参数解读
- 
-rw=read
顺序读,模拟全表扫描时从头到尾顺序读取数据文件。
 - 
-bs=1M
PostgreSQL 顺序扫描时一般会以 8KB 页为基本单位,但为了减少系统调用,底层往往会成批读取。这里用 1MB 可以更接近数据库批量读取的效果(你可以改成 128k 或 512k 来更精细模拟)。
 - 
-iodepth=1
顺序扫描基本是串行提交 I/O,请求深度低。
 - 
-numjobs=1
单进程读取,类似单个 SQL 进程扫描表。
 - 
-size=10G
模拟表数据大小,可以改成你实际数据库大表的大小。
 - 
-direct=1
绕过文件系统缓存,直接测试磁盘性能(PostgreSQL 实际运行会受 OS 缓存影响,这里更纯粹看存储性能)。
 - 
-time_based --runtime=60s
运行固定时间,而不是必须读完整个文件。
 
模拟扫全表
            
            
              bash
              
              
            
          
          fio --name=pg-seqscan \
    --filename=/tmp/fio.seqscan \
    --rw=read \
    --bs=1M \
    --iodepth=1 \
    --numjobs=1 \
    --time_based \
    --runtime=60s \
    --ioengine=libaio \
    --direct=1 \
    --size=10G
        参数解读
| 参数 | 含义 | 
|---|---|
| --name=randread | 测试任务名称,随便取名 | 
| --ioengine=libaio | 使用 Linux AIO 异步 IO 引擎(对真实负载较贴近) | 
| --rw=randread | 模拟 随机读取(不涉及写入) | 
| --bs=4k | 每个 IO 请求块大小为 4KB(典型数据库页大小) | 
| --numjobs=8 | 启动 8 个线程/并发任务 | 
| --iodepth=32 | 每个线程最多同时提交 32 个 IO 请求(最大并发深度) | 
| --runtime=30s | 总运行时间为 30 秒 | 
| --size=1G | 每个线程测试 1GB 的文件大小(并发共享) | 
| --filename=/tmp/fio.test | 测试使用 /tmp/fio.test 文件(你可以指定挂载盘) | 
| --direct=1 | 绕过文件系统缓存,直接访问磁盘,反映真实设备性能 |