Postgresql 大事务(多次插入)超过RAM大小:会发生什么?

Postgresql 大事务(多次插入)超过RAM大小:会发生什么?,postgresql,Postgresql,我在单个事务中执行多个超过RAM大小的插入: 我了解到插入(删除)是用RAM写的,修改过的页面变成了脏页面 但如果脏页超过RAM大小会发生什么情况:检查点在事务结束前将脏页写入磁盘?别担心 当读取或写入数据时,PostgreSQL会在RAM中缓存8kB的磁盘存储页,但缓存(共享缓冲区)中的修改(“脏”)页会由数据库系统自动写入磁盘 通常,这在检查点期间发生,但是还有一个特殊的后台进程,后台写入程序,它不断从缓存中写入脏页,以便缓存中始终有一些干净的页供客户端使用 在不太可能的情况下,尽管仍然没有

我在单个事务中执行多个超过RAM大小的插入:

我了解到插入(删除)是用RAM写的,修改过的页面变成了脏页面

但如果脏页超过RAM大小会发生什么情况:检查点在事务结束前将脏页写入磁盘?

别担心

当读取或写入数据时,PostgreSQL会在RAM中缓存8kB的磁盘存储页,但缓存(共享缓冲区)中的修改(“脏”)页会由数据库系统自动写入磁盘

通常,这在检查点期间发生,但是还有一个特殊的后台进程,后台写入程序,它不断从缓存中写入脏页,以便缓存中始终有一些干净的页供客户端使用

在不太可能的情况下,尽管仍然没有找到干净的页面,但需要一些缓存空间的后端进程可以清除脏页面本身。因此,不管怎样,最终都会得到一些缓存空间

你的交易量大与否也无关紧要。PostgreSQL在将数据写入磁盘之前不会等待事务提交,它会很高兴地保留活动事务中未提交的数据修改。如果事务失败,这些数据将被呈现为不可见(“死”)

由于PostgreSQL体系结构,您的事务永远不会因为更改太多数据而失败。

别担心

当读取或写入数据时,PostgreSQL会在RAM中缓存8kB的磁盘存储页,但缓存(共享缓冲区)中的修改(“脏”)页会由数据库系统自动写入磁盘

通常,这在检查点期间发生,但是还有一个特殊的后台进程,后台写入程序,它不断从缓存中写入脏页,以便缓存中始终有一些干净的页供客户端使用

在不太可能的情况下,尽管仍然没有找到干净的页面,但需要一些缓存空间的后端进程可以清除脏页面本身。因此,不管怎样,最终都会得到一些缓存空间

你的交易量大与否也无关紧要。PostgreSQL在将数据写入磁盘之前不会等待事务提交,它会很高兴地保留活动事务中未提交的数据修改。如果事务失败,这些数据将被呈现为不可见(“死”)


由于PostgreSQL体系结构,您的事务永远不会因为更改了太多数据而失败。

谢谢,所以在进行大型事务期间,脏页会写入磁盘!沃尔斯呢?在大事务进行期间,它们会写入磁盘:看到了吗?是的,WAL也会定期写入磁盘,即使没有事务提交。谢谢,所以在大事务进行期间,脏页会写入磁盘!沃尔斯呢?在进行大型事务期间,它们会写入磁盘:请看,是的,WAL也会定期写入磁盘,即使没有提交任何事务。