Q1.PostgreSQL里recovery模式和standby模式有什么区别?
问题描述
PostgreSQL里经常能看到recovery模式和standby模式,这两种模式有什么区别呢?
问题解答
recovery模式是一种恢复应用WAL的过程状态,standby模式是主从架构下的一种只读模式,可以提供查询。
Q2.PostgreSQL里是否可以单独做归档备份?
问题描述
PostgreSQL备份数据除了使用pg_basebackup进行基础备份以外,是否可以只备份归档文件,从而节省磁盘空间呢?
问题解答
可以使用pg_receivewal的工具在线备份wal起到虚拟备库的功能,它比使用归档命令备份WAL更加安全,也不需要等待WAL文件写满。该工具基于流复制协议流式传输WAL,当服务器重启时不会发生数据丢失或数据损坏,并且搭配-Z/–compress压缩选项更适合。
Q3.使用pg_cron定时任务插件时,为什么任务延迟了8个小时呢?
问题描述
我的定时任务使用了pg_cron插件,发现任务都延时了8个小时,为什么呢?
问题解答
pg_cron插件采用GMT时间,数据库的时区不一致因此体现出延迟。
Q4.参数allow_in_place_tablespaces有什么作用?
问题描述
PostgreSQL 15包括14.5, 13.8, 12.12, 11.17, 10.22新增了allow_in_place_tablespaces参数,它有什么作用,使用场景是什么呢?
问题解答
该参数可以开启表空间的"in place"功能,数据直接存储在pg_tblspc目录里面,在一些开发测试场景能比较方便的处理自定义表空间的问题,尤其是在同一台机器上。
例如当我们使用pg_basebackup做备份时,可能会遇到如下错误
$ pg_basebackup --pgdata=datarec
pg_basebackup: error: directory "/home/postgres/test_spc1" exists but is not empty
pg_basebackup: removing data directory "datarec"
基础备份拷贝PGDATA时也对pg_tblspc用户自定义表空间符号链接进行拷贝,同一台机器上会有冲突。
因此需要使用–tablespace-mapping选项来进行表空间目录映射:
$ pg_basebackup --pgdata=datarec \
--tablespace-mapping=/home/postgres/test_spc1=/home/postgres/test_spc2
多个用户自定义表空间需要多次使用–tablespace-mapping进行映射。
下面打开allow_in_place_tablespaces参数
postgres=# ALTER SYSTEM SET allow_in_place_tablespaces TO true;
ALTER SYSTEM
postgres=# SELECT pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
然后创建表空间时location设置为空
postgres=# create tablespace myspace location '';
CREATE TABLESPACE
此时直接在pg_tblspc里面生成表空间文件目录来存储数据。
$ ls -l /opt/pgdata1405/pg_tblspc/
total 0
drwxr-x--- 3 postgres dba 29 Oct 26 12:02 623641
Q5."oldest xmin is far in the pass"这个告警信息是什么原因引起?
问题描述
数据库日志中大量出现"oldest xmin is far in the pass"的告警信息,是什么原因引起呢?
问题解答
经过排查分析得知数据库中存在失效的逻辑复制槽,导致autovacuum不能及时回收旧事务,致使WAL日志占据的磁盘空间越来越大。大量的warning事件也引起数据库日志文件迅速增长,日志占据的磁盘空间也越来越大。
解决方案:与业务确认复制槽使用情况,如需继续使用,需要立即进行修复。如确认不再使用,及时使用pg_drop_replication_slot函数删除。




