2

一度に200人の同時ユーザーで約30秒間JMeterをテストしていて、MySQL接続が失敗していることに気づきました。

データベースは、インデックス作成、クエリ、およびキャッシュを使用して適切に構成されています。

これは、MySQLエンタープライズのようなものを検討する必要があるときですか?

それとも、これを改善する方法はありますか?

これは私が得ているエラーです:

Error: 2002 - Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

mysql_connect()また、 PHP関数がトリガーされるとエラーが発生します

4

3 に答える 3

2

1 つの MySQL サーバーあたりの最大接続数を増やすには、max_connections と呼ばれる MySQL グローバル vcariable を設定する必要があります。ただし、複数の接続を増やすと、CPU とメモリの消費量が増えることに注意する必要があります。

于 2012-12-13T07:00:19.373 に答える
1

MySQL で変数を設定してみてくださいmax_connections。クエリが非常に複雑でない限り、接続数が 200 であってもそれほど問題にはなりません。

SET GLOBAL max_connections=500;

それでも問題が解決しない場合は、JMeter の結果を使用して、他のクエリよりもはるかに時間がかかるクエリを特定します (ランプアップ期間やユーザーの最大数を調整して、接続が実際に失敗することなくサンプルの適切なバッチを取得します。

次に、これらのクエリをリファクタリングするか、関連データを再構築する必要があります。十分に索引付けされたシステムであっても、あまりにも多くの結合やネストされた select ステートメントを回避しようとすると、クエリのパフォーマンスを大幅に向上させることができます。MySQL のEXPLAIN機能を使用して、データベースが実際にどの程度の作業を行っているかを調べます。

于 2012-12-13T06:33:03.423 に答える
0

php.ini でチェックアウト

mysql.allow_persistent = xx
mysql.max_persistent = xx
mysql.max_links = xx
mysql.connect_timeout = xx

サービス プロバイダーが許可している場合は、ini_set() を使用してコードで設定することもできます。

http://php.net/manual/en/ini.list.phpを参照してください

于 2012-12-13T06:53:49.540 に答える