2014-01-30 40 views
8

我一直在設置適當的池大小(在database.yml中)的一些想法。對於我在database.yml中的池大小,我應該考慮什麼?

我在what is the use of the pool option in database.yml處看到類似的問題,但需要進一步瞭解這一點。

這是我的設置。我有5個工作進程運行Unicorn的實例。我還將Sidekiq實例的併發性設置爲5(我正在調用5個併發線程)。

對於我的游泳池大小,我應該考慮什麼?我應該考慮哪些其他因素?

這是我的理解,到目前爲止(從一個工程師,我說前面的引用):

假設你離開它在默認5這只是意味着,內側「 單一的過程」 ,池大小爲5.每個進程的池爲 。它不是系統級的,具有5值不 意味着你被限制爲5點的過程,那只是意味着每個 進程都有自己的游泳池,大小5

在總結,每個實例的數據庫池大小爲5.這也意味着數據庫池大小設置不是應用程序範圍,而是每個進程/實例。這也意味着,因爲Sidekiq和Unicorn將以自己的實例運行。它將擁有自己的數據庫池大小5.這個假設是否正確?

在這一點上,我可以假設5的默認池大小通常是安全的。你的想法?

PS。如果您可以共享您的AWS RDS實例的池大小。這將不勝感激。

+2

PostgreSQL通常會在實際運行查詢的活動工作會話數少於100的情況下執行最佳效果,除非前面有一個連接池用於排隊查詢。記住這一點。請參閱http://wiki.postgresql.org/wiki/Number_Of_Database_Connections –

+0

同時活動的運行查詢應該與數據庫的可用線程有某種關係。 – frlan

回答

2

您在database.yml中的池大小應該不小於最大數量的sidekiq /獨角獸進程(不是總和)。例如,如果獨角獸以5個進程運行,sidekiq以15個併發開始,則應該設置15個池大小。或者,如果使用7的獨角獸和使用5的sidekiq,則需要database.yml中的7個連接。

+0

>您在database.yml中的池大小應該不小於最大數量的sidekiq /獨角獸進程。你在哪裏看過這個限制? – yaru

+1

https://github.com/mperham/sidekiq/wiki/Advanced-Options#concurrency – Kroid

相關問題