質問編集履歴

5

追記

2023/08/23 04:59

投稿

mi_ho
mi_ho

スコア34

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- ### 現状・ここまでで分かったこと
1
+ ## 現状・ここまでで分かったこと
2
2
  heroku + Node.jsでWebアプリを作っています。
3
3
  データベースには、herokuのMySQLアドオン[JawsDBの無料プランkitefin shared](https://www.jawsdb.com/#:~:text=%240/mo-,Kitefin,-Shared)を利用中です。
4
4
  kitefin sharedプランには”Connections”が10までという制限があり、この”Connections”が何に当たるかわからず[こちらの質問](https://teratail.com/questions/mpxvybq6hwdxo7)をしたところ、
@@ -17,13 +17,13 @@
17
17
  - https://www.wakuwakubank.com/posts/665-node-mysql/#index_id11
18
18
  >理由の説明は省きますが、WebアプリがDBと接続するときには、DBのコネクションをコネクションプールに貯めこんで、使いまわすのが定石なのです。
19
19
 
20
- ### 質問
20
+ ## 質問
21
21
  やっていることで考えると、コネクションプールにコネクションを10個作っておいて空いているやつを使っていくのと、必要なときに毎回DB接続→切断を繰り返すのでは、前者の方がが処理負荷が抑えられるのは想像できますが、瞬間的な”Connections”の数については、どのような違いが出るのかまだわかりません。
22
- **呼び出し方が違うとはいえ、結局どちらも、その瞬間に使われている"Connections"数は同じなのでは**?という気がします。
22
+ 呼び出し方が違うとはいえ、結局どちらも、その瞬間に使われている"Connections"数は同じなのでは?という気がします。
23
23
 
24
- **"Connections”数的には両者そんなに変わらないが、コネクションプールを使う手法であれば、`connectionLimit`を設定できるから、JawsDBの”Connections”上限をより確実に回避できるので、コネクションプールを使うべき**、という考え方で合っていますでしょうか?
24
+ "Connections”数的には両者そんなに変わらないが、コネクションプールを使う手法であれば、`connectionLimit`を設定できるから、JawsDBの”Connections”上限をより確実に回避できるので、コネクションプールを使うべき、という考え方で合っていますでしょうか?
25
25
 
26
- ### 調べてわかったことを追記していきます
26
+ ## 調べてわかったことを追記していきます
27
27
  [こちらの質問](https://teratail.com/questions/311564)をみると、app.get内にデータベースへの接続&切断を書くことで、
28
28
  サーバ起動時`createConnection`→1接続だけ作られる
29
29
  サーバ終了時→停止
@@ -40,3 +40,8 @@
40
40
  >また、この値を0にすれば、自動切断自体を無効化することができます。
41
41
  10秒に何回もアクセスがあるようなアプリであれば、その10秒間では1つの接続を使いまわせるということ?
42
42
 
43
+ ーーー
44
+ [こちらの記事](https://stackoverflow.com/questions/20692989/node-mysql-where-does-connection-end-go)にて(Deepl)
45
+ > connection.end()は、MySQLへのクエリ送信を停止するとき、つまりアプリケーションが停止するときにのみ呼び出されます。すべてのクエリに同じコネクションを使用する(またはコネクションプールを使用してより効率的にする)。
46
+ app.get内にデータベースへの接続&切断を書いてサーバ起動時のみ1回接続を作り、それを使い回す(コネクションプールを使えばより効率的?)
47
+ しかし、[毎回クエリ実行の度にconnection.endしている人](https://code-database.com/knowledges/113)もいる…

4

追記

2023/08/23 04:49

投稿

mi_ho
mi_ho

スコア34

test CHANGED
File without changes
test CHANGED
@@ -29,3 +29,14 @@
29
29
  サーバ終了時→停止
30
30
  とできるようです。
31
31
  app.get内で作られた1接続を使い回すのに、コネクションプールが必要、ということ?
32
+
33
+ ーーー
34
+ [こちらの記事](https://qiita.com/sa9ra4ma/items/6d61ae046daeadde68e2)にて
35
+ コネクションプールを作ったとしても、デフォルトではコネクションは10秒しか維持されずにdisconnectionされるらしい。
36
+ > (コネクションプールをしても)デフォルトで10秒後に切断されるそうです。
37
+ > ということは10秒に1回アクセスのあるアプリでそのままプールを使っても、何の意味がないことになります。
38
+ >`idleTimeoutMillis: 600000 // 自動切断時間(ミリ秒)`
39
+ >これで1分はコネクションが保持されることになります。
40
+ >また、この値を0にすれば、自動切断自体を無効化することができます。
41
+ 10秒に何回もアクセスがあるようなアプリであれば、その10秒間では1つの接続を使いまわせるということ?
42
+

3

追記

2023/08/23 04:37

投稿

mi_ho
mi_ho

スコア34

test CHANGED
File without changes
test CHANGED
@@ -24,7 +24,8 @@
24
24
  **"Connections”数的には両者そんなに変わらないが、コネクションプールを使う手法であれば、`connectionLimit`を設定できるから、JawsDBの”Connections”上限をより確実に回避できるので、コネクションプールを使うべき**、という考え方で合っていますでしょうか?
25
25
 
26
26
  ### 調べてわかったことを追記していきます
27
- [こちらの質問](https://teratail.com/questions/311564)をみると、データベースへの接続はサーバー起動時に1接続だけ作られる、ということのようす。
27
+ [こちらの質問](https://teratail.com/questions/311564)をみると、app.get内にデータベースへの接続&切断を書くことで
28
- `mysql.createConnection`実行の度に接続ってい=1”Connections”カウントかと思っていましたが、そうではないのかもしれません。
28
+ サーバ起動時`createConnection`→1接続だけられ
29
+ サーバ終了時→停止
29
- そうする、”Connections”上限の10に達す場面って、具体的にどのようなものがあり得るんしょう?
30
+ できるようです。
30
- 1つのデータベースで10個リ?(サバ?)を運用するかでしょうか
31
+ app.get内作られた1接続を使い回すに、コネクションプールが必要、いうこと?

2

追記

2023/08/23 02:01

投稿

mi_ho
mi_ho

スコア34

test CHANGED
File without changes
test CHANGED
@@ -24,7 +24,7 @@
24
24
  **"Connections”数的には両者そんなに変わらないが、コネクションプールを使う手法であれば、`connectionLimit`を設定できるから、JawsDBの”Connections”上限をより確実に回避できるので、コネクションプールを使うべき**、という考え方で合っていますでしょうか?
25
25
 
26
26
  ### 調べてわかったことを追記していきます
27
- [こちらの質問](https://teratail.com/questions/311564)をみると、接続はサーバー起動時に1接続だけ作られる、ということのようです。
27
+ [こちらの質問](https://teratail.com/questions/311564)をみると、データベースへの接続はサーバー起動時に1接続だけ作られる、ということのようです。
28
28
  `mysql.createConnection`実行の度に接続を作っている=1”Connections”カウントかと思っていましたが、そうではないのかもしれません。
29
29
  そうすると、”Connections”上限の10に達する場面って、具体的にどのようなものがあり得るんでしょう?
30
30
  1つのデータベースで10個のアプリ?(サーバ?)を運用するときとかでしょうか?

1

追記

2023/08/23 02:00

投稿

mi_ho
mi_ho

スコア34

test CHANGED
File without changes
test CHANGED
@@ -22,3 +22,9 @@
22
22
  **呼び出し方が違うとはいえ、結局どちらも、その瞬間に使われている"Connections"数は同じなのでは**?という気がします。
23
23
 
24
24
  **"Connections”数的には両者そんなに変わらないが、コネクションプールを使う手法であれば、`connectionLimit`を設定できるから、JawsDBの”Connections”上限をより確実に回避できるので、コネクションプールを使うべき**、という考え方で合っていますでしょうか?
25
+
26
+ ### 調べてわかったことを追記していきます
27
+ [こちらの質問](https://teratail.com/questions/311564)をみると、接続はサーバー起動時に1接続だけ作られる、ということのようです。
28
+ `mysql.createConnection`実行の度に接続を作っている=1”Connections”カウントかと思っていましたが、そうではないのかもしれません。
29
+ そうすると、”Connections”上限の10に達する場面って、具体的にどのようなものがあり得るんでしょう?
30
+ 1つのデータベースで10個のアプリ?(サーバ?)を運用するときとかでしょうか?