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