
実稼働サーバーで接続リストがどんどん増えている原因を突き止めるために、開発サーバーでテストを行っています。mysql_close() を使用して接続を閉じていないページがいくつかあるのではないかと考えています。まず、何が接続を作成しているのかを確認し、次に、接続が閉じられていることを確認する方法を確認しようとしています。
これを実現するために、接続を作成する簡単なスクリプトを作成し、その後に mysql_close() を実行して接続を閉じました。残念ながら、接続を作成していることすら確認できないため、テストは行き詰まっています。
次のコードを実行すると (mysql_close() がコメント アウトされていることに注意)、クライアント接続リストに新しい接続が表示され、wait_timeout を 20 に設定しているため 20 秒後に自動的に終了することが予想されます。ただし、接続が作成されていないようです。
<?php
$dblocation = "127.0.0.1";
$dbusername = "blah_dev";
$dbpassword = "test";
$dbname = "blah_dev";
$dbdescription = "";
$conn = mysql_connect($dblocation, $dbusername, $dbpassword) or die ("<span style='color:red'>Unable to connect! Press F5 to try again.</span>");
mysql_select_db($dbname, $conn) or die ("Unable to select database!");
$sql = "select fullname from months";
$result = mysql_query($sql);
if($row = mysql_fetch_array($result)){
echo "<table border=1>";
do{
$month = $row["fullname"];
echo "<tr><td>".$month."</td></tr>";
}while ($row = mysql_fetch_array($result));
echo "</table>";
}
//mysql_close();
?>
接続を確立していることを確認するために、簡単な SELECT ステートメントも追加しました。実際に確立されています。なぜこの接続は MySQL Workbench のクライアント接続リストに表示されないのでしょうか? また、現在のスレッドを表示するために別のツール (MySQL Diagnostic Manager) も使用していますが、そこにも表示されません。
ここで何が欠けているのでしょうか?
答え1
このコードはするクライアント接続を作成しますが、スクリプトの実行が終了するとすぐに閉じられるため、現れる接続を作成します。 :/