我们知道SQL是在内存缓存区中对日志和数进行操作,然后再写入物理介质上。内存中的日志缓冲区与数据缓冲区是独立管理的。那么日志和数据到底是谁先写入物理介质?还是写入顺序无关紧要呢?
一、什么是WAL
sql server2000与对没有提交的事务,在把数据写入物理介质之前,必须先把日志写和物理介质。这就是WAL(Write ahead Log),先写日志的原则。
二、为什么必须WAL
让我们假设一下先写入数据这种情况。如先把数据缓冲区的数据写入物理介质,数据已发生变化。但因为一些原因日志缓冲区的数据丢失了,则会造成数据的不一致。而日志缓冲的数据已补破坏,数据到底发生了那些变化也无从考究,这样的数据根本无从恢复。如果执行WAL原则,先把日志缓冲区中的数据写入物理介质,即使用日志缓冲区中的数据发生丢失或破坏,可以通过日志查出数据发生那些变化,从而可以执行REDO操作,从而保证数据的一致性。