Ok I have the code down to about the smallest I can and still show you what is happening. The include.php is simply the databsae connection details. With the data I have the query returns 53068 rows. You call the script with the argument 0, 1 or 2 to use the 3 different queries (For 2, 3 or 4 total columns returned). With 0 or 1 the script exits immedaitely after printing 'Exiting', with 2 there is an 18-20 second delay.
The columns returned are:
date: a date/time stamp
r_per_sec: A floating point numer
b_workers: An integer
I_workers: An integer
If I comment out any one of the three lines marked "*KEY LINE*" then the script exits immediately.
Code:
<?php
function my_log($message)
{
$date = date("H:i:s");
print ("$date: $message\n");
}
my_log("Script Starting");
include "include.php";
# Connect to and select database
$db = mysql_connect("$hostname", "$username", "$password");
mysql_select_db($database);
# Metrics array to replace all the code which worked out the metrics
# query variable to replace all the code which worked out the SQL
if ($argv[1] == "0")
{
$metrics[0] = array ("apollo_APACHE_external.r_per_sec");
$query = "SELECT DATE_FORMAT(apollo_APACHE_external.date,\"%d/%m/%y %H:%i\") AS mydate,apollo_APACHE_external.r_per_sec AS c0 FROM apollo_APACHE_external WHERE apollo_APACHE_external.date >= 20040101000000 AND apollo_APACHE_external.date <= 20040930230000 ORDER BY apollo_APACHE_external.date";
}
elseif ($argv[1] == "1")
{
$metrics = array ("apollo_APACHE_external.r_per_sec", "apollo_APACHE_external.b_workers");
$query = "SELECT DATE_FORMAT(apollo_APACHE_external.date,\"%d/%m/%y %H:%i\") AS mydate,apollo_APACHE_external.r_per_sec AS c0,apollo_APACHE_external.b_workers AS c1 FROM apollo_APACHE_external WHERE apollo_APACHE_external.date >= 20040101000000 AND apollo_APACHE_external.date <= 20040930230000 ORDER BY apollo_APACHE_external.date";
}
elseif ($argv[1] == "2")
{
$metrics = array ("apollo_APACHE_external.r_per_sec", "apollo_APACHE_external.b_workers", "apollo_APACHE_external.i_workers");
$query = "SELECT DATE_FORMAT(apollo_APACHE_external.date,\"%d/%m/%y %H:%i\") AS mydate,apollo_APACHE_external.r_per_sec AS c0,apollo_APACHE_external.b_workers AS c1,apollo_APACHE_external.i_workers AS c2 FROM apollo_APACHE_external WHERE apollo_APACHE_external.date >= 20040101000000 AND apollo_APACHE_external.date <= 20040930230000 ORDER BY apollo_APACHE_external.date";
}
else
{
exit;
}
my_log("executing Query");
$result = mysql_query($query);
my_log ("Number of results:" . mysql_num_rows($result));
$count=0;
my_log("Fetching Results");
while ($row = mysql_fetch_array($result))
{
# Build the x axis data
$datax[$count] = $row[mydate]; # *KEY LINE*
# Build the y axis data
for ($i=0; $i < count($metrics); $i++)
{
$datay[$i][$count] = $row["c$i"]; # *KEY LINE*
}
$count++;
}
my_log("Freeing result set");
mysql_free_result($result);
my_log("Closing DB connection");
mysql_close($db);
my_log("Done");
# First do the X axis points
$newdatax = array();
# Reassign newdatax back to datax
$datax = $newdatax; # *KEY LINE*
my_log("Exiting");
?>