从具有 10 个并行线程的 PG 10 表中读取时遇到以下错误:-
错误:无法将共享内存段“/PostgreSQL.1110214013”的大小调整为 3158016 字节:设备上没有剩余空间
似乎是 K8s 将 /dev/shm/ 的最大大小限制为 64MB 的结果。将此值设置得更高会导致 64MB。
Spark 任务正在执行并行读取,并根据标识列的哈希值进行分区。想知道不平衡的分区是否会导致特定任务超过导致写入磁盘的进程的 postgres work_mem的值。
我看到我的每个线程都有一个相应的错误日志,所以这个共享内存段调整大小发生了多次(可能请求的调整大小超过了锁定的 64MB)
尝试将 work_mem从 4MB 增加到 32MB、64MB 和最后 256MB,但在每个阶段都看到了错误。以下是我认为可以调整的全套 PG 设置,以避免出现问题的磁盘使用:-
- 有效缓存大小:“750MB”
- 共享缓冲区:“2GB”
- min_wal_size: "80MB"
- max_wal_size:“5GB”
- work_mem: "4MB,32MB,64MB,128MB,256MB"(都试过了)
- random_page_cost:4(想知道这个设置是否有用?)
- 最大连接数:100
有一个潜在的解决方法,涉及将目录挂载到 /dev/shm/ 但宁愿避免这种解决方案,因为我将无法限制目录可能增长到的大小,理想情况下会找到一个适用于 64MB 的解决方案。
谢谢。