Postgresql
我應該為 PostgreSQL 設置多少連接
我應該為 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 中的設置一樣:伺服器管理:伺服器配置。