20
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQLへコネクションプール有り無しでの速度差検証

Last updated at Posted at 2018-10-30

MySQL コネクションプール有り無しでの速度検証

MySQLの接続コスト低いらしいってことで確認。

DBのコネクションプール張るとDB障害の時の挙動がめんどくさかったり、DBのIPアドレスがホスト名に対してラウンドロビンで複数返ってくるようなタイプの構成(Auroraの読み込みエンドポイントみたいなヤツ ※こちらの記事参照)の時に、ちゃんと分散できてるのっていうのが気になったりで、プールの有り無しの差が無視できるレベルだったら使いたくないよねっていう話。

環境

  • MySQL 5.7
  • Python 3.6
  • DB接続に-connector-python使用

※ローカルPCのMySQLに同じPCのPythonでシーケンシャルにDB接続&切断実験。(複数同時接続してる状態にはしない)
※コネクションプールはconnector-pythonの機能利用

つかっているプログラムは こちら

条件

ローカルのMySQLに対して、特定条件でアクセスして速度を測定する。
条件は下記。

  • 1o秒間何もしない(平常時の負荷確認用)
  • 接続切断だけを5000回実行する。
  • SQL1つを5000回実行する。(都度接続)
  • SQL1つを5000回実行する@コネクションプール使用。(接続自体は1回)

※SQL1つ実行毎にリクエスト1回分と見立てるとして(都度、プール共に)

計測内容

  • 実行時間(s)
  • 実行時間/5000回(ms)
  • CPU負荷(%)

結果

10秒間何もしない(平常時の負荷確認用)

実行時間(s): 10.03, 実行時間/5000(ms): - ※, cpu_average: 7.4%
※何もしないで10秒立つのを待ってるだkで、ここでは無意味な数値なので値無し。

接続切断だけを5000回実行する。

実行時間(s): 13.06, 実行時間/5000(ms): 2.6112, cpu_average: 40.1%

SQL1つを5000回実行する。(都度接続)

実行時間(s): 14.98, 実行時間/5000(ms): 2.9962, cpu_average: 44.7%

SQL1つを5000回実行する@コネクションプール使用。(接続自体は1回)

実行時間(s): 5.46, 実行時間/5000(ms): 1.0926, cpu_average: 42.7%

総評

5000回の接続&切断(プール時はプール取得&返却)の1回をリクエスト1回分のDB接続コストって考えると、1リクエストでプール有り無しでの差は 2ms しかないことになる。
影響が大きいと見るか小さい見るかは案件次第。構成かえると結果が変わる可能性もあるけど、2ms だったらプール無くてもいいかな、、っていう感じしますね。。

備考

Auroraも一緒だと思うけどいつかやりたい。

20
15
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
20
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?