仅更新数据库变更字段是否有助于延缓SSD损耗?
仅更新变更字段vs全字段更新对SSD写入的影响
写入字节数的差异
这个差异要结合数据库的存储引擎类型来看:
行存储引擎(如MySQL InnoDB、SQL Server 默认引擎)
行存储的数据是以「页」为单位存储的(比如InnoDB默认页大小16KB),整行数据都在同一个页里。不管你更新3个字段还是20个字段,只要这行数据所在的页需要修改,数据库都会先把整个页读入内存,修改对应字段后,再把整个页重新写入SSD。这时候两种更新语句在数据页的写入字节数/扇区数上完全一致。
但两者的差异体现在事务日志(如InnoDB的redo log、binlog):仅更新变更字段时,日志只记录这3个字段的新旧值;而全字段更新会记录20个字段的新旧值,日志的写入量会明显增加,这部分会直接反映在SSD的总写入字节数上。列存储引擎(如Vertica、ClickHouse)
列存储是按列独立存储数据块的,仅更新3个字段时,只需要重写这3列对应的存储块;全字段更新则要重写20列的存储块。这种场景下,两种更新语句的写入字节数差异非常显著,仅更新变更字段能大幅减少SSD的写入量。
是否有收益?
收益的大小取决于你的场景:
行存储场景
- 直接的SSD寿命收益来自日志写入量的减少:高频更新场景下,累积的日志写入差异会降低SSD的TBW(总写入字节数)消耗,间接延长寿命;如果是低频更新,这个收益几乎可以忽略。
- 额外的附带收益:仅更新变更字段能减少数据库的内存拷贝、日志生成的CPU开销,降低整体系统负载,间接减少不必要的磁盘IO操作。
列存储场景
- 收益非常明显:不管更新频率高低,仅更新变更字段都能大幅减少SSD的写入量,直接降低TBW消耗,对延长SSD寿命有显著帮助。
另外要注意:如果你的表存在大量索引,全字段更新可能会触发更多索引的更新(即使字段没变化,有些数据库可能会重新计算索引值),这也会额外增加SSD的写入量,而仅更新变更字段能避免这种不必要的索引更新。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

