2018-03-30|insert流程-让数据快速刷入存储文件

2018-03-30  本文已影响0人  walleipt

预备知识:

之前提到输入insert语句后数据是不会直接刷入存储文件的(等待大概10-15分钟);

对于这种现象是由于在执行insert的语句的时候,postgres会先将数据写入到日志(1),然后把事务标记为完成(2)。最后将数据被写到表中(3);

这种设计是由于postgres稳定行决定的。不至于一些脏数据导致postgres奔溃,例如:直接对数据文件进行读写的话,如果此时因为某些原因数据只有部分入库,postgres如何对这部分数据进行处理。所以引入了日志(xlog)即使数据库奔溃,也可以通过xlog对数据进行对比修正或是复原。当然如果先写日志和缓存将他们和直接文件存储IO操作分离,也可以提高运行效率;

回到主题,那我们如何快速将数据刷入存储文件?现在已经知道执行insert语句xlog是实时改变的;那么如何清理xlog,清理掉的xlog是否可以认为已经完成xlog到存储文件对比同步呢?这里就使用到了CHECKPOINT(检查点)让xlog生成新的文件,让老的xlog“失效”(也就是可以被清理掉);以这种方式来观察最后是否执行checkpoint命令,数据就被刷入存储中

开始测试:

1.查看文件修改时间

查看存储文件修改时间

2.执行insert语句和checkpoint;

insert & checkpoint
生成新xlog日志

3.查看存储文件修改时间:

查看存储文件修改时间

后续问题:

1.未执行checkpoint的情况数据刷入存储的过程如何?等待10到15分钟postgres做了什么?

参考资料:

PostgreSQL Replication之第二章 理解PostgreSQL的事务日志

【PostgreSQL-9.6.3】进程及体系结构

注意:如上是本人学习Postgres查看资料和测试的结果,如有问题请大神指正!

上一篇下一篇

猜你喜欢

热点阅读