博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostgreSQL Freeze 风暴预测续 - 珍藏级SQL
阅读量:6496 次
发布时间:2019-06-24

本文共 1009 字,大约阅读时间需要 3 分钟。

hot3.png

标签

PostgreSQL , Freeze , 风暴

背景

PostgreSQL 目前默认的存储引擎,事务可见性需要依赖行头的事务号,因为事务号是32位的,会循环使用。

在一条记录产生后,如果再次经历了20亿个事务,必须对其进行freeze,否则数据库会认为这条记录是未来事务产生的(可见性判断)。

因此FREEZE操作是数据库在32位事务号的情况下,经常要做的。

对全表进行FREEZE操作时,会扫描整表,将大于指定阈值least(autovacuum_freeze_min_age, 表级参数vacuum_freeze_min_age)年龄的记录设置为freeze。可能导致大量的读IO,写IO(主要是写数据文件,WAL日志, full page write WAL)。

一些参数决定数据库在什么时候触发FREEZE,以及触发FREEZE时,冻结哪些记录,以及是否涉及到调度(sleep)。

同时很多参数有库级、表级选项。表级优先,然后是库级,最后是实例级。

1、多久检查一次哪些表是否需要FREEZE

postgres=# show autovacuum_naptime ;     autovacuum_naptime     --------------------     1s    (1 row)

2、哪些表需要被自动FREEZE,

超过如下阈值,如果设置了表级参数则以表级参数为准,否则以系统参数为准。

表级参数    autovacuum_freeze_max_age    autovacuum_freeze_table_age        系统级参数    autovacuum_freeze_max_age

3、手工执行普通vacuum时,哪些表会被扫描全表,并freeze

超过如下阈值

系统级参数    vacuum_freeze_table_age

注意,现在PG支持VM文件里面记录一个PAGE是否需要被FREEZE,所以即使全表扫描,也会根据VM标记位,跳过一些BLOCK,所以FREEZE并不一定会产生大量读IO。根据表的情况而定。

3、触发FREEZE时,哪些记录需要被FREEZE

超过如下阈值的记录被FREEZE,如果设置了表级参数则以表级参数为准,否则以系统参数为准。

转载于:https://my.oschina.net/u/3611008/blog/1808898

你可能感兴趣的文章
nf_conntrack: table full, dropping packet
查看>>
关于C语言结构体对齐的学习
查看>>
loadrunner另类玩法【测试帮日记公开课】
查看>>
C#删除文件夹
查看>>
【ZooKeeper Notes 3】ZooKeeper Java API 使用样例
查看>>
oracle11g数据库升级
查看>>
AWS - Couldformation 初探
查看>>
《理解 OpenStack + Ceph》---来自-[爱.知识]-推荐
查看>>
手把手教你搭建一个学习Python好看的 Jupyter 环境
查看>>
ES6基础之Array.fill函数
查看>>
ES6深拷贝与浅拷贝
查看>>
如何免费(轻成本)在网上做推广宣传
查看>>
Exchange 2013与OWA13集成
查看>>
硬铺路、软筑墙:三星移动在中国的新路径
查看>>
SCCM 2012 SP1系列(七)分发部署exe软件
查看>>
InfBox V7.0 企业绩效助手客户端使用简介
查看>>
Linux系统/boot目录破损无法启动怎么办
查看>>
[转] JavaScript仿淘宝智能浮动
查看>>
c++ hook 钩子的使用介绍
查看>>
伪终端
查看>>