Freeze 风暴导致的IOPS飙升 - 追溯与解法

简介:

标签

PostgreSQL , iops 飙升 , freeze 风暴


背景

在使用PG 9.6以前的版本时,freeze带来的IOPS影响较大,体现在数据文件读写、WAL日志大量产生。

原因是9.6以前的版本,当表的年龄达到一定的阈值后(全局参数或表级参数控制),会触发freeze的动作,扫描全表,同时有可能(如果BLOCK被FREEZE的话)产生WAL(越大的表,带来的IO越大)。

freeze相关参数如下:

#autovacuum_freeze_max_age = 200000000  # maximum XID age before forced vacuum   
                                        # (change requires restart)   
#autovacuum_multixact_freeze_max_age = 400000000        # maximum multixact age   
                                        # before forced vacuum   
                                        # (change requires restart)   
   
#vacuum_freeze_min_age = 50000000   
#vacuum_freeze_table_age = 150000000   
#vacuum_multixact_freeze_min_age = 5000000   
#vacuum_multixact_freeze_table_age = 150000000   
   
log_autovacuum_min_duration=0   

那么当数据库突发IO时,如何知道是什么产生的?

1、查看日志

配置了log_autovacuum_min_duration=0时,所有的auto vacuum在日志中都会被记录下来。可以观察日志。

$PGDATA/log   
   
或   
   
$PGDATA/pg_log   

2、查看统计表,统计表记录了最后一次被VACUUM的时间。

select age(a.relfrozenxid), last_autovacuum,last_vacuum,schemaname,a.relname,pg_size_pretty(pg_total_relation_size(relid))    
  from pg_class a, pg_stat_all_tables b where a.oid=b.relid and a.relkind in ('r', 'm') order by last_autovacuum nulls last;   

可以大概推测。

   age    | last_autovacuum | last_vacuum |     schemaname     |         relname         | pg_size_pretty    
----------+-----------------+-------------+--------------------+-------------------------+----------------   
       46 |                 |             | public             | test                    | 5608 MB   
       43 |                 |             | public             | test1                   | 5784 kB   
 80593695 |                 |             | pg_catalog         | pg_statistic            | 248 kB   
 80593695 |                 |             | pg_catalog         | pg_type                 | 184 kB   
       39 |                 |             | public             | a                       | 48 kB   
       32 |                 |             | public             | b                       | 16 kB   
 80593695 |                 |             | pg_catalog         | pg_policy               | 16 kB   
       22 |                 |             | public             | c                       | 48 kB   
 80593695 |                 |             | pg_catalog         | pg_authid               | 72 kB   
..............   

3、分析WAL内容,看看是否有大量的freeze record,方法参考如下:

《PostgreSQL 使用pg_xlogdump找到误操作事务号》

《PostgreSQL xlog dump - pg_xlogdump 源码讲解》

预防freeze风暴

《PostgreSQL的"天气预报" - 如何预测Freeze IO风暴》

《PostgreSQL 大表自动 freeze 优化思路》

内核改进

《PostgreSQL 9.6 vacuum freeze大幅性能提升 代码浅析》

参考

《如何追溯 PostgreSQL 慢查询当时的状态》

《PostgreSQL的"天气预报" - 如何预测Freeze IO风暴》

《PostgreSQL 大表自动 freeze 优化思路》

《PostgreSQL 9.6 vacuum freeze大幅性能提升 代码浅析》

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
SQL 关系型数据库 分布式数据库
PostgreSQL 在线修改数据类型 - online ddl 方法之一
标签 PostgreSQL , online ddl , trigger , ddl 事务 背景 有张表的主键id是serial,但现在不够了,需要升级成bigserial,有什么优雅的方法吗?我看下来好像会锁表很久(因为数据量挺大) 如果直接alter table,由于数据类型从4字节改成了8字节,而tuple结构是在METADATA里面的,不是每行都有,所以DEFORM需要依赖METADATA,目前来说,这种操作需要rewrite table。
4556 0
|
IDE API 开发工具
FastAPI快速搭建一个博客系统
FastAPI快速搭建一个博客系统
1078 0
FastAPI快速搭建一个博客系统
|
前端开发 JavaScript 测试技术
React组件开发规范
React组件开发规范
2443 1
|
机器学习/深度学习 编解码 数据可视化
转置卷积-清晰易懂
转置卷积(Transpose Convolution)是一种用于图像上采样的技术,常用于图像分割、生成对抗网络(GAN)等领域。与传统的上采样方法不同,转置卷积通过学习参数来实现更优的插值效果。本文介绍了转置卷积的背景、应用、与标准卷积的区别以及数学推导,帮助读者深入理解其原理和应用场景。
1218 1
|
存储 SQL OLAP
分析性能提升40%,阿里云Hologres流量场景最佳实践
分析性能提升40%,阿里云Hologres流量场景最佳实践
|
JavaScript Java 关系型数据库
流浪动物救助|基于Springboot的流浪动物救助平台设计与实现(源码+数据库+文档)
流浪动物救助|基于Springboot的流浪动物救助平台设计与实现(源码+数据库+文档)
650 0
|
机器学习/深度学习 自然语言处理 算法
ICML 2024:零阶优化器微调大模型,大幅降低内存
【7月更文挑战第14天】ICML 2024研究表明,零阶优化用于大模型微调能大幅降低内存需求。该论文通过避免反向传播,减少LLM(大型语言模型)微调的内存开销,提出新方法,适用于资源受限环境。虽然性能可能不及一阶优化器,但为高效NLP计算开辟了新途径。论文链接:[arxiv.org/abs/2402.11592](https://arxiv.org/abs/2402.11592)**
478 3
|
机器学习/深度学习 数据采集 分布式计算
LabVIEW、Matlab与Python的比较:从多角度详解三大编程工具
LabVIEW、Matlab与Python的比较:从多角度详解三大编程工具
512 1
|
缓存 安全 API
对象存储OSS产品常见问题之多租户系统用程序统计每个租户的下行流量如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
770 0
|
前端开发 JavaScript Java
毕业设计|SpringBoot Vue3小说阅读网站系统
毕业设计|SpringBoot Vue3小说阅读网站系统
548 2