↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / SQL 状态码 / Class 53 资源不足

53200 out_of_memory

53200 \u2014 out_of_memory

ERROR 源码确认 详解 未实测

类别
Class 53 资源不足
严重等级
ERROR
条件名
out_of_memory
宏名称
ERRCODE_OUT_OF_MEMORY
最早已知存在
7.4
状态
有效

手册收录:8.1、8.2、8.3、8.4、9.0、9.1、9.2、9.3、9.4、9.5、9.6、10、11、12、13、14、15、16、17、18、19、20。此处仅表示同版本手册收录,运行证据仍以原核验构建为准。

版本覆盖

版本条依据已采样构建显示;灰色版本可能尚未采样,悬停可查看。手册链接随版本选择,源码和运行证据保持原核验构建。

53200

速览 {#at-a-glance}

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

含义 {#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、53400、55000

来源 {#sources}

contrib/pg_stat_statements/pg_stat_statements.c#L2340-L2350

contrib/pg_walinspect/pg_walinspect.c#L121-L124

src/backend/access/transam/twophase.c#L1417-L1420

src/backend/utils/mmgr/aset.c#L444-L453

src/backend/utils/mmgr/mcxt.c#L1157-L1167

src/backend/storage/ipc/shmem.c#L151-L162

src/backend/storage/lmgr/lock.c#L2957-L2969

结构化证据记录保存固定消息以及源码/运行边界。

来源

证据

断言

每条断言都写明了是怎么核实的,以及它不覆盖什么。这一层是核验时留下的原始英文记录,照原样呈现,未经翻译。

报文模板

源码里的格式串,不是某一次运行的输出。%s 之类是占位符,实际报文会填入对象名与取值。适用范围一栏是核验时留下的原始英文记录,未经翻译。

主消息 out of memory
DETAIL Could not allocate enough memory to read file "%s".

来源: 来源:contrib/pg_stat_statements/pg_stat_statements.c @ REL_18_6

主消息 out of memory
DETAIL Failed while allocating a WAL reading processor.

来源: 来源:contrib/pg_walinspect/pg_walinspect.c @ REL_18_6

主消息 out of memory
DETAIL Failed while allocating a WAL reading processor.

来源: 来源:src/backend/access/transam/twophase.c @ REL_18_6

主消息 out of memory
DETAIL Failed while creating memory context "%s".

来源: 来源:src/backend/utils/mmgr/aset.c @ REL_18_6

主消息 out of memory
DETAIL Failed on request of size %zu in memory context "%s".

来源: 来源:src/backend/utils/mmgr/mcxt.c @ REL_18_6

主消息 out of shared memory (%zu bytes requested)

来源: 来源:src/backend/storage/ipc/shmem.c @ REL_18_6

主消息 out of shared memory
HINT You might need to increase "max_locks_per_transaction".

来源: 来源:src/backend/storage/lmgr/lock.c @ REL_18_6

同类 SQL 状态码

状态码 条件名 宏名称 严重等级 版本
Class 53 资源不足 Insufficient Resources 5 个 ↗
53000 insufficient_resources ERRCODE_INSUFFICIENT_RESOURCES ERROR 7.4 起已知
服务器资源不足的宽泛条件,需看消息定位资源。 有效
53100 disk_full ERRCODE_DISK_FULL ERROR 7.4 起已知
写文件时发生短写,通常是磁盘空间耗尽。 有效
53200 out_of_memory ERRCODE_OUT_OF_MEMORY ERROR 7.4 起已知
内存分配失败,涵盖会话内存与共享内存不足。 有效
53300 too_many_connections ERRCODE_TOO_MANY_CONNECTIONS ERROR 7.4 起已知
连接数达到角色、库或服务器上限,新连接被拒。 有效
53400 configuration_limit_exceeded ERRCODE_CONFIGURATION_LIMIT_EXCEEDED ERROR 9.2.0 起已知
配置上限或进程槽位耗尽,如后台 worker 槽位。 有效