📝ノート💻テック

RailsのThreads・Workers・ProcessesとDB Connection Pool(超やさしい解説)

Tony Duong

Tony Duong

8月 12, 20262

他の言語:🇫🇷🇬🇧
#ruby#rails#puma#multithreading#connection-pool#activerecord
RailsのThreads・Workers・ProcessesとDB Connection Pool(超やさしい解説)

Rails(Puma + ActiveRecord)で threadsworkersprocessesDB connection pool がどう関係するかの、やさしいメンタルモデル。

部品

レストランを想像する。

言葉 やさしい意味 レストラン
Process 厨房の建物ひとつ レストラン本体
Worker その建物の中の厨房ひとつ(Pumaはよく複数起動する) 厨房ステーション
Thread 注文を取れる料理人ひとり 料理人
DB connection 倉庫(Postgres)への電話回線1本 仕入れ先への電話
Connection pool その厨房が使ってよい電話の箱 本数が限られた電話

ActiveRecordは、2人の料理人が同時に1本の電話を共有しない。
DBに話す料理人には、それぞれ自分の電話が必要。

One Puma process (one kitchen)
├── Worker / thread pool: cook 1, cook 2, cook 3, cook 4, cook 5
└── DB connection pool:   phone, phone, phone   ← only 3 phones!

If 5 cooks all need the warehouse at once → 2 cooks wait (or explode with timeout)
flowchart TB
  subgraph process["One Puma process"]
    T1[Thread 1]
    T2[Thread 2]
    T3[Thread 3]
    T4[Thread 4]
    T5[Thread 5]
    Pool["Connection pool\n(3 connections)"]
  end
  DB[(Postgres)]
  T1 --> Pool
  T2 --> Pool
  T3 --> Pool
  T4 -.->|waits| Pool
  T5 -.->|waits| Pool
  Pool --> DB

小さなストーリー

  1. ユーザーがRailsアプリにアクセス → thread(料理人)がリクエストを処理する。
  2. コードが User.find(1) → その料理人は pool から connection(電話)を取る必要がある。
  3. クエリ実行 → 料理人は電話を箱に 戻す
  4. 次のリクエストがその電話を再利用できる。

DBを同時に叩くかもしれない 5 threads があるなら、そのprocessのpoolにはだいたい 5 connections が必要(少し余裕があるとよい)。

なぜ「workers/processesだけ」では足りない?

こう思いがち:

「processが2つだから、pool = 2で足りる。」

違う。

process自分専用 のpoolを持つ。

2 processes × 5 threads each × need DB
= you may need ~5 connections PER process
= ~10 connections on Postgres total

よく使う式:

DB max connections ≳  (processes × threads_per_process)  +  extras
                      (Sidekiq, console, migrations, …)

database.yml では:

pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

この poolprocessごと:「この厨房が持てる電話の本数」。

そのprocess内でActiveRecordを同時に使うかもしれない threads数以上 であるべき。

覚える一文

Process = 厨房。Threads = 料理人。Pool = 電話。DBに話す料理人には電話が要る。並行する料理人分でpoolを決め、厨房(process)の数を掛ける。


🌐 Claudeによる翻訳

Tony Duong

著者: Tony Duong

デジタル日記。思考、経験、そして人生についての考え。