2026-10-26·作者 Sijie Wang#fundamentals#storage#io#iops

io-block-size-and-iops

块大小与 IOPS:一切结构之下的磁盘价目表

传送单位。 磁盘从不一字节一字节搬数据:一次 IO 操作的单位是一个块。测速工具(fio、dd)里这个参数就叫 bs,最标志性的值正是 4KB——"4K 随机读写"测的就是拿 4KB 的块一下一下砸盘。同一个 4KB 到处都是:现代磁盘扇区是 4KB(Advanced Format),文件系统块默认 4KB,硬件/操作系统的内存页也是 4KB——部件之间沿总线搬运内存时,搬的就是这个块。

一条等式。

Bandwidth=IOPS×block size\text{Bandwidth} = \text{IOPS} \times \text{block size}

同一块盘:块小(4K),瓶颈是每秒次数(IOPS),带宽吃不满;块大(128K、1MB),少量操作就能把带宽拉满。调优的语法就这一条:ETL 这类顺序大流量靠调大块与缓冲吃带宽;点查类负载无论怎么想,都活在随机 IOPS 的天花板之下。

接口一——数据库的页,就是数据库自己定的块大小。 PG 选了 8KB,InnoDB 选了 16KB。太小,一次逻辑读要做好多次物理 IO;太大,改一个字节要搬整页(读/写放大),还浪费缓冲缓存。一切页大小之争,都是块大小之争。

接口二——b-tree 查找按随机 IOPS 计价。 查一次 = 读 3–4 页;每次缓存未命中就是一次随机物理 IO。机械盘随机 IOPS 约一两百——点查的预算是毫秒级;SSD 几万起步——微秒级。"换 SSD 数据库快十倍"快的是这个数。buffer pool 的全部存在意义,就是把物理 IO 变成内存命中,躲开这堵墙。

接口三——wal 与 LSM 是同一场套利。 顺序大块 IO 按带宽计价(便宜量足),随机小 IO 按 IOPS 计价(稀缺)。WAL 把提交写从随机刷页改造成顺序追加;LSM 把随机的结构写改造成顺序的成文件写。存储引擎设计归根到底是在这两种价格之间套利——硬件层用块大小和 IOPS 定价,它上面的每个结构(mvcc 的版本、B 树、日志)都是对着这张价目表做的最优解。

cited by
关于这一条

sijie 的一条 wiki 条目。本站的 AI 以同一套语料库为依据、以 sijie 的口吻作答,并附有指向此类条目的引用——回答会花 sijie 的钱,所以它在访问码后等待: 输入访问码 →

io-block-size-and-iops — Sijie Wang