2017-07-21 16 views
-1

私は彗星スタイルプログラミングでチャットシステムを準備しています。これは60秒間の遅延(スリープ)ページで、私はこのループでmysqlクエリを使用し、およそmysqlに245.000クエリを送ります。 MySQLの状況は以下のようなものです:Mysql接続が多すぎます

Aborted_connects - 179391 
Connections - 15673040 
Max_used_connections - 59 
Threads_connected - 6 

それが接続]タブを15百万円でありますが、私はそれらを殺すことができない問題がある可能性があります。 の末尾にmysql_closeを追加してこの問題を解決できますか?

set_time_limit(60); 
mysql_connect("..."); 
while(true){ 
    usleep(60000); 
    clearstatcache(); 
    mysql_query("..."); 
    mysql_close();//<= this one 
} 
+0

それはとても、コードの一部が失敗して指定してください、あなたはこのコードでは、単一の時間を接続している...非常に奇妙です。 –

+0

いいえ、このコードはwhileループが60秒でmysqlを245.000回実行します –

答えて

1

いくつかあります。

  1. あなたのコードはどうにかしてmysqlの方法に多すぎます。コードをデバッグします。
  2. 接続をプールしてみてください。このConnection pooling in PHP
+0

私のコードに問題はありますか? –

+0

mysql接続を閉じる必要はありません。何度も同じ接続を使用することができます。毎回mysqlに接続する必要はありません。残念ながら、MySQLのプールはPHPで直接利用できません – kawadhiya21

+0

しばらくしてからmysql_closeを使用していないうちに、 'max_user_connections to many'というエラーが出て、mysqlを停止し、" mysql_closeを追加してこの問題を解決できますか? 'while()'の終わりに? " –

1

はあなたのコードとあなたの問題を見て読んで、我々は考慮に入れると接続クエリを区別すべきです。

真のループ中の接続を閉じるのは無駄です。それはエラーです。

あなたのコードは次のようなものでなければなりません

mysql_connect("..."); 
while(true){ 
    //do stuff like: 
    mysql_query("..."); 
} 
//in case of we exit while true... 
mysql_close();//<= this one 

私たちがにmysql_closeマニュアルを読めば、私たちはこの見つけることができます:にmysql_closeを使用して

を()非として、通常は必要ありません永続的なオープン のリンクは、スクリプトの実行終了時に自動的に閉じられます。

ここでは、mysql_connectionをいつ終了するか考慮しないでください。接続がどのように作成されているのか、どこでどこに接続されているのかを見てください

あなたのMySQLをチェックしてdebbugすることをお勧めします。次のコマンドを使用できます。

show status where `variable_name` = 'Threads_connected'; 

これで、現在の接続を確認できます。また、あなたが確認することができます:

show processlist; 

あなたはすべてのプロセスリストが表示されます。

たぶんそれで、我々は、デバッグを開始し、問題を見つけることができます:)

関連する問題