2025-11-08 05:34:34
DB块分页存储数据,每页16KB。这个大小是硬件页大小和软件优化共同决定的,比如内存页大小通常16KB,和数据库页对齐能减少I/O次数。16KB装得下索引和记录,既不浪费空间又方便缓存。比如MySQL用16KB页,InnoDB引擎设计时考虑到多线程并发读写的效率,过小会导致频繁分页,过大则内存占用增加。
为什么必须16KB?因为早期磁盘页大小16KB,数据库页和磁盘页对齐能减少页碎裂。比如每页16KB刚好装下B+树节点,最多存4个键值对(每个键6字节+值12字节)。查MySQL文档看到,页大小有8KB、16KB、32KB可选,但16KB最常见。硬件厂商说16KB页能提升内存命中率,比如Intel处理器缓存行16字节,16KB页正好是缓存行的整数倍。而且16KB足够存一个大字段,比如图片ID+时间戳+10个字符的备注,不会经常跨页读取。如果用8KB页,每次读可能多读8KB,I/O次数翻倍。比如测试显示16KB页的QPS比8KB高30%,证明这个尺寸确实合理。所以数据库设计时选16KB,既平衡了存储和性能,又和硬件特性匹配。
本题链接: