当前位置: 首页 > news >正文

PostgreSQL 在AWS的 T 系列实例上的性能陷阱

很多人刚上 AWS 时,为了节省成本,会选择:

t3 / t4g 系列实例

看起来:

  • vCPU 多(比如 8核)

  • 内存够用

  • 价格便宜

于是直接用来跑 PostgreSQL 主库。

👉这是一个非常隐蔽但致命的坑。


一、典型问题现象

生产环境常见表现:

load 很高(> CPU核数) CPU 使用率 100% 数据库卡顿 pg_basebackup 很慢 checkpoint 抖动 iowait 偶尔升高

甚至你会看到:

CPU 满了,但 QPS 上不去

二、核心原因:T 系列 CPU 是“限速”的

t4g.2xlarge为例:

8 vCPU baseline ≈ 40%

换算:

8 × 40% = 3.2 vCPU

👉 真实情况:

长期只能稳定使用 ≈ 3.2 核,而不是 8 核


三、CPU Credit:隐形限速器

T 系列依赖:

CPU Credit

机制:

  • 平时积累

  • 使用时 burst

  • 用完 → 限速


当 credit 用完后

CPUCreditBalance = 0

👉 CPU 会被限制到:

≈ 3.2 vCPU

四、为什么 load 会异常升高(重点)

很多人看到:

load = 13 CPU = 100%

会误以为:

👉 CPU 不够

其实更准确是:

👉CPU 被限制,导致 load 被放大


load 的本质

load = 正在运行 + 等待CPU + 等待IO 的进程数

👉 排队越多,load 越高


T 系列的“限速”不是降频(非常关键)

❌ 不是 CPU 降频
✔ 是 CPU 时间片限制(调度层)

可以理解为:

你有 8 核 但每个核只能用 40% 时间

👉 等价于:

≈ 3.2 个真实 CPU

举个非常直观的例子

正常实例(m6g)

任务数:8 CPU:8核

👉 不排队:

load ≈ 8

T 系列(credit 用完)

任务数:8 CPU:≈3.2核

👉 只能跑 3.2 个:

8 - 3.2 = 4.8 在排队

👉 load:

≈ 13

👉 这就是你看到:

load 爆炸(13+)

的真正原因


五、PostgreSQL 为什么更容易踩坑

PostgreSQL:

多进程模型(process-based)

例如:

  • 每个连接一个进程

  • autovacuum

  • walwriter

  • checkpointer

👉 对 CPU 非常敏感


CPU 不够会发生什么

1️⃣ 进程排队

vmstat r > CPU

2️⃣ WAL 写变慢

commit 延迟上升

3️⃣ checkpoint 拉长

写放大

4️⃣ iowait 被误判(经典坑)

很多人看到:

iowait ↑

以为是:

👉 磁盘问题

实际上:

CPU 忙 → IO处理慢 → 看起来像 IO 等待

六、典型误判链路

很多团队会这样排查:

数据库慢 → 看 iowait 高 → 提升 IOPS → 问题依旧 → 怀疑 SQL → 调参数 → 还是慢

👉 最终发现:

CPUCreditBalance = 0

七、如何快速确认这个问题

1️⃣ AWS 指标

CPUCreditBalance = 0 CPUCreditUsage 持续高

2️⃣ vmstat

vmstat 1

判断:

r > vCPU id ≈ 0

👉 CPU 不够


3️⃣ top

load > CPU核数

4️⃣ PostgreSQL

SELECT wait_event FROM pg_stat_activity;

出现:

WALWrite DataFileWrite

八、真实案例(典型)

load: 13 CPU: 100% CPUCreditBalance: 0 vmstat r: 10+

换算:

实际需求 ≈ 6~7 CPU 可用 ≈ 3.2 CPU

👉 差距 ≈ 2倍


九、为什么 T 系列不适合 PostgreSQL

❌ 1. CPU 不稳定

burst → 限速

❌ 2. IO 被 CPU 拖累

IO 看起来慢,其实是 CPU 慢

❌ 3. 性能不可预测

什么时候掉速无法控制

十、正确选型建议

推荐实例

类型实例
通用m6g / m7g
数据库(推荐)r6g / r7g

为什么 r 系列更好

内存大 → cache命中高 → IO减少

十一、什么时候可以用 T 系列?

仅限:

开发环境 低 QPS 短任务 非核心业务

十二、一句话总结

T 系列不是“慢 CPU”,而是“少 CPU”,因此 load 会被严重放大,而 PostgreSQL 是最容易被这种机制放大的数据库。


十三、最终建议

如果你已经看到:

load 高 + CPU 满 + credit 为 0

👉 不要再调参数

👉直接换实例(m6g / r6g)


http://www.cnnetsun.cn/news/2091198.html

相关文章:

  • Mythsky维生素D3含量成分是什么?全面解析其营养构成
  • Superturtle:模块化命令行工具集的设计哲学与自动化实践
  • 工业机器人仿真与方形路径示教作业报告
  • 3小时搭建怀旧传奇服务器:OpenMir2开源框架终极指南
  • 当光子芯片“瘦身”成膜:手把手解析InP-on-Si(IMOS)纳米光子集成技术
  • 性能测试,TPS 与 QPS 差异:100 字读懂两者差别,别再弄混淆了?
  • 超详细 Kubectl 完整命令手册(生产级、全分类、带参数解释+实操示例)
  • 如何3分钟解锁B站缓存视频:m4s-converter终极转换指南
  • 【工业级MCP网关设计规范V2.3】:基于金融高频交易场景验证的12条硬性约束,90%团队踩过的3个线程模型陷阱
  • Zotero文献去重插件:告别重复文献的智能解决方案
  • 终极指南:如何用PCL启动器轻松管理你的Minecraft世界
  • 从零开始:如何利用Kohya_ss轻松训练你的专属AI绘画模型
  • Murata Type 2GT LoRa模块技术解析与应用实践
  • 基于LLM与Godot的智能桌宠:打造有记忆、有情感的AI桌面伙伴
  • VSCode农业插件生态白皮书首发:覆盖23类农用设备协议(Modbus-RTU/ISOBUS/NMEA 0183),仅限首批500名涉农开发者领取
  • Phi-mini-MoE-instruct开发指南:API接口封装与Python client调用示例
  • 推荐 win11 可用的 SVN 版本:64位,下载最新的 TortoiseSVN 1.14.x 版本
  • 为什么Photoshop图层批量导出工具能大幅提升设计效率?
  • AI分子对接
  • ERP系统进销存模块源码深度解析(附代码):核心逻辑与实现方案
  • 51PR媒体发布平台整合近10万媒体资源,助力企业高效发稿
  • 重新定义地图创作:如何通过TEdit实现泰拉瑞亚世界的无限可能
  • MPL502-V-G-270 MPL 502系列传感器
  • MicMute:Windows平台一键麦克风静音解决方案,告别会议尴尬瞬间
  • DeepseekV3论文阅读笔记
  • Ryujinx终极指南:如何在PC上免费畅玩Switch游戏 [特殊字符]
  • 从成本到效果:5大软文发稿平台深度测评,帮你选出适合的那个
  • D6.3 PriorityClass 常用实验(2个)
  • Redisson 介绍
  • 算法训练营Day12| LeetCode 169. 多数元素