質問するログイン新規登録

質問編集履歴

4

PHP: 永続的なデータベース接続 - 手動

2021/05/31 05:59

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -125,6 +125,15 @@
125
125
 
126
126
  仮説が正しければ理由としては十分なので、当面「同じワーカーには同じConnectionが割り当てられる」仮説を処理系コード上で確認する作業を続けます。
127
127
 
128
+ #### 追記2
129
+
130
+ [PHP: 永続的なデータベース接続 - 手動](https://www.php.net/manual/en/features.persistent-connections.php)
131
+
132
+ 公式にもそれっぽい内容がPDOではありませんが見つかりました。
133
+ > 永続的な接続は、スクリプトの実行が終了しても閉じないリンクです。持続的接続が要求されると、PHP は同一の持続的接続 (以前から開いていたもの) がすでに存在するかどうかをチェックします。存在する場合は、それを使用します。存在しない場合は、リンクを作成します。「同一の」接続とは、同じユーザー名とパスワード (該当する場合) を使用して、同じホストに対して開かれた接続です。
134
+
135
+ 動作中の接続に対する、具体的な動きが明確ではありませんが、内容的には現象と一致する説明です。
136
+
128
137
  ### 補足情報(FW/ツールのバージョンなど)
129
138
 
130
139
  以下の環境(docker-compose)で確認しています。

3

Connection Pooling と Persistent Connections はチョット違う

2021/05/31 05:59

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -115,6 +115,16 @@
115
115
  ```
116
116
  1つしか接続が出来てないように見えます。ただしPHPにsleepなどを入れて、ATTR_PERSISTENT=falseの接続を見ると新規のポートが開いて、終了と同時に消えているようでした(ログは割愛。ATTR_PERSISTENT=falseでは$test1, $test2には接続が1つずつ出来ており、nullセットと同時に消えていました。)
117
117
 
118
+ #### 追記
119
+
120
+ 調べているうちに、以下の記事に当たりました。
121
+
122
+ [MySQL Connection Pooling と Persistent Connections はチョット違うという話 - mita2 database life](https://mita2db.hateblo.jp/entry/2020/08/02/162024)
123
+
124
+ 私がConnection PoolingとPersistent Connectionsを混同していたのは間違いなく(Connection Poolingのみが正しいと思っていた)、PDOではPersistent Connectionsを実装したから、同じワーカーには同じConnectionが割り当てられたのだろうという仮説に辿り着きました。ちなみにこの記事だけでなく、Connection PoolingとPersistent Connectionsを比較する記事は(主に英語で)沢山見つかり、1対1対応については解釈にブレがあるものの、おおよそ似たような内容の記事でした。
125
+
126
+ 仮説が正しければ理由としては十分なので、当面「同じワーカーには同じConnectionが割り当てられる」仮説を処理系コード上で確認する作業を続けます。
127
+
118
128
  ### 補足情報(FW/ツールのバージョンなど)
119
129
 
120
130
  以下の環境(docker-compose)で確認しています。

2

前回変更時Dockerfileの修正を忘れたので修正

2021/05/31 05:36

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -143,6 +143,8 @@
143
143
  ```Dockerfile
144
144
  FROM php:apache
145
145
  RUN docker-php-ext-install pdo_mysql
146
+ RUN pecl install xdebug \
147
+ && docker-php-ext-enable xdebug
146
148
  ```
147
149
  php.ini
148
150
  ```ini

1

デバッガで止められる環境設定にし、phpを止めながらMySQLで接続を見れるようにした。接続に関する話が伝わってなさそうなので、試したことに少し補足を追記した。

2021/05/30 22:47

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -113,7 +113,7 @@
113
113
 
114
114
  mysql>
115
115
  ```
116
- 1つしか接続が出来てないように見えます。ただしPHPにsleepなどを入れて、ATTR_PERSISTENT=falseの接続を見ると新規のポートが開いて、終了と同時に消えているようでした(ログは割愛)
116
+ 1つしか接続が出来てないように見えます。ただしPHPにsleepなどを入れて、ATTR_PERSISTENT=falseの接続を見ると新規のポートが開いて、終了と同時に消えているようでした(ログは割愛。ATTR_PERSISTENT=falseでは$test1, $test2には接続が1つずつ出来ており、nullセットと同時に消えていました。)
117
117
 
118
118
  ### 補足情報(FW/ツールのバージョンなど)
119
119
 
@@ -127,6 +127,7 @@
127
127
  - 80:80
128
128
  volumes:
129
129
  - ./html:/var/www/html
130
+ - ./php.ini:/usr/local/etc/php/php.ini
130
131
 
131
132
  db:
132
133
  image: mysql
@@ -142,4 +143,33 @@
142
143
  ```Dockerfile
143
144
  FROM php:apache
144
145
  RUN docker-php-ext-install pdo_mysql
146
+ ```
147
+ php.ini
148
+ ```ini
149
+ [xdebug]
150
+ xdebug.mode=debug
151
+ xdebug.start_with_request=yes
152
+ ; IDEが動いてるところのIP
153
+ xdebug.client_host=
154
+ xdebug.client_port=9003
155
+ xdebug.log=/tmp/xdebug.log
156
+ ; ビルド時に出たもの
157
+ zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20200930/xdebug.so
158
+ ```
159
+ vscodeのデバッグ設定
160
+ ```json
161
+ {
162
+ "version": "0.2.0",
163
+ "configurations": [
164
+ {
165
+ "name": "Listen for Xdebug",
166
+ "type": "php",
167
+ "request": "launch",
168
+ "port": 9003,
169
+ "pathMappings": {
170
+ "/var/www/html":"${workspaceFolder}/html"
171
+ },
172
+ }
173
+ ]
174
+ }
145
175
  ```