|
8 | 8 | <title>持続的データベース接続って何?</title> |
9 | 9 | <simpara> |
10 | 10 | 持続的接続は、スクリプトの実行終了時にも閉じられないリンクです。 |
11 | | - 持続的接続が要求された時、PHPは(前もってオープンされたままになって |
12 | | - いる)同じ持続的接続が既にオープンされていないかどうかを確認します。 |
13 | | - そして、存在する場合には、それを使用します。存在しない場合には、そ |
14 | | - のリンクを作成します。'同じ'接続とは、同じホスト、同じユーザー名、 |
15 | | - 同じパスワード(利用可能な場合)でオープンされた接続のことを意味しま |
16 | | - す。 |
| 11 | + 持続的接続が要求された時、 |
| 12 | + PHP は(前もってオープンされたままになっている) |
| 13 | + 同じ持続的接続が既にオープンされていないかどうかを確認します。 |
| 14 | + そして、存在する場合には、それを使用します。存在しない場合には、 |
| 15 | + そのリンクを作成します。'同じ'接続とは、同じホスト、同じユーザー名、 |
| 16 | + 同じパスワード(利用可能な場合)でオープンされた接続のことを意味します。 |
17 | 17 | </simpara> |
18 | 18 | <simpara> |
19 | 19 | 特性の接続を要求する方法はありませんし、 |
|
44 | 44 | Webサーバーを PHP と統合し、Webページを生成させる方法はふたつあります: |
45 | 45 | </simpara> |
46 | 46 | <simpara> |
47 | | - 最初は、CGI "ラッパー"としてPHPを使用する方法です。このように実行し |
48 | | - た場合、PHPインタプリタのインスタンスは、Webサーバーに(PHPページに |
49 | | - 関する)ページがリクエストされる度に生成され、破棄されます。リクエス |
50 | | - ト毎に破棄されるために、(SQLデータベースサーバーへのリンクのような) |
51 | | - 必要な全てのリソースは破棄される際にクローズされます。この場合、持 |
52 | | - 続的接続を使用することから得るものは何もありません。持続的接続は持 |
53 | | - 続しないのです。 |
| 47 | + 最初は、CGI "ラッパー"としてPHPを使用する方法です。このように実行した場合、 |
| 48 | + PHP インタプリタのインスタンスは、Webサーバーに(PHPページに関する) |
| 49 | + ページがリクエストされる度に生成され、破棄されます。 |
| 50 | + リクエスト毎に破棄されるために、(SQLデータベースサーバーへのリンクのような) |
| 51 | + 必要な全てのリソースは破棄される際にクローズされます。この場合、 |
| 52 | + 持続的接続を使用することから得るものは何もありません。 |
| 53 | + 持続的接続は持続しないのです。 |
54 | 54 | </simpara> |
55 | 55 | <simpara> |
56 | 56 | 2番目は、最も一般的ですが、PHP を PHP-FPM か、 |
57 | | - マルチプロセスWebサーバー(現在はApacheのみが含まれます) |
58 | | - のモジュールとして実行する方法です。 |
59 | | - マルチプロセスサーバーは、通常、実際にWebページを送信する複数のプロセス(子) |
60 | | - を管理するプロセス(親)を有しています。リクエストがクライアントから |
61 | | - 来ると、親プロセスは、他のクライアントにすでに送信を行っていないク |
62 | | - ライアントの一つに渡します。このため、同じクライアントが2番目のリク |
63 | | - エストをサーバーに送信した際に最初のではなく他の子プロセスにより送 |
64 | | - 信が行われる可能性があります。 |
65 | | - 持続的接続がオープンされているとき、SQL サービスにリクエストを行う |
66 | | - それぞれのページは SQL サーバーへの確立された接続を再利用することが |
67 | | - できます。 |
| 57 | + マルチプロセスWebサーバー(現在はApacheのみが含まれます)のモジュールとして実行する方法です。 |
| 58 | + マルチプロセスサーバーは、通常、 |
| 59 | + 実際にWebページを送信する複数のプロセス(子)を管理するプロセス(親)を有しています。 |
| 60 | + リクエストがクライアントから来ると、 |
| 61 | + 親プロセスは、 |
| 62 | + 他のクライアントにすでに送信を行っていないクライアントの一つに渡します。 |
| 63 | + このため、 |
| 64 | + 同じクライアントが2番目のリクエストをサーバーに送信した際に最初のではなく他の子プロセスにより送信が行われる可能性があります。 |
| 65 | + 持続的接続がオープンされているとき、 |
| 66 | + SQL サービスにリクエストを行うそれぞれのページは、 |
| 67 | + SQL サーバーへの確立された接続を再利用することができます。 |
68 | 68 | </simpara> |
69 | 69 | <note> |
70 | 70 | <para> |
|
103 | 103 | 持続的接続は、SQLサーバーへ接続するオーバーヘッドが大きい場合には有効です。 |
104 | 104 | このオーバーヘッドが実際に大きいがどうかは様々な要因に依存します。 |
105 | 105 | 例えば、データベースの種類、 |
106 | | - Webサーバーが動作するのと同じコンピューターで動作しているか、S |
107 | | - QLサーバーを動作させているマシンの負荷、等となります。 |
| 106 | + Webサーバーが動作するのと同じコンピューターで動作しているか、 |
| 107 | + SQLサーバーを動作させているマシンの負荷、等となります。 |
108 | 108 | 肝心なのは、接続のオーバーヘッドが高い場合、 |
109 | 109 | 持続的接続は著しく効果があるということです。 |
110 | | - 持続的接続は、SQLサーバーへの接続を要求するページをリクエスト毎に処理する |
111 | | - 代わりに子プロセスが動作中の間一回しかサーバーへの接続を行わないよ |
112 | | - うにします。このことは、持続的接続をオープンしたプロセス毎にサーバー |
113 | | - への持続的接続をオープンするということになります。例えば、20の異なっ |
114 | | - た子プロセスがSQLサーバーへの持続的接続を行うスクリプトを実行した場 |
115 | | - 合、各子プロセス毎にSQLサーバーへの20の異なった接続が行われます。 |
| 110 | + 持続的接続は、 |
| 111 | + SQLサーバーへの接続を要求するページをリクエスト毎に処理する代わりに、 |
| 112 | + 子プロセスが動作中の間一回しかサーバーへの接続を行わないようにします。 |
| 113 | + このことは、 |
| 114 | + 持続的接続をオープンしたプロセス毎に、 |
| 115 | + サーバーへの持続的接続をオープンするということになります。 |
| 116 | + 例えば、 |
| 117 | + 20の異なった子プロセスがSQLサーバーへの持続的接続を行うスクリプトを実行した場合、 |
| 118 | + 各子プロセス毎にSQLサーバーへの20の異なった接続が行われます。 |
116 | 119 | </simpara> |
117 | 120 | </simplesect> |
118 | 121 |
|
119 | 122 | <simplesect xml:id="persistent-connections.drawbacks.conn-limits"> |
120 | 123 | <title>ありうる欠点: 接続数の上限</title> |
121 | 124 | <simpara> |
122 | 125 | しかし、データベースへの接続数を制限して使用している場合に、 |
123 | | - 持続的な子プロセスの接続数がその数を超えるる場合は、 |
| 126 | + 持続的な子プロセスの接続数がその数を超える場合は、 |
124 | 127 | 持続的接続には気をつけたほうが良い欠点がいくつかあります。 |
125 | 128 | もしデータベースの同時接続数の制限が16だとして、 |
126 | 129 | サーバーに多くのアクセスがあったため、 |
127 | 130 | 17個の子プロセスが接続しようとするとそのうちの一つは接続に失敗します。 |
128 | | - もしスクリプトにコネクションをシャットダウンしないようなバグ |
129 | | - (例えば無限ループ)があると16程度の同時接続しか許容しないデータベース |
130 | | - はすぐにダメになってしまいます。 |
| 131 | + もしスクリプトにコネクションをシャットダウンしないようなバグ(例えば無限ループ)があると、 |
| 132 | + 16程度の同時接続しか許容しないデータベースはすぐにダメになってしまいます。 |
131 | 133 | </simpara> |
132 | 134 | <simpara> |
133 | 135 | 持続的接続は通常、特定の時点で開く接続数を増加させます。 |
|
139 | 141 | </simpara> |
140 | 142 | <simpara> |
141 | 143 | データベースサーバーが許可する最大接続数が、 |
142 | | - Webリクエストワーカーの最大数(それに cron |
143 | | - ジョブや管理接続などのその他の使用分を加えた数) |
144 | | - よりも大きいことを確認してください。 |
| 144 | + Webリクエストワーカーの最大数(それに cronジョブや、 |
| 145 | + 管理接続などのその他の使用分を加えた数)よりも大きいことを確認してください。 |
145 | 146 | </simpara> |
146 | 147 | <simpara> |
147 | 148 | 放棄された接続や、アイドル状態の接続(タイムアウト)の処理方法について、 |
|
0 commit comments