sky*_*yde 1 postgresql sqlite performance postgresql-performance
如果我想从 postgresql 中获得最佳性能,那么下面的 sqlite pragma 相当于什么。
pragma synchronous = OFF;
pragma journal_mode = OFF;
pragma count_changes = OFF;
pragma temp_store = MEMORY;
Run Code Online (Sandbox Code Playgroud)
这些 pragma 为 SQLite 所做的大部分工作可以通过使用UNLOGGED 表或TEMPORARY 表来最好地完成。
这也很明显,这些是临时表,不是崩溃或重启安全的。它还强调了在极快的速度与数据持久性之间存在非常真实的权衡。
从SQLite的PRAGMA 文档开始,我试图将它们转换为等效的 PostgreSQL GUC 变量。
pragma synchronous = OFF;
大致相当于将synchronous_commit设置为关闭。如果您使用的是 TEMPORARY 或 UNLOGGED 表,则此设置将没有实际影响,因为无论如何这些类型的表实际上并未写入 WAL。
pragma journal_mode = OFF;
关闭 WAL,在 PostgreSQL 中,您只能对 UNLOGGED 或 TEMPORARY 表执行此操作。
pragma temp_store = MEMORY;
PostgreSQL 中的临时表可以写入磁盘,但是设置temp_buffers应该可以让您在内存中保留更多的表以获得更好的性能。
pragma count_changes = OFF;
在 SQLite 中不推荐使用,在 PostgreSQL 中没有意义。
Robert Haas 有一篇关于Temporary and Unlogged Tables的精彩博文。
无论您做什么,请确保不要将任何表空间放在 RAM 中。以下两篇博文详细说明了这些危险。