PSQL13报错:无法映射动态共享内存段,运行时故障排查求助
报错信息
STATEMENT: SELECT * FROM "hep_proto_1_call" WHERE (create_date between $1 AND $2 AND ( (protocol_header->>'captureId')::int = $3 )) LIMIT 2000 ERROR: could not map dynamic shared memory segment ERROR: could not map dynamic shared memory segment LOG: background worker "parallel worker" (PID 262853) exited with exit code 1 LOG: background worker "parallel worker" (PID 262854) exited with exit code 1
可能原因
- 系统内存资源不足:服务器剩余物理内存或交换空间耗尽,PostgreSQL无法为并行工作进程分配足够的共享内存段。
- 操作系统共享内存参数过低:
shmmax、shmall等内核参数设置过小,不足以支撑并行查询所需的共享内存分配。 - PostgreSQL动态共享内存配置不当:
dynamic_shared_memory_type参数配置了不兼容的类型,或者该类型对应的系统资源(如tmpfs空间)不足。 - 进程资源限制:运行PostgreSQL的用户受到
ulimit等工具的内存限制,进程无法创建足够的内存映射。 - 内存碎片化严重:系统内存碎片化,总内存足够但找不到连续的内存块来映射共享内存段。
- 并行查询资源竞争:多个并行查询同时运行时,资源 pieces执行amber Count部分了解(Lew__之一ian)ssh的等开)导致部分并行工作进程无法获取所需的共享内存。
内容的提问来源于stack exchange,提问作者Idan Amar
相关产品推荐
相关产品推荐

