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
21
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
時系列基盤モデルは作れるのか? Can We Build a Foundation Model for Time Series?
neurogica
0
80
双曲空間と機械学習 〜 階層性を活かした学習〜 Hyperbolic Space and Machine Learning ~ Learning that Leverages Hierarchical Structure ~
neurogica
0
30
PENGUIN: General Vital Sign Reconstruction from PPG with Flow Matching State Space Models | ICASSP 2026
neurogica
0
43
DecompSSM: A Decomposition-based State Space Model for Multivariate Time-Series Forecasting | ICASSP 2026
neurogica
0
62
AIは公平な評価, 決断を行えるか? 〜 LLM-as-a-Judgeの限界と意思決定バイアス 〜 Can AI Make Fair Evaluations and Decisions?
neurogica
0
50
最新の物体検出モデルに関するサーベイ A Survey of the Latest Object Detection Models
neurogica
0
75
強化学習はLLMの能力に何をもたらしたのか What has reinforcement learning added to LLM capabilities?
neurogica
0
41
生成モデルを用いた意味論的に自然な画像編集 Semantically coherent image editing with generative models
neurogica
0
27
複雑系科学を知ろう Introduction to Complex Systems
neurogica
0
41
Other Decks in Technology
See All in Technology
ポストモーテム! DDoSからサイトは守れた。 でもビジネスは守れなかった。
bengo4com
0
2.2k
Foxgloveについて 実際にExtensionを開発して公開するまでの話 / About Foxglove: The Story of Developing and Releasing an Extension
ry0_ka
0
190
Claude Codeとハーネスについて考えてみる
oikon48
18
8.9k
証券システムを10年Scalaで作り続けるということ - 関数型まつり2026
krrrr38
3
780
AWS Summit の片隅で、体育座りしながらコミュニティがにぎわう理由を考えた
k_adachi_01
2
360
プロンプト_きのこカンファレンス2026_LT
yurufuwahealer
0
150
“全部コピーしない”ファイルデータの活用 : — FSx for ONTAP × S3 Tables × Icebergで作るメタデータカタログ
yoshiki0705
0
590
生成AIの活用/high_school2026
okana2ki
0
110
SRE Next 2026 何でも屋からの脱却
bto
0
190
GuardrailからGovernanceへ~AIエージェント運用の次の課題~
sbspsy
1
230
product engineering with qa
nealle
0
150
最適な自走を最小限の支援で — M&Aで拡大する組織で少人数SREが挑んだ1年 / SRE NEXT 2026
genda
0
620
Featured
See All Featured
Thoughts on Productivity
jonyablonski
76
5.2k
Designing Experiences People Love
moore
143
24k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
290
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
340
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
180
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.5k
Color Theory Basics | Prateek | Gurzu
gurzu
0
380
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
250
The SEO Collaboration Effect
kristinabergwall1
1
500
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
56k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
490
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.