Postgresql

我應該為 PostgreSQL 設置多少連接

  • July 29, 2022

我應該為 PostgreSQL(版本 13.x)設置多少連接?通過 CPU 核心?記憶體大小?我應該選擇什麼值?如何估計 PostgreSQL 的連接值?我應該這樣估計嗎?

(single_thread_memory) = thread_stack(256KB) + binlog_cache_size(32KB) + join_buffer_size(256KB) + sort_buffer_size(256KB) + read_buffer_size(128KB) + read_rnd_buffer_size(256KB)= 1MB

不幸的是,沒有一個公式可以明確地確定max_connections設置應該是什麼。應該考慮很多因素。

例如:

  • 可以為您的數據庫伺服器分配多少個核心?
  • 有多少連接將是持久的和瞬態的?有多少持久連接通常會在事務中處於空閒或空閒狀態(後者通常不太理想)?
  • 應該服務的最大並發連接數是多少(例如,為了防止意外、意外和/或故意拒絕服務)?
  • 預計您的查詢中有多少比例是核心綁定與 I/O 綁定的?
  • 您的數據庫伺服器將執行哪些其他服務(如果有),這些服務是否更受核心和/或 I/O 限制?
  • 是否可以實施具有同步/複製數據的附加伺服器來處理短期和/或長期需求(而不是增加max_connections?
  • 如果您可以執行負載測試,例如使用pgbench和/或使用特定於應用程序的測試,那麼哪些查詢、並發等揭示了核心限制、I/O 限制、網路限制等!?
  • 您希望您的環境在過載時如何失敗(例如,如果它們不能都得到合理的服務,最好是接受盡可能多的連接,還是最好以犧牲為代價來確保所有成功的連接都得到服務?拒絕別人)?

max_connections可能感興趣的替代方案:

  • 用於superuser_reserved_connections關鍵/高優先級連接可用性。
  • connection_limits使用允許每個數據庫、每個使用者和每個 IP 連接限制的擴展(例如,使用者貢獻的模組,如)。
  • 使用獨立和/或公共程序(例如,PL/pgSQL)包裝器來有效地為使用者、IP、查詢等實現“應用程序”層配額。

關於您問題的其他方面,適用相同類型的分析;work_mem例如,應該根據正在執行的查詢分配多少。考慮通讀PostgreSQL:伺服器管理:伺服器配置:資源消耗。在調整 PostgreSQL 伺服器時,幾乎所有這些設置都值得考慮(就像整個PostgreSQL 中的設置一樣:伺服器管理:伺服器配置

引用自:https://dba.stackexchange.com/questions/314957