普段、
ふと、
前提
django の
version pip list | grep Django ----------------------------------------- Django (1.10.7) -----------------------------------------
Database
自分が使っているのが、 postgress なので 基本的に postgress の 話 に なります。
参考
Webシステムに
おける データベース接続アーキテクチャ概論 - ゆううき ブログ
コネクションプール、DB接続に 対する 説明 django 1.7 and connection pooling to PostgreSQL? - Stack Overflow
【PostgreSQL】
psycopg2の コネクションプーリングを 使ってみよう | アシスト
psycopg2 でコネクションプーリングを 使う とうとう
人類を 幸せに 導くpgbouncer1.6が 公開された
pgbouncer についての 説明
Java の APサーバーに おける connection pooling に ついて
WAS虎の2.データベース接続構成
を
基本的に、
確か
django 本体に connection pool の 実装が あるか?
django 本体には、
CONN_MAX_AGE
と
Databases | Django documentation | Django をCONN_MAX_AGE
を
default値は、
0
で0
の場合、 各要求で connection を 取得、 要求の 終わりで、 connection を 終了する。 1
[1] 動作確認をしては ないです..ドキュメントを 読む限りは そういう 動作です。 0
以上の値を 設定すると、 設定回数は connection を 保持し、 設定回数を 超えた 場合、 または 使用できなくなった 場合、 connection を 終了する。 CONN_MAX_AGE = None
を設定すると、 無制限に connection を 保持する。 運用時は、
CONN_MAX_AGE
のconnection の 持続時間が、 DB側の アイドル状態の connection の timeout 時間 を 超えないように 設定する。 2
[2] 超えると、DB接続エラーの 後に connection が 復旧するので、 運の 悪い ユーザに 1度は DBエラーが 発生します。
django の connection プールの 選択肢
django 1.7 and connection pooling to PostgreSQL? - Stack Overflow を
django-postgrespool を
使う PgBouncer を
使う
それぞれ以下に 記載します。
[3] CONN_MAX_AGE
の
django-postgrespool を 使う
[kennethreitz/django-postgrespool: Postgres Connection Pooling for Django, powered by SQLAlchemy.
] は、
Webシステムにコネクションプーリング: ドライバ型
の
内部でSQLAlchemy
の
# DATABASE_POOL_ARGS should be something like: # {'max_overflow':10, 'pool_size':5, 'recycle':300} pool_args = getattr(settings, POOL_SETTINGS, {}) db_pool = manage(Database, **pool_args)
SQLAlchemy
のmanage
メソッドをQueuePool には
QueuePool は、
pool_size
最小 connection 数の指定 max_overflow
pool_size
を超えて 許容する connection 数の 指定
1つのAPサーバーあたり、 最大で、 pool_size + max_overflow
のコネクションを 生成 recycle
コネクションの再利用期間値、 期間を 超えると、 接続を 閉じて、 再生成する。
秒数指定-1
を指定すると、 保持し 続ける ? か、 再利用しない? timeout
コネクションの取得を 待つ 時間、 default 30秒。
use_threadlocal
、reset_on_return
、pre_ping
等 重要そうな
Java の
PgBouncer を 使う
Webシステムにコネクションプーリング: ドライバ型
の
上記記事に
2回書きますが、
psycopg2 にも コネクションプーリングの 機能が ある
【PostgreSQL】
機能的には、SQLAlchemy
のmaxconn
とmixconn
以外の
個人ブログに おいて、 connection プール を 使う 使わないの 判断
個人ブログに
Memcache で
記事は chache しているので、 ほとんどDBアクセスが 発生しない。 ログインユーザーは
cahce を 使用していないが、 cache を 使用しないのは 基本的に、 私ただ 一人。
ユーザーが
以上です。
コメント