

レンタルサーバの負荷テストのため、800
PV/秒のアクセスでシミュレーションを行ったのですが、毎回ある程度秒数（30秒程度）が経ったところで、MySQL接続エラーが発生してしまいます。  
※負荷テストの実行時間を15秒程度にした場合は問題は発生せず。

アクセスしているファイルはPHPで、処理としてはPDOを使ってMySQLに接続するのみとなります。  
※SELECT文の実行はなし

接続エラーとなる原因としては、どのようなことが想定されますでしょうか？  
サーバは落ちておらず（ロードアベレージも20％程度）、MySQLのみがダウンするのですが、  
この場合、改善の見込みはありますでしょうか？  
（my.cnfの設定値の見直しが必要でしょうか？）

なお、試しにDBのみAWSのRDSに接続する設定にして、  
同じ処理を試したのですが、同じく30秒くらいでダウンしてしまいました。  
インスタンスはdb.m6g.4xlargeでしたので、恐らくスペック的には  
申し分が無いと思うのですが、レンタルサーバ側で最大実行回数の制限などが  
働いていると考えたほうが良いでしょうか？


CC BY-SA 4.0
2021-02-08T13:51:48.357
73869
2021-02-13T23:27:37.020
2021-02-08T14:00:59.890
43881
43881
question
php mysql pdo
PDO接続のみでMySQLがダウンします。


評価観点が足りていません。

  * DBアクセス実行側、DB側のプロセス実行状況
  * DBアクセス実行側のリソース状況。 （CPU メモリ）
  * DBアクセス側のコネクションプールの利用状況
  * DBリソース状況、コネクション数の情報

は最低限見ておきたいものです。シミュレーションでとおっしゃっていますが、前段にＷｅｂサーバをたててそこにＨＴＴＰ投げているのなら、そこのセッション数なども見ておかないとまったくわかりません。

エスパーで恐縮ですが、私なら以下の順で疑います。

  * 接続側のコネクションプール枯渇（セッションを解放していない）
  * 接続先のコネクション枯渇（無限にリソースないので通常上限を設けます）
  * 時点でリソース枯渇と前段のセッション制限

普通に考えて、コネクション数って **キャパシティプランニングの重要な要素**
になるぐらいリソースインパクトでかいので、どこかで必ず制限しなければなりません。なので、アプリケーション側で適切な管理（ふつうはミドルに丸投げ）しないとすぐに溢れます。これをやっていないと、さくっと受け側でも送り側でもプロセス死にそう。。ちなみに大規模なシステム程、接続数の上限を問い合わせ側のミドルで設けて、そこで待ち合わせさせるようにします。シミュレータとのことで秒800件でダイレクト接続してません？だとすればかなーーーーーーーーり厳しいと思いますけど、システム設計としてそれで大丈夫なんですか？

たとえば、PHPが動くミドルのDBのコネクションプールから接続させずにPDOに接続先直接書いている場合が該当しそうですが、そりゃあふれるよなと思うのです、そんなことはされていないでしょうが、文面だけみるとそれを想定できるので。。。


CC BY-SA 4.0
2021-02-13T23:07:13.547
73975
2021-02-13T23:27:37.020
2021-02-13T23:27:37.020
10174
10174
73869
answer