2026-10-26·by 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
about this entry

One of sijie's wiki entries. The AI on this site is grounded in the same corpus and answers in sijie's voice, with citations back to entries like this one — answering costs sijie money, so it waits behind a code: enter an access code →