跳转到主要内容

temp_buffers

每会话、按需分配且仅用于访问临时表的缓冲区上限。
说明

Fact — 官方简述译文:设置每个会话使用的最大临时缓冲区内存。

身份

类型 , integer
上游 pg_settings 类型
Context , user
普通用户可在运行时修改
单位 , 8kB
原始单位
范围 , 1001073741823
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Resource Usage / Memory
上游分类
最后 boot 值 , 1024
8 MiB (1024 × 8kB)

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–19 Beta 3 1024 8kB 8 MiB (1024 × 8kB)

机制详解

temp_buffers 控制访问临时表时使用的会话本地缓冲区,不控制普通查询执行中排序或哈希产生的临时文件。

会话只能在首次使用临时表之前修改该值;首次访问之后再执行 SET 对该会话无效。缓冲区会按需增长,直到达到上限。

即使未真正使用,提高上限仍会产生缓冲描述符开销;每个实际使用的缓冲会消耗一个数据库块,通常为 8kB。因此总用量取决于同时活跃使用临时表的会话数。

调优建议

提示

Advice。 以下建议是工作负载起点,必须用真实测量验证。

场景 建议
OLTP 除非应用明确大量使用临时表,否则保留默认值。优先只在创建临时表的会话中调整,并确保在首次访问前设置。
OLAP 仅在确实使用 PostgreSQL 临时表的流程中调高;排序和哈希的主要控制项是 work_mem,而不是 temp_buffers。预算中必须计入会话并发。
小规格 保留默认值,避免全局提高每会话上限。临时表密集任务应隔离运行或局部调整。

Pigsty 取值

以下值来自固定 8 核、32 GiB、100 GiB SSD 夹具,并按 PG19 Beta 3 渲染当前 Pigsty 模板;这不表示 Pigsty 当前支持该历史或测试版本。

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 未修改;OLAP: PG9.0–19 Beta 3 未修改;CRIT: PG9.0–19 Beta 3 未修改;TINY: PG9.0–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 把临时表缓冲与排序、哈希产生的临时文件混淆。
  • 会话已经访问临时表之后才执行 SET。
  • 忽略大量会话同时使用临时表时的乘数效应。
  • 认为大值会立即全部分配;实际数据页按需增长,但描述符仍有开销。

work_mem · temp_file_limit · temp_tablespaces · max_connections · log_temp_files

参考资料