質問編集履歴

4

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

2021/05/31 05:59

投稿

dameo
dameo

スコア943

test CHANGED
File without changes
test CHANGED
@@ -252,6 +252,24 @@
252
252
 
253
253
 
254
254
 
255
+ #### 追記2
256
+
257
+
258
+
259
+ [PHP: 永続的なデータベース接続 - 手動](https://www.php.net/manual/en/features.persistent-connections.php)
260
+
261
+
262
+
263
+ 公式にもそれっぽい内容がPDOではありませんが見つかりました。
264
+
265
+ > 永続的な接続は、スクリプトの実行が終了しても閉じないリンクです。持続的接続が要求されると、PHP は同一の持続的接続 (以前から開いていたもの) がすでに存在するかどうかをチェックします。存在する場合は、それを使用します。存在しない場合は、リンクを作成します。「同一の」接続とは、同じユーザー名とパスワード (該当する場合) を使用して、同じホストに対して開かれた接続です。
266
+
267
+
268
+
269
+ 動作中の接続に対する、具体的な動きが明確ではありませんが、内容的には現象と一致する説明です。
270
+
271
+
272
+
255
273
  ### 補足情報(FW/ツールのバージョンなど)
256
274
 
257
275
 

3

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

2021/05/31 05:59

投稿

dameo
dameo

スコア943

test CHANGED
File without changes
test CHANGED
@@ -232,6 +232,26 @@
232
232
 
233
233
 
234
234
 
235
+ #### 追記
236
+
237
+
238
+
239
+ 調べているうちに、以下の記事に当たりました。
240
+
241
+
242
+
243
+ [MySQL Connection Pooling と Persistent Connections はチョット違うという話 - mita2 database life](https://mita2db.hateblo.jp/entry/2020/08/02/162024)
244
+
245
+
246
+
247
+ 私がConnection PoolingとPersistent Connectionsを混同していたのは間違いなく(Connection Poolingのみが正しいと思っていた)、PDOではPersistent Connectionsを実装したから、同じワーカーには同じConnectionが割り当てられたのだろうという仮説に辿り着きました。ちなみにこの記事だけでなく、Connection PoolingとPersistent Connectionsを比較する記事は(主に英語で)沢山見つかり、1対1対応については解釈にブレがあるものの、おおよそ似たような内容の記事でした。
248
+
249
+
250
+
251
+ 仮説が正しければ理由としては十分なので、当面「同じワーカーには同じConnectionが割り当てられる」仮説を処理系コード上で確認する作業を続けます。
252
+
253
+
254
+
235
255
  ### 補足情報(FW/ツールのバージョンなど)
236
256
 
237
257
 

2

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

2021/05/31 05:36

投稿

dameo
dameo

スコア943

test CHANGED
File without changes
test CHANGED
@@ -288,6 +288,10 @@
288
288
 
289
289
  RUN docker-php-ext-install pdo_mysql
290
290
 
291
+ RUN pecl install xdebug \
292
+
293
+ && docker-php-ext-enable xdebug
294
+
291
295
  ```
292
296
 
293
297
  php.ini

1

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

2021/05/30 22:47

投稿

dameo
dameo

スコア943

test CHANGED
File without changes
test CHANGED
@@ -228,7 +228,7 @@
228
228
 
229
229
  ```
230
230
 
231
- 1つしか接続が出来てないように見えます。ただしPHPにsleepなどを入れて、ATTR_PERSISTENT=falseの接続を見ると新規のポートが開いて、終了と同時に消えているようでした(ログは割愛)
231
+ 1つしか接続が出来てないように見えます。ただしPHPにsleepなどを入れて、ATTR_PERSISTENT=falseの接続を見ると新規のポートが開いて、終了と同時に消えているようでした(ログは割愛。ATTR_PERSISTENT=falseでは$test1, $test2には接続が1つずつ出来ており、nullセットと同時に消えていました。)
232
232
 
233
233
 
234
234
 
@@ -256,6 +256,8 @@
256
256
 
257
257
  - ./html:/var/www/html
258
258
 
259
+ - ./php.ini:/usr/local/etc/php/php.ini
260
+
259
261
 
260
262
 
261
263
  db:
@@ -287,3 +289,61 @@
287
289
  RUN docker-php-ext-install pdo_mysql
288
290
 
289
291
  ```
292
+
293
+ php.ini
294
+
295
+ ```ini
296
+
297
+ [xdebug]
298
+
299
+ xdebug.mode=debug
300
+
301
+ xdebug.start_with_request=yes
302
+
303
+ ; IDEが動いてるところのIP
304
+
305
+ xdebug.client_host=
306
+
307
+ xdebug.client_port=9003
308
+
309
+ xdebug.log=/tmp/xdebug.log
310
+
311
+ ; ビルド時に出たもの
312
+
313
+ zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20200930/xdebug.so
314
+
315
+ ```
316
+
317
+ vscodeのデバッグ設定
318
+
319
+ ```json
320
+
321
+ {
322
+
323
+ "version": "0.2.0",
324
+
325
+ "configurations": [
326
+
327
+ {
328
+
329
+ "name": "Listen for Xdebug",
330
+
331
+ "type": "php",
332
+
333
+ "request": "launch",
334
+
335
+ "port": 9003,
336
+
337
+ "pathMappings": {
338
+
339
+ "/var/www/html":"${workspaceFolder}/html"
340
+
341
+ },
342
+
343
+ }
344
+
345
+ ]
346
+
347
+ }
348
+
349
+ ```