0

MySQL を搭載した Linux マシンで 100 個の PHP スクリプトを同時に実行しています。ATTR_PERSISTENT パラメータを false に設定して PDO を使用しています。通常、プロセスはいくつかの SQL コマンドを実行し、30 秒間スリープします。

top を使用してプロセス リストを見ると、多数の mysqld プロセスがあり、それぞれがかなりの量のメモリ スペースを占有しています。

この問題は、キューや共有接続を使用するように再設計することで解決できることを理解していますが、より良いセットアップができるようになるまで一時的な修正を探しています.

このような設定を処理するための最良の救済策は何ですか? プロセスがスリープしている間に各 PDO オブジェクトを破棄して再作成する必要がありますか? PDO または MySQL のいずれかで基本的な構成オプションが欠落していますか?

4

1 に答える 1

0

PDO とスリープに関しては、接続を再利用する予定がない場合は、できるだけ早く終了してください。その理由は、それがスリープしている間 (効果的には何もない)、MySQL のワーカー スレッドがまだ存在しているからです。

休止中のプロセスを無駄にしたくない場合は、永続的な接続を使用して PHP プロセス間で共有することをお勧めします。ただし、これにより、デッドロックという新しいワームの缶が開かれます。

接続を閉じる最善の方法は、PDO オブジェクトを破棄すること$yourPDOOBject = nullです。

于 2012-11-28T09:07:41.327 に答える