You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

COMMIT后执行SELECT是否会从WAL文件及表文件读取数据?

关于数据库延迟写表与读数据的问题解答

延迟写入表文件的时长

不同数据库的延迟策略差异很大,没有固定时长,核心由配置规则和运行状态触发:

  • 以PostgreSQL为例:默认通过checkpoint_timeout设置检查点间隔(默认5分钟),当WAL文件累计达到max_wal_size阈值时,也会触发检查点,把内存中的脏页刷写到表文件。
  • 以MySQL InnoDB为例:脏页刷写由多条件触发,包括redo日志空间不足、内存中脏页占比达到innodb_max_dirty_pages_pct阈值、后台定时任务,或者主动执行FLUSH TABLES等命令。

SELECT语句是否会同时读取WAL和表文件

是的,这种情况很常见。当事务COMMIT后,数据仅写入WAL但还未刷到表文件时,执行SELECT * from myTable;这类查询:

  • 数据库会先检查表文件中的数据版本,如果发现不是最新的,就会从WAL中读取对应的重做记录,将表文件中的旧数据“更新”到最新状态后返回给用户。
  • 这是数据库MVCC(多版本并发控制)或一致性读机制的一部分,保证用户能读取到已提交的最新数据,同时不影响延迟写表的IO优化。

内容的提问来源于stack exchange,提问作者Adrian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:55:13