持久性是一种数据库特性,保证即使服务器崩溃或断电,已提交的事务也会被记录下来。但持久性会带来显著的数据库开销,因此如果你的应用场景不需要这种保证,可以将PostgreSQL配置为以快得多的速度运行。以下配置更改可以在这些情况下提高性能。除下文特别注明的情况外,数据库软件崩溃时仍然保证持久性;使用这些设置时,只有操作系统突然停止运行才会造成数据丢失或损坏的风险。
将数据库集簇的数据目录放在一个内存支持的文件系统上(即RAM磁盘)。这消除了所有的数据库磁盘 I/O,但将数据存储限制到可用的内存量(可能有交换区)。
关闭fsync;不需要将数据刷入磁盘。
关闭synchronous_commit;这样可能无需在每次提交时 强制将WAL写入磁盘。这种设置会在数据库崩溃时带来事务丢失的风险(但不会造成数据损坏)。
关闭full_page_writes;不需要警惕部分页面写入。
增加max_wal_size和checkpoint_timeout; 这会降低检查点频率,但会增加/pg_wal的存储需求。
创建不记录 WAL 的表 来避免WAL写入,不过这样会使表在崩溃时不再安全。