LoginSignup
21
18

More than 5 years have passed since last update.

Unicornにおける DB connection poolの設定

Last updated at Posted at 2016-01-06

tl;dr

今まで、railsにおいて、mysqlのconnection pool数は、
unicorn worker数 +1(console用) としてたけど、実際のところは1~2が良さそう.
理由は、poolingはprocess毎に行われるため.

※ 間違ってたら、指摘して頂ければ泣いて喜びます!

DB connecitonって?

アプリケーションとMySQLをつなぐ、SQL実行のための通信路

  • アプリケーションからMySQLへの接続要求
  • 接続要求に含まれる、パスワード・ユーザー名を元に、サーバープロセスを作成
  • サーバープロセスが、アプリケーションとの通信を行う

このサーバープロセスと、アプリケーション間の通信路を、コネクションという.
1 サーバープロセスの生成には、大体 0.05秒くらいの時間がかかるとのこと.

connection poolingとは

DBとのconnectionを確立したオブジェクトを、使い回す手法のこと.
使い回すことによって、DB接続や、オブジェクト生成のオーバーヘッドを削減する.
それにより、web/dbの負荷を両方を下げる.
なお pooling の設定は、マルチプロセスサーバーと、
マルチスレッドサーバーでそれぞれ異なるため注意すること.

rails/unicornにおけるコネクションプールの設定

unicornの各プロセスは、それぞれ異なるコネクションを必要とする.
コネクションオブジェクトは、unicorn processのfork時に
それぞれのprocess毎に準備されるが、実際に接続されるのはqueryの実行時となる.

pool数を2、unicornのworker数を3としたとき、作られるコネクションの数は最大6となる.
なお、通常の利用であれば、1processで必要とされるコネクションの数は1である.
(thread等を利用していない場合を除く)
よって、ゾンビコネクションを作らないためにも、1~2のコネクション数が推奨される.

参考文献

https://devcenter.heroku.com/articles/concurrency-and-database-connections
http://www.oracle.com/technetwork/jp/articles/chapter5-1-101584-ja.htmle

21
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
18