Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DBコネクションプール Database Connection Pooling
Search
Neurogica
June 11, 2026
Technology
37
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DBコネクションプール Database Connection Pooling
Neurogica
June 11, 2026
More Decks by Neurogica
See All by Neurogica
LLM-MAS×時系列予測 LLM-MAS × Time-Series Forecasting
neurogica
0
15
推薦タスクの整理と 時系列基盤モデル活用を考える How Recommender Systems Use Time-Series Data and Where Foundation Models Fit
neurogica
0
7
画像生成AIの生成速度の遅さと 画風のばらつきを解決する手法 Methods for Solving Image Generation AI's Slowness and Style Inconsistency
neurogica
0
4
時系列基盤モデルは作れるのか? Can We Build a Foundation Model for Time Series?
neurogica
0
96
双曲空間と機械学習 〜 階層性を活かした学習〜 Hyperbolic Space and Machine Learning ~ Learning that Leverages Hierarchical Structure ~
neurogica
0
42
PENGUIN: General Vital Sign Reconstruction from PPG with Flow Matching State Space Models | ICASSP 2026
neurogica
0
58
DecompSSM: A Decomposition-based State Space Model for Multivariate Time-Series Forecasting | ICASSP 2026
neurogica
0
90
AIは公平な評価, 決断を行えるか? 〜 LLM-as-a-Judgeの限界と意思決定バイアス 〜 Can AI Make Fair Evaluations and Decisions?
neurogica
0
60
最新の物体検出モデルに関するサーベイ A Survey of the Latest Object Detection Models
neurogica
0
110
Other Decks in Technology
See All in Technology
ハッカソンで入賞した話 @ Findy LT
asari194617
0
1.5k
コーチングの奥義 何もしないテクニック
jinwatanabe
0
150
属人化を叩き割れ!「制作加速」と「安定化」の矛盾を打破する:8年目プロダクトが辿り着いた「ミスが起こり得ない」アセット制作フローの全貌
gree_tech
PRO
0
340
【書籍出版記念】 10周回って、エージェント開発は RAGがすべてだった。〜RAGの歴史と開発現場で見えた実践知〜
akiratameto
19
6.8k
長期運営で肥大化したExcelマスターデータの解消に向けた移行事例
gree_tech
PRO
0
330
医療の現場を変革に挑戦した半年間の軌跡 - PythonとAIで現場を変える / From Code to Care
soudai
PRO
1
580
あなたの知らないバージョン命名規則
sat
PRO
2
190
【CEDEC2026】Creative Approaches to Localizing the Dialects and Unique Speech of Umamusume: Pretty Derby Characters in English
cygames
PRO
4
26k
【GCC2026】鉄拳8でのVFX開発事例
bandainamcostudios
PRO
0
280
Rust×eBPFでEDRっぽいものをつくる
sunlife3
2
870
地震情報アプリを作ってみた
yama3133
1
110
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
440
Featured
See All Featured
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
660
Embracing the Ebb and Flow
colly
88
5.1k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Utilizing Notion as your number one productivity tool
mfonobong
4
550
Balancing Empowerment & Direction
lara
6
1.2k
Thoughts on Productivity
jonyablonski
76
5.3k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
390
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
Optimising Largest Contentful Paint
csswizardry
37
3.9k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
280
Transcript
DBコネクションプール 株式会社ニューロジカ 開発部 ⾺場⼤寿 1 DBコネクションプール
• DBのコネクション数意識してる? • DB接続のコストを測る • コネクションプールの仕組み • LambdaとPrismaで起きていること • 解決策:RDS
Proxy / PgBouncer • まとめ • おまけ アジェンダ はじめに コネクションプール コネクション爆発 まとめ 解決策 2 おまけ © Neurogica Inc.
• リクエストが来るたびにDBに繋ぎ直していませんか? はじめに: DBのコネクション数意識してる? 動くけど…遅い… 3 はじめに コネクションプール コネクション爆発 まとめ
解決策 おまけ © Neurogica Inc.
DB接続とは何か ̶ コストを確認する 接続確⽴だけで 50〜200ms かかることも。 クエリ⾃体が 5ms でも、接続コストが⽀配的になる。 •
DBに「繋ぐ」とき、裏では複数のステップが⾛る TCP ハンドシェイク TLS ネゴシエーション DB認証 クエリ SYN → SYN-ACK → ACK(往復レイテンシ × 1.5) 証明書検証 + 鍵交換(数往復) ユーザー名/パスワード検証、セッション確⽴ SELECT * FROM users 4 はじめに コネクションプール コネクション爆発 まとめ 解決策 おまけ © Neurogica Inc.
プールなしだと何が起きるか 毎回フルコスト レスポンスが遅延 • リクエストごとに接続 req #1 接続 → クエリ
→ 切断 req #2 接続 → クエリ → 切断 req #3 接続 → クエリ → 切断 • 同時アクセスが増えると req × 100 DB接続 × 100 PostgreSQLのデフォルト最⼤接続数は 100 同時リクエストが増えると接続上限エラー 5 はじめに コネクションプール コネクション爆発 まとめ 解決策 おまけ © Neurogica Inc.
コネクションプールの仕組み • 接続を使い回すことで、確⽴コストを払うのは最初だけ conn #1 待機中 conn #2 待機中 conn
#3 使⽤中 conn #4 使⽤中 conn #5 待機中 リクエストが来た時 1. プールから「待機中」の接続を借りる 2. クエリを実⾏ 3. 接続をプールに返却(切断しない) プールが空のとき • 新しい接続を確⽴(上限まで) • 上限に達したらキューで待機 • タイムアウトで接続エラー 6 はじめに コネクションプール コネクション爆発 まとめ 解決策 おまけ © Neurogica Inc.
プールあり vs なし ̶ ⽐較 • プールなし • プールあり req
#1 接続 150ms → クエリ → 切断 req #2 接続 150ms → クエリ → 切断 req #3 接続 150ms → クエリ → 切断 req #1 借りる 1ms → クエリ → 切断 req #2 借りる 1ms → クエリ → 切断 req #3 借りる 1ms → クエリ → 切断 起動時 接続確⽴(150ms) 7 はじめに コネクションプール コネクション爆発 まとめ 解決策 おまけ © Neurogica Inc.
LambdaとPrismaで何が起きているか • Prismaは内部にコネクションプールを持っているが... 8 はじめに コネクションプール コネクション爆発 まとめ 解決策 おまけ
© Neurogica Inc.
コネクション爆発 • Lambdaはリクエストに応じて並列にインスタンスが増える Lamdba × N DB接続 × N ×
pool_size 接続上限エラー • 各Lambdaインスタンスが独⽴したプールを持つ • インスタンス数 × pool_size = 総接続数 • スケールアウトするほど接続が爆発する 9 はじめに コネクションプール コネクション爆発 まとめ 解決策 おまけ © Neurogica Inc.
解決策:接続を外部で管理する • Lambdaとアプリの間に外部コネクションプーラーを置く Lamdba #1 外部プーラー RDS Proxy / PgBouncer
DB RDS Proxy • RDS / Aurora に対応 • コスト:DB料⾦に追加で発⽣ Lamdba #2 PgBouncer(OSS) • PostgreSQL専⽤の軽量プーラー • コスト:インフラ費⽤のみ 10 はじめに コネクションプール コネクション爆発 まとめ 解決策 おまけ © Neurogica Inc.
RDS Proxy を使った場合 • DBとのコネクションはずっと貼っているが、DBとのやり取りはクエリ実⾏の短時間 → 集約可能 Lamdba #1 RDS
Proxy クライアント接続: 10 DB接続: 3 DB Lamdba #2 Lamdba #3 Lamdba #4 Lamdba #5 11 はじめに コネクションプール コネクション爆発 まとめ 解決策 おまけ © Neurogica Inc.
まとめ • DB接続には TCP / TLS / 認証 のコストがある •
コネクションプールは接続を 再利⽤ してコストを償却する • Lambdaでは インスタンスごとに独⽴したプール ができる → 接続爆発 • 解決策は 外部プーラー(RDS Proxy / PgBouncer) で接続を集約する • まず PrismaClientをモジュールスコープに出す だけでも効果あり • サーバインスタンス1つでいくつコネクションを貼っていて、DBの上限がいくつなのかを意 識しよう 12 はじめに コネクションプール コネクション爆発 まとめ 解決策 おまけ © Neurogica Inc.
アプリケーションサーバーのコネクション • アプリのコネクションプールが⼩さいと、アプリ側のコネクション割り当て待ちが発⽣ • アプリのコネクションプールが⼤きいと、Proxy/DB で詰まり、全体が遅くなる • ざっくり指定してピーク時相当の負荷試験でメトリクスやログを確認してチューニング ◦ ⼀般的な
Web API:5〜10 ◦ 軽量なクエリメイン:3〜5 ◦ DB 同時クエリが多いワーカー:10〜20 13 はじめに コネクションプール コネクション爆発 まとめ 解決策 おまけ © Neurogica Inc.
Prismaのコネクション • v6だと ◦ デフォルトコネクションプール数:CPU物理コア数×2+1 ◦ プールからの接続取得タイムアウト:10秒 • v7だと ◦
デフォルトコネクションプール数:10 ◦ プールからの接続取得タイムアウト:無制限 14 はじめに コネクションプール コネクション爆発 まとめ 解決策 おまけ [1] : https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/databases-connections/connection-pool © Neurogica Inc.
Postgresのコネクション • DB接続数は多ければ速いわけではない • 接続数をリソースに従って絞った⽅が多くの場合レイテンシもスループットも良くなる • 接続ごとにプロセスが⽣成されるからコンテキストスイッチやキャッシュ、ロックによって 性能が劣化する • ベンチマークの経験則では以下が良いらしい
◦ 最適なアクティブ接続数 ≈ (core_count × 2) + effective_spindle_count ◦ スピンドルはHDDの軸を指し、SSDなら0 15 はじめに コネクションプール コネクション爆発 まとめ 解決策 おまけ [2] : https://wiki.postgresql.org/wiki/Number_Of_Database_Connections © Neurogica Inc.