数据库缓存:究竟发生了什么?

时间:2013-12-17 15:24:15

标签: sql database caching

当更改“尚未提交”到数据库时,该信息到底存储在哪里?它在一些临时表中吗?写入文件?还是直接在RAM?

2 个答案:

答案 0 :(得分:1)

这是依赖于RDBMS的。作为一个例子,我将讨论SQL Server:未提交的写入直接在实时数据上进行。这些更改也可能最终在磁盘上刷新。同时,事务日志项记录了这些更改,以便可以回滚或前滚。

未提交的更改完全不依赖于内存“缓存”或写入缓冲区。它们可以随时写入,但以后仍然可以撤消。

答案 1 :(得分:1)

通常,DBMS会将请求的更改放在内存中的某种“队列”中,但也会将这些更改写入后台的永久存储(磁盘)。同时,如果需要ROLLBACK,它会跟踪已发生的变化。

使用内存中队列可以最大限度地减少每个SQL命令的阻塞,但是在将更改写入永久存储之前不会等待太长时间会最小化对COMMIT 1 的阻塞。

这就是为什么一个较大的事务往往比一些较小的事务更快的原因 - 它让DBMS在被迫在COMMIT上阻止客户端之前有更多的机会在后台做事。


1 “ACID事务”中的“D”代表"durable",这实质上意味着当事务COMMIT时,其效果保证已经存在于永久存储中(而不仅仅是在电源故障或其他问题时可能丢失的易失性存储器中。