簡體   English   中英

Postgres資源消耗隔離與調度

[英]Postgres resource consumption segregation and scheduling

PostgreSQL 如何從資源消耗的角度保護會話?

例如,假設我寫了一些存儲過程:

  1. 一個執行高度 cpu-bound 緊密循環的存儲過程,Postgres 如何防止它占用大部分可用 cpu?
  2. 一個觸發大量 IO 的存儲過程,Postgres 如何防止它占用大部分 IO 帶寬?
  3. 一個讀取分散的頁面的存儲過程,沒有其他 session 引用,Postgres 如何防止它填滿緩沖池?

此外,據我了解,每個 PostgreSQL session 對應於不同的操作系統進程,所以我也想知道什么資源消耗隔離 PostgreSQL 明確處理以及它依賴於操作系統的部分調度機制來執行)。

非常感謝。

皮亞卡

PostgreSQL 中的進程沒有資源限制,每個進程將盡可能多地消耗 CPU 和 I/O。

PostgreSQL 后端運行單線程,因此單個后端不能消耗數據庫服務器的所有資源這一事實在一定程度上緩解了這一點。 但是請注意,PostgreSQL 具有並行查詢,因此(使用默認配置)最多三個進程可以處理單個語句。 您可以通過將max_parallel_workers_per_gather設置為 0 來減少它。

一條語句可以從共享緩沖區中驅逐多少頁也沒有限制。 但是除非該語句多次觸及單個頁面,否則該語句讀入的頁面的使用計數將保持低水平,並且緩沖區可以再次從緩存中逐出。 還有一個針對大型順序掃描的優化:如果估計表會爆出超過四分之一的共享緩沖區,則使用僅包含一小部分共享緩沖區的“環形緩沖區”對其進行掃描。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM