PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Конфигурация на Puma Cluster на Heroku

a) Имам ли нужда от конфигурацията before_fork / after_fork като inUnicorn, тъй като работниците на Cluster са разклонени?.

Обикновено не, но тъй като използвате preload_app , да. Предварителното зареждане на приложението води до стартиране и стартиране на екземпляр и след това разклонява пространството в паметта за работниците; резултатът е, че вашите инициализатори се изпълняват само веднъж (евентуално разпределяне на db връзки и други подобни). В този случай вашият on_worker_boot кодът е подходящ. Ако не използвате preload_app , тогава всеки работник се зарежда сам, като в този случай използването на инициализатор би било идеално за настройка на персонализираната връзка, както правите. Всъщност без preload_app , вашият on_worker_boot блокът ще се появи грешка, защото в този момент ActiveRecord и приятелите дори не са заредени.

b) Как да настроя броя на нишките си в зависимост от моето приложение - каква би била причината да го пусна? / В какви случаи би имало значение? 0:16 не е ли вече оптимизиран?

На Heroku (и моето тестване) вие най-добре отговаряте на вашите min /max нишки, с max <=DB_POOL настройка. min threads позволява на приложението ви да намалява ресурси, когато не е под товар, което обикновено е чудесно за освобождаване на ресурси на сървъра, но вероятно по-малко необходимо на Heroku; че dyno вече е предназначен за обслужване на уеб заявки, може също така да ги подготви и да е готов. Докато задавате своя max нишки <=вашият DB_POOL променливата на средата не се изисква, рискувате да консумирате всичките си връзки към базата данни в пула, тогава имате нишка, която иска връзка, но не може да я получи, и можете да получите стария „ActiveRecord::ConnectionTimeoutError - не може да получите връзка с база данни в рамките на 5 секунди." грешка. Това обаче зависи от вашето приложение, много добре бихте могли да имате max> DB_POOL и бъди добре. Бих казал вашият DB_POOL трябва да е поне същото като min стойност на нишките, въпреки че връзките ви не се зареждат нетърпеливо (нишките 5:5 няма да отварят 5 връзки, ако приложението ви никога не достига базата данни).

в) Базата данни Heroku позволява 500 връзки. Каква би била добра стойност за DB_POOL в зависимост от броя на нишките, работния файл и dyno? - Всяка нишка на работник на dyno изисква ли единствена DB връзка, когато работи паралелно?

Производственото ниво позволява 500, за да е ясно :)

Всяка нишка на работник на dyno може консумират връзка, в зависимост от това дали всички се опитват да получат достъп до базата данни по едно и също време. Обикновено връзките се използват повторно, след като са готови, но както споменах в b) , ако вашите нишки са по-големи от вашия пул, можете да прекарате лошо време. Връзките ще бъдат използвани повторно, всичко това се обработва от ActiveRecord, но понякога не идеално. Понякога връзките не работят или умират и затова се препоръчва да включите Reaper, за да откриете и възстановите мъртвите връзки.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Еквивалент на PostgreSQL за TOP n WITH TIES:LIMIT с връзки?

  2. Преобразуване на типа. Какво да направя със стойност на PostgreSQL OID в libpq в C?

  3. Как работи Width_Bucket() в PostgreSQL

  4. Как pgBouncer помага за ускоряване на Django

  5. Най-добрите ETL инструменти за мигриране към PostgreSQL