# 53200 — out_of_memory

> PostgreSQL SQLSTATE 53200 的来源与诊断参考。
---

# 53200

## 速览 {#at-a-glance}
`53200` 是 PostgreSQL 的内存不足条件。固定调用者包括普通 memory context 分配、共享内存和锁表容量、扩展/统计文件读取以及 WAL 读取处理器；应诊断具体操作和分配上下文，不能把所有内存失败归为一个原因。

<!-- BEGIN SQLSTATE FACTS: generated by scripts/generate.py; do not edit -->

| 字段 | 值 |
| --- | --- |
| SQLSTATE | `53200` |
| 条件名 | `out_of_memory` |
| 状态 | `有效` |
| 已知存在于 | `7.4` |
| 锁定快照 | `9.0.23, 9.1.24, 9.2.24, 9.3.25, 9.4.26, 9.5.25, 9.6.24, 10.23, 11.22, 12.22, 13.23, 14.24, 15.19, 16.15, 17.11, 18.6, 19beta3` |
| 宏 | `ERRCODE_OUT_OF_MEMORY` |
| 别名 | `—` |

<!-- source facts: data/errcodes/53200.json -->
<!-- END SQLSTATE FACTS -->

## 含义 {#meaning}
固定源码有几类不同边界：`MemoryContextAllocationFailure` 报告带请求大小和 memory context 名称的 `out of memory`；`ShmemAlloc` 和锁表建立路径报告 `out of shared memory`，后者可能提示 `max_locks_per_transaction`。扩展路径把操作写入 detail：`pg_stat_statements` 以 `out of memory` 记录文件读取分配失败，WAL reader 也以相同 primary 搭配分配 detail。`pg_stat_statements` 这一分支的 severity 是 `LOG`，并从加载器返回，因此不等同于使客户端当前事务中止的 `ERROR`；核心和 WAL reader 的 `ERROR` 分支才需要正常事务恢复。两阶段事务源码路径实际是 WAL reader 分配路径，不能据此说达到 `max_prepared_transactions` 本身就发出 53200。

## 诊断 {#diagnosis}
保留 severity、primary、detail、hint、操作、backend 和服务器日志，判断是在 backend memory context、共享内存/锁表、文件/统计结构还是 WAL reader 分配。若 primary 为 `out of shared memory` 且 hint 指向 `max_locks_per_transaction`，检查持锁事务与锁表配置；提高它会在启动时消耗共享内存。不要只凭 SQLSTATE 推断主机内存。

## 处理 {#response}
确认平台限制和影响后，再降低或重塑操作、释放应用压力或调整消息指向的容量。先结束或回滚持有过多锁的事务，再考虑调整 `max_locks_per_transaction`；该 hint 不等于操作系统 OOM。文件/WAL/统计操作失败后先验证对象。核心/WAL reader 的 `ERROR` 会使显式事务失败，重试前执行 `ROLLBACK` 或 `ROLLBACK TO SAVEPOINT`；自动提交只有在分配原因修复后才能重试。`pg_stat_statements` 的 `LOG` 分支属于后台加载器，本身不要求客户端恢复事务。本页不在真实主机制造 OOM。

## 版本 {#versions}
锁定目录从 7.4 记录；引用扩展和核心路径来自 PostgreSQL 18.6，未执行 OOM 运行。

## 相关 {#related}
[`53000`](../53000/)、[`53400`](../53400/)、[`55000`](../55000/)

## 来源 {#sources}
[`contrib/pg_stat_statements/pg_stat_statements.c#L2340-L2350`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/contrib/pg_stat_statements/pg_stat_statements.c#L2340)

[`contrib/pg_walinspect/pg_walinspect.c#L121-L124`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/contrib/pg_walinspect/pg_walinspect.c#L121)

[`src/backend/access/transam/twophase.c#L1417-L1420`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/access/transam/twophase.c#L1417)

[`src/backend/utils/mmgr/aset.c#L444-L453`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/mmgr/aset.c#L444)

[`src/backend/utils/mmgr/mcxt.c#L1157-L1167`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/mmgr/mcxt.c#L1157)

[`src/backend/storage/ipc/shmem.c#L151-L162`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/storage/ipc/shmem.c#L151)

[`src/backend/storage/lmgr/lock.c#L2957-L2969`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/storage/lmgr/lock.c#L2957)

结构化[证据记录](../../data/evidence/53200.json)保存固定消息以及源码/运行边界。
