質問編集履歴
4
PHP: 永続的なデータベース接続 - 手動
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 はチョット違う
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の修正を忘れたので修正
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で接続を見れるようにした。接続に関する話が伝わってなさそうなので、試したことに少し補足を追記した。
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
|
+
```
|