Postgresql中的unlogged表是一种通过向create table命令添加unlogged关键字来防止特定表生成WAL(预写日志)信息的方法:
CREATE UNLOGGED TABLE testtable (id int);
将现有表更改为未标记表,然后再次切换回:
ALTER TABLE t1 SET UNLOGGED;
ALTER TABLE t1 SET LOGGED;
使用UNLOGGED表有以下好处:
-
wal日志量变少,省去重做日志文件,节省了一定的空间,同时减少备份wal的工作量。
-
vacuum影响减少,因为vacuum动作也会被wal日志写入
-
并行创建大型表性能得到提升。
使用UNLOGGED表的缺点:
-
故障恢复时会截断表。
-
使用UNLOGGED的表只能在主服务器上访问,而不能在副本上访问。
-
使用UNLOGGED的表不能用于逻辑复制或物理备份。
接下来验证测试Postgres中unlogged的表不会生成WAL,且更新速度更快。
首先,使用pgbench实用程序创建一个测试表,然后对其进行一些更新。我们不仅会看到更新需要多长时间,还会查看pg_wal目录内部,并查看创建了多少wal。对于这个测试,重要的是关闭auto vacuum,并且保证实例没有其他客户端连接。
# Ensure that a