RDBMSでコネクションプールが必要な理由、わからない。

あとで読むためまとめとく。勝手にメンテしてくれると嬉しい。
68
kuenishi @kuenishi

コネクションプーリング、サイエンスになるほどの理論はなかなかないけど定番のノウハウはあって教科書にはないので難しくはないけどツラい。

2013-09-04 10:13:15
methane @methane

@voluntas AZの設計にもよるかも。RDS の話も Multi-AZ なので。

2013-09-04 10:14:32
MURAOKA Taro @kaoriya

@methane その使い分け、なんかピンと来ないな。

2013-09-04 10:14:47
methane @methane

@kaoriya あー。普通は1トランザクション=1処理なんですが、Web系ではどうしてもHTTPの1リクエストが基準になるので。

2013-09-04 10:16:37
ハイパーむとう @masa_edw

@voluntas あちこちに飛び火してしまいましたが、いろいろな要因があるんですね

2013-09-04 10:20:05
Yoshi Yamaguchi @ymotongpoo

みんながコネクションプールの話してるから、水泳したくなってきた

2013-09-04 10:21:12
MURAOKA Taro @kaoriya

@methane それはわかるんですが、コネクションプールに対して「永続化」と「シェア」という語を割り当ててどんなユースケースを定義しようとしているのかがピンとこないんです。どちらもDBとその格納データに対して使うならわかるんですが。

2013-09-04 10:21:18
V @voluntas

@masa_edw いい飛び火だと思います:-)

2013-09-04 10:21:25
ハイパーむとう @masa_edw

僕の最初の理解では、TCP/IPのセッションを張るのが遅いから必要というのは眉唾(単体でみれば、大量につなぎに行くのも待つのも、十分安いコストで可能)。サーバ側の何かしらの処理で重くなる要因があるはず。というものだったんだけど、

2013-09-04 10:24:59
Yutaka Matsubara @mopemope

コネクションプール都市伝説の話とか知らないのかあ

2013-09-04 10:26:17
ハイパーむとう @masa_edw

割と(RDBの性質上)クライアント側の都合があるらしい。また経路によってはネットワーク的な都合でレイテンシが悪くなったり接続数を減らしたくなることがある(RDSの話がでてるけどAzureでも同様に問題になる)。

2013-09-04 10:31:34
ハイパーむとう @masa_edw

サーバー側の都合はよくわからない

2013-09-04 10:31:56
ハイパーむとう @masa_edw

あとRDBMSの場合、処理の最初に繋ぎ行って最後に返す、という使い方が一般的でないという実装上の都合があるようにみえる。その方がアプリを書きやすいし、裏側で頑張ってコネクション使いまわして最適化できるからいいんだろうけど、これは必要な理由というより現状そうであるという話に見える

2013-09-04 10:38:35
Ryosuke Iwanaga @riywo

非同期なアプリで1リクエスト1接続にしちゃうと、接続一杯受け付けちゃって同じ数RDBMSにも接続張られちゃうから、プールを使ったって話は聞いたことある。

2013-09-04 10:47:35
shirou - しろう @r_rudi

あ、さっきのコネクションプールの話、「RDBMSで」だったんだ。そういう制限が付いてるとぼくのつぶやきは全然違うかも。

2013-09-04 10:51:53
Kazuho Oku @kazuho

多くのRDBMSのプロトコル設計が、接続時や切断時にリクエスト/レスポンスを投げるようになってるので、都度接続だと無駄が多いってのもあるな / “RDBMSでコネクションプールが必要な理由、わからない。 - Togetter” http://t.co/HFUj7MnQ1j

2013-09-04 10:53:06
Kazuho Oku @kazuho

C/S型のRDBMSは、元々小数のクライアントとステートフルな通信を行うために設計されてきた(ことが多い)ので、HTTPのように多数のクライアントと接続切断を繰り返しながらやる方式とはインピーダンスミスマッチがあるんだよねー

2013-09-04 10:54:42
ハイパーむとう @masa_edw

僕の理解ではネットワーク経路に問題がなくてリクエスト処理数にも余裕があるようなRESTサービスではコネクションプールを使わなくても良い(処理時間とアクセス数を元に最大コネクション数の見積もりは必要だけど)。

2013-09-04 10:55:06
V @voluntas

@kazuho の RDBS 視点からの解説が素敵

2013-09-04 10:55:33
Takayoshi Kimura @nekop

DBのコネクションプール話乗り遅れたけど接続プロトコル知ってる人既に何人か参加してるみたいだからコーヒー飲みながら鼻クソほじってて良さそう

2013-09-04 10:58:19
ハイパーむとう @masa_edw

@kazuho さんの発言が一番エッセンスが詰まってて、まとめとしてはこれだけ読んでおけばいいのではというレベル。

2013-09-04 10:58:37
🐶Kazuhiro OSAWA @Yappo

用途とRDBMSのプロダクトを明言してないから議論が発散してて参考にならない / RDBMSでコネクションプールが必要な理由、わからない。 - Togetter - http://t.co/5v09GyTVMm

2013-09-04 11:24:44
🐶Kazuhiro OSAWA @Yappo

Webアプリ MySQL に限って言えば、プロセスでコネクション張りっぱなしだとピークタイム以外の時にリソース使いすぎてて衛生的じゃ無いのと、接続コストが無視出来るレベルなのでリクエスト単位でコネクションしてる。

2013-09-04 11:27:56
🐶Kazuhiro OSAWA @Yappo

コネクション繋ぎっぱの実装だと、うっかりバグ入れこんで障害起こす問題を多々聞くので、安全なアプリケーションを作りたいなら永続性接続で作らないし、ミドルウェアでプーリングするのもシステム複雑化するだけなので手段として選択しない

2013-09-04 11:30:06
🐶Kazuhiro OSAWA @Yappo

負荷を問題にする前に適切にリソース監視をして、適切に増強していけばいいだけなので、それは理由にならない。ただし限られた予算の中でやりくりする時に必要になってくるのかなという感じですね。

2013-09-04 11:32:17