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

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

必要なコネクションプールの見積もりを誤って大惨事、というのはよくある話。

2013-09-04 09:48:46
shirou - しろう @r_rudi

3way hand shakeは結構コスト高いんすよ。あと、sliding window sizeが大きくなるまでに時間もかかるし。あ、sliding windowは最近のLinuxだと違うんだっけ。

2013-09-04 09:51:45
methane @methane

MySQL の場合新規接続コスト安いので、リクエストのたびに接続してもあんまり問題ない。その場合、スレッドキャッシュ、backlog には注意。ただ、そもそもネットワークレベルで新規接続コスト高い環境ではこの限りではない。

2013-09-04 09:52:23
V @voluntas

コネクションプール勉強会の必要性を感じた。

2013-09-04 09:52:55
Yutaka Matsubara @mopemope

接続コストと認証プロトコル気にしないんだなあ

2013-09-04 09:52:58
methane @methane

RDS で毎回接続し直すと死ぬ。

2013-09-04 09:53:01
V @voluntas

@mopemope 認証気にしない人は多そうそもそも意識してる人いなさそう。

2013-09-04 09:54:36
methane @methane

@voluntas その場合も、例えば外部API呼び出し中とかに一旦トランザクションを終了してプールに接続返せるのがプールする利点ですね。1リクエスト1トランザクションだとプールの有り無しはあまり関係なくなります。

2013-09-04 09:55:07
V @voluntas

@methane 非同期で、あとから取り出せるのは確かに。1req 1 tx はまぁ、接続コストと認証コストを気にするかどうかだよね … 。ちなみに RDS でコネクションプール使わないと死ぬ理由知りたい。

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

ブログネタっぽい感じになってきたなー

2013-09-04 09:57:03
shirou - しろう @r_rudi

プロトコルとかネットワーク構成にも依存するよね。極端な話localhostであればいろいろスキップされるからコネクションプール要らないし。

2013-09-04 09:58:39
Shinya Okano @tokibito

@voluntas リクエスト毎にopen/closeしてたらTIME_WAITが大量になってopenできなくなったことがあって、それからコネクションプールの利用を考慮しはじめました。対処として正しいのかよくわかってない。

2013-09-04 10:00:42
V @voluntas

@tokibito それはただ fd が足りないとか色々単なる設定してないだけじゃね。sysctl 周りを勉強するべし。

2013-09-04 10:02:33
このツイートは権利者によって削除されています。
V @voluntas

@tokibito あとは、reuseaddr とか使えば全然問題ない。

2013-09-04 10:03:22
Shinya Okano @tokibito

fdの上限を上げれば、さっきのは解決するのかな。DBサーバー側が負荷高いのは変わらなさそう

2013-09-04 10:05:28
methane @methane

@voluntas 多分仮想ネットワークが普通のLANほど性能出ないようで、秒間接続回数が増えてくると MySQL の性能出しきる前に syn に対する syn/ack が帰ってこなくなることが。報告して改善してもらったものの、コネクションプールを推奨されました。

2013-09-04 10:05:45
kuenishi @kuenishi

@tokibito ポート番号なので解決しない

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

@tokibito サーバの負荷はもうなんとも、言えない。落ちないサーバを作れとしか。ただ RDB は凄く難しいんだろうな、ここからは僕は詳しくないw 知りたい場合は @itawasa@kuenishi を飲みに誘うと良いw

2013-09-04 10:06:37
methane @methane

コネクションプールといった時に、永続化 (処理が終わっても次の処理で再利用する) と、シェア (並行する処理があり、処理中ずっと接続を必要とするわけで無い場合に譲りあう) は分けて考える必要がある。

2013-09-04 10:08:32
Shinya Okano @tokibito

@voluntas @kuenishi 知識足りなくてつらい、勉強します..

2013-09-04 10:08:47
V @voluntas

@methane あー、そんな悲しい話があるんだ … 。勉強になりました。ということは Riak とかでもコネクションプール使った方がいいのね … 。ありがとう。

2013-09-04 10:08:57
methane @methane

そもそもプールって「貯めておく場所」というイメージあるので、1プロセスで1接続を使うだけの場合は、プールと呼ばず永続化と呼びたい。

2013-09-04 10:09:52
V @voluntas

@tokibito あたりまえだがクライアントは 65535 コネクションまでしか張れないからな … 。サーバは超えても問題ないけど。

2013-09-04 10:10:21