Q:复制冲突:
A:当恢复进程无法在备用服务器上应用从主服务器传递过来的WAL信息时,就会发生复制冲突,因为变更会中断正在执行的查询。这些冲突不会在主服务器上的查询中发生,但会在流复制中的备用服务器上发生,因为主服务器对备用服务器上发生的事情知之甚少。
Q:只读从库wal日志大量堆积及延迟大,并执行sql查询报错超时
A:maxstandby_ streaming_delay:
该参数默认为30秒,当备库执行SQL时,有可能与正在应用的WAL发生冲突,此查询如果30秒没有执行完成则被中止,30秒不是备库上单个查询允许的最大执行时间,是指当备库上应用WAL时允许的最大WAL延迟应用时间,因此备库上查询的执行时间有可能不到这个参数设置的值就被中止了,此参数可以设置成-1,表示当从库上的WAL应用进程与从库上执行的查询冲突时,WAL应用进程一直等待直到从库查询执行完成。
hotstandby_feedback:
默认情况下从库执行查询时并不会通知主库,设置此参数为on后从库执行查询时会通知主库,当从库执行查询过程中,主库不会清理从库需要的数据行老版本,因此,从库上的查询不会被中止,然而,这种方法也会带来一定的弊端,主库上的表可能出现膨胀,主库表的膨胀程度与表上的写事务和从库执行时间有关,此参数默认为off
Q:获取长事务
A:select * from pg_stat_activity where state=‘active’ order by query_start;
Q.主库wal日志大量堆积
A:只读备库重搭会先关主库日志清理
Q只读备库自动触发重搭逻辑
A:1.只读节点不可用、2.与主实例复制中断、3.只读回放延迟大于300GB 都会自动触发重搭
4.回放延迟
Vacumm Full
PG原生支持的表空间回收的命令,在PG里删除大量数据行后的表空间并不会被彻底回收,需要执行Vacumm full才能彻底回收。
VACUUM 会在页内进行整理,VACUUM FULL会跨数据页移动数据。 VACUUM执行速度更快, VACUUM FULL执行地更彻底,但Vacumm full会申请表上的独占锁直至整张表的重写完成,会造成非常大的业务阻塞影响,一般不建议在大表和业务高峰期使用。如果是超大表空间的清理,建议采用下面的插件来清理表空间,优先推荐PG_squeeze。
pg_repack --dry-run --no-superuser-check --echo --no-order -h 连接串 -p 端口 -d database1 -U user --table schema1.table1
– 检查并执行
pg_repack --no-superuser-check --echo --no-order -h 连接串 -p 端口 -d database1 -U user --table schema1.table1
PG_squeeze
内核小版本20240229 新增的插件支持, pg_squeeze插件通过创建表的一个压缩副本来重建表,可以去除表中未使用的磁盘空间,具有如下优势:
在线清理,不阻塞读写。
无需通过客户端,直接执行SQL即可操作。
Pg_repack
在线清理表空间,解决大表更新等操作引起表膨胀问题,无需获取排他锁