暂无图片
postgreSQL 表膨胀详细介绍有吗?
我来答
分享
暂无图片 匿名用户
postgreSQL 表膨胀详细介绍有吗?

postgreSQL 表膨胀详细介绍有吗?

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
尚雷

PostgreSQL的表膨胀及对策
PostgreSQL的MVCC机制在数据更新时会产生dead元组,这些dead元组通过后台的autovacuum进程清理。一般情况下autovacuum可以工作的不错,但以下情况下,dead元组可能会不断堆积,形成表膨胀(包括索引膨胀)。

autovacuum清理速度赶不上dead元组产生速度
由于以下因素导致dead元组无法被回收
主库或备库存在长事务
主库或备库存在未处理的未决事务
主库或备库存在断开的复制槽
检查表膨胀
方法1:查询pg_stat_all_tables系统表

SELECT
    schemaname||'.'||relname,
    n_dead_tup,
    n_live_tup,
    round(n_dead_tup * 100 / (n_live_tup + n_dead_tup),2) AS dead_tup_ratio
FROM
    pg_stat_all_tables
WHERE
    n_dead_tup >= 10000
ORDER BY dead_tup_ratio DESC
LIMIT 10; 
复制

预防表膨胀
调整autovacuum相关参数,加快垃圾回收速度

对于写入频繁的系统,默认的autovacuum_vacuum_cost_limit参数值可能过小,尤其在SSD机器上,可以适当调大。

autovacuum_vacuum_cost_limit = 4000
监视并处理以下可能导致dead元组无法被回收的状况

长事务
未决事务
断开的复制槽
强制回收

设置old_snapshot_threshold参数,强制删除为过老的事务快照保留的dead元组。这会导致长事务读取已被删除tuple时出错。

old_snapshot_threshold = 12h
old_snapshot_threshold不会影响更新事务和隔离级别为RR只读事务。old_snapshot_threshold参数也不能在线修改,如果已经设置了old_snapshot_threshold但又需要运行更长的RR只读事务或单个大的只读SQL,可以临时在备机上设置max_standby_streaming_delay = -1,然后在备机执行长事务(会带来主备延迟)。

杀死长事务

设置可以部分避免长事务的参数

idle_in_transaction_session_timeout = 60s
lock_timeout = 70s

文章来源:https://developer.aliyun.com/article/463916

暂无图片 评论
暂无图片 有用 0
打赏 0
__V__
2022-11-24
愤怒的蜗牛

学习了

暂无图片 评论
暂无图片 有用 0
打赏 0
刘继超

学习了

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
怎么从postgreSQL数据库数据同步至sqlserver数据库?
回答 2
已采纳
各种同步软件收费的DSG、IIDR偷着用的 OGG开源的DataX、DBSyncerhttps://github.com/alibaba/DataXhttps://gitee.com/ghi
postgresql命令pg_ctl 参数-D datadir是谁的存储目录?
回答 2
已采纳
答案是postgresql.conf配置文件存储目录
postgresql window用法
回答 3
已采纳
这个window函数rangebetween1precedingand6following的计算逻辑是对每一行的数据,计算它前面一行到后面六行的数据的总和。具体来说,对于每一行,都会将其自身的值,前面
生产中,在一个PG实例中,一般是创建一个数据库,再创建多个模式方式,或是创建多个数据库,数据库之间再通过DBLINK方式访问,哪种多一些 ?
回答 1
直接授权就能访问了啊
postgresql 外表是不是不能直接增加列?
回答 1
外部表?可以增加列
postgresql安装oracle_fdw.so插件,提示:没有libnnz11.so,但是已有libnnz11.so
回答 2
不知道哪位朋友匿名问的问题。这个问题应该是我前段时间做测试中在群里提问的,感谢这位朋友在这里帮我提问。现在问题已经解决。当时的postgresql数据库是使用systemctl启动的,切换到postg
postgres_exporter如何自动获取/使用数据库上的实例?
回答 1
exportPGEXPORTERAUTODISCOVERDATABASEStrue
使用pgpool-II时,用pg_terminate_backend杀会话会触发主备切换
回答 1
是的,用4.3版本吧,4.3可以解决这个问题。
PG中如何skip scan?是否和Oracle中的skip scan匹配
回答 2
不过https://developer.aliyun.com/article/582866这个文章有一些测试,供您参考
pgadmin4 backup server 后如何恢复?
回答 1
backup对应的有restore菜单
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~