2012-08-29 34 views

回答

0

那麼,pg_pconnect將意味着每個PHP後端都有一個連接,因此它取決於您擁有多少後端。使用傳統的Apache mod-php安裝程序,它會成爲一個非啓動器,但您可能會忽略它。

數據庫服務器可以處理數百個空閒連接,但如果它們都同時發出查詢,則幾乎可以肯定地停止。我已經看到了每個核心不超過兩個連接的經驗法則 - 假設I/O不會首先限制您。

常用的方法是運行一個連接池像pgbouncer並且php連接每個請求。這可以減少連接開銷,同時保持併發性。

1

建立與PostgreSQL服務器的連接預計會比MySQL服務器貴得多。這是由於這些數據庫在處理獨立連接之間的資源分配和特權分離方面的不同設計選擇。

因此,對於一個網站,只要有可能就重用到PostgreSQL的連接是完全合理的。

通常建議的方式不是使用pg_pconnect,而是使用pgBouncerpgPoolII等外部連接池,它們更適合於此任務。但是,使用PHP-FPM時,您已經有了一箇中間件,可以讓您通過fpm進程管理器選項以某種方式控制打開連接的數量,因此它可能足夠好。您可以考慮將pm.max_requests設置爲非零值,以確保以合理的頻率清理連接,並避免在非高峯時間保留一堆未使用的連接。

+0

謝謝。你能告訴我爲什麼不推薦使用pg_pconnect? – varan

+0

查看@ RichardHuxton的回答。基本上你最終將每個Apache進程與一個獨特的開放式PG連接結合起來。這通常意味着太多的連接,而對它們的控制太少。但fastcgi模型緩解了這個問題。 –

+0

如果您使用的是poolers(pgbouncer是我的建議),那麼您可以使用pg_pconnect來使這些連接的成本/時間更低。只要避免pg_pconnect直接到pg服務器。 –

相關問題