2012-03-05 7 views
7

mysql.connect_timeoutを使用して、MySQL接続のタイムアウトをPHPから設定する特定の投稿があります。私はPHPからのこのタイムアウトがMySQLへの初期接続をタイムアウトさせるか、または特定のクエリをデータベースに有効にするかどうかを知りたいですか?PHP mysql接続のタイムアウトを設定する

私のケースは、私は一番上にMySQLへの接続を持ったページを持っていて、次に私は別のものを一つ一つ次々とMySQLに3-4のクエリを実行しています。第1および第2のクエリは、第3のクエリが20秒かかる場所を実行するのに1-2秒しかかかりません。今、3番目のクエリが20秒以上かかる場合、タイムアウトを呼び出す必要があります。ですから、この時間をPHPから設定することは、データベースへの初期接続に適用可能であるか、それ以降のすべてのクエリにも(独立して)適用可能です。後であれば、3回目のクエリで20秒後にタイムアウトに設定する方法はありますか?

答えて

4

connect_timeoutパラメータは、接続時にのみ有効です。 DBサーバーが20秒程度で到達可能かどうかを確認すると便利です。接続後、指定されたタイムアウトは無効になります。

正式なmysqlマニュアルページでは、クエリタイムアウトパラメータが見つかりません:http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.htmlだから私はこれが可能ではないと思います。

3

sigalarmはあなたの友人です。アラームを設定し、シグナルハンドラを使用してアラームを検出することができます。

http://php.net/manual/en/function.pcntl-alarm.php

+1

興味深いことに、あなたは例を挙げることができますか? – iRaS

3

はそれを参照してください。

set_time_limit(0); 
ini_set('mysql.connect_timeout','0'); 
ini_set('max_execution_time', '0'); 
+1

max_execution_timeはcpuの使用のみに影響します - データベースに問い合わせるとPHPのプロセスからCPU使用はありません – iRaS

0

あなたは子プロセスをforkしなければならないいくつかの条件が20秒以内に満たされていない場合は、親プロセスは子プロセスをkillします。

または、node.jsのように、クエリのようなIO操作の現在のスレッドをブロックしない言語を使用します。

1

を参照してください。このファイルの場所はシステムによって異なります。 UbuntuとDebianでは/etc/php5/apache2/php.iniにあります

mysql.connect_timeout = 60 /* the default value is 60 seconds */ 
+0

なぜ私は正しい答えに投票しましたか? – Kareem

関連する問題