2014-01-30 13 views
8

Ich habe einige Gedanken über die Einstellung der richtigen Poolgröße (in database.yml).Was sollte ich für meine Poolgröße in database.yml berücksichtigen?

Ich sah eine ähnliche Frage bei what is the use of the pool option in database.yml, aber musste weiter gehen, um das mehr zu verstehen.

Hier ist mein Setup. Ich habe Instanzen mit Unicorn mit 5 Worker-Prozess '. Ich habe auch Sidekiq-Instanzen mit Gleichzeitigkeit auf 5 (Ich stimme das ist 5 gleichzeitige Threads).

Was sollte ich für meine Poolgröße beachten? Welche anderen Faktoren sollte ich berücksichtigen?

Das ist mein Verständnis so weit (wie von einem Ingenieur zitierte ich früher sprach):

Sie es auf den Standard verlassen Angenommen 5. Es bedeutet nur, dass, nach innen „ein einzigen Prozess“ , die Poolgröße ist 5. Der Pool ist pro Prozess. Es ist nicht systemweit so ein Wert von 5 mit nicht bedeuten, dass Sie bis 5 Prozesse begrenzt sind es nur bedeutet, dass jeder Prozess hat einen eigenen Pool, der Größe 5.

Zusammengefasst, jede Instanz hat eine Datenbankpoolgröße von 5. Dies bedeutet auch, dass die Einstellung für die Datenbankpoolgröße nicht app-weit, sondern pro Prozess/Instanz ist. Das bedeutet auch, dass Sidekiq und Unicorn in einer eigenen Instanz laufen werden. Es wird eine eigene Datenbankpoolgröße von 5 haben. Ist diese Annahme richtig?

An dieser Stelle kann ich davon ausgehen, dass die Standard-Poolgröße von 5 im Allgemeinen sicher ist. Ihre Gedanken?

PS. Wenn Sie Ihre Poolgröße für Ihre AWS RDS-Instanzen freigeben können. Das wäre willkommen.

+2

PostgreSQL funktioniert normalerweise am besten mit weniger als 100 aktiv arbeitenden Sitzungen, die tatsächlich Abfragen ausführen, es sei denn, es gibt einen Verbindungs-Pooler, der Abfragen vorwählt. Merk dir das. Siehe http://wiki.postgresql.org/wiki/Number_Of_Database_Connections –

+0

Auch aktive laufende Abfragen sollten in irgendeiner Beziehung zu verfügbaren Threads für die Datenbank stehen. – frlan

Antwort

2

Ihre Poolgröße in database.yml sollte nicht kleiner als die maximale Anzahl der Sidekiq/Unicorn-Prozesse (nicht Summe) sein. Beispiel: Wenn ein Unicorn mit 5 Prozessen und Sidekiq mit 15 Concurrency ausgeführt wird, sollten Sie 15 Poolgröße festlegen. Oder, wenn Unicorn mit 7 und Sidekiq mit 5, Sie 7 Verbindungen in database.yml benötigen.

+0

> Ihre Poolgröße in der Datenbank.yml sollte nicht kleiner als die maximale Anzahl der sidekiq/unicorn-Prozesse sein. Wo hast du über diese Einschränkung gelesen? – yaru

+1

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

Verwandte Themen