【问题标题】:PostgreSQL resource consumption, segregation and schedulingPostgreSQL 资源消耗、隔离和调度
【发布时间】:2021-12-07 17:38:07
【问题描述】:

PostgreSQL 如何相互保护会话不受 资源消耗角度?

比如我写了一些存储过程:

  1. 一个执行高度 cpu 密集型紧密循环的存储过程,PostgreSQL 如何防止它占用大部分可用 cpu?
  2. 一个存储过程会触发大量 IO,PostgreSQL 是如何让它不占用大部分 IO 带宽的?
  3. 一个存储过程读取没有其他会话引用的广泛分散的页面,PostgreSQL 如何防止它填满缓冲池?

另外,据我了解,每个 PostgreSQL 会话对应于不同的操作系统进程,所以我也想知道 PostgreSQL 明确处理的资源消耗隔离以及操作系统执行依赖于什么(作为操作系统调度的一部分)机制)。

非常感谢。

皮卡

【问题讨论】:

  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: postgresql resource-scheduling


【解决方案1】:

PostgreSQL 中没有进程资源限制,每个进程都会消耗尽可能多的 CPU 和 I/O。

PostgreSQL 后端运行单线程这一事实在一定程度上缓解了这种情况,因此单个后端无法消耗数据库服务器的所有资源。但是请注意,PostgreSQL 具有并行查询,因此(使用默认配置)最多三个进程可以处理单个语句。您可以通过将max_parallel_workers_per_gather 设置为 0 来减少它。

一条语句可以从共享缓冲区中驱逐多少页也没有限制。但是除非该语句多次触及单个页面,否则该语句读入的页面的使用计数将保持低水平,并且缓冲区可以再次从缓存中逐出。还有一个针对大型顺序扫描的优化:如果估计表会爆出超过四分之一的共享缓冲区,则使用仅包含一小部分共享缓冲区的“环形缓冲区”对其进行扫描。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多