我有一些 PHP mysql 代码可以插入到表中(如下所示)。在我家里的盒子上,它似乎运行良好,但在我托管的生产服务器上,我在运行和减速时获得了令人难以置信的内存。
Column Type Null Default Comments
uid int(1) No
CUID int(11) No
AUID int(11) No
user varchar(10) No
position varchar(15) No
User Added By varchar(10) No
Added On datetime No Indexes
Keyname Type Unique Packed Column Cardinality Collation Null Comment
PRIMARY BTREE Yes No uid 17196 A No
AUID BTREE No No AUID 9 A No
user BTREE No No user 150 A No
CUID BTREE No No CUID 3439 A No
Space usage:
Data 794,776 B
Index 605,184 B
Total 1,367 KiB
Row Statistics:
Format dynamic
Rows 17,196
Row length ø 46
Row size ø 81 B
Next autoindex 27,104
当我转到表单所在的网页时,我填写表单并插入到此表中。第一次速度是合理的。第二次页面需要 10 秒才能完成,当我检查托管服务器上的内存日志等时,RAM 达到了所有限制。
From ▴ To aCPU mCpu aEP mEP lEP aMEM mMEM lMEM MemF MepF
02-27 10:08 02-27 10:09 12 62 1 3 20 359.1M 4.0G 4.0G 1 0
02-27 10:07 02-27 10:08 0 0 0 0 20 4.1M 4.1M 4.0G 0 0
02-27 10:06 02-27 10:07 0 0 0 0 20 4.1M 4.1M 4.0G 0 0
02-27 10:05 02-27 10:06 0 0 0 0 20 4.1M 4.1M 4.0G 0 0
02-27 10:04 02-27 10:05 25 62 1 4 20 22.5M 59.8M 4.0G 0 0
02-27 10:00 02-27 10:05 0 0 0 2 20 4.6M 22.7M 4.0G 0 0
02-27 09:00 02-27 10:00 0 75 0 4 20 5.8M 452.7M 4.0G 0 0
02-27 08:00 02-27 09:00 0 0 0 1 20 284K 18.1M 4.0G 0 0
注意第一行中的 4.0G。
我真的很想知道这可能是什么。托管地点使用的是 suPHP,我听说这里面曾经有过错误(但那是几年前的事了)。
也许这是不现实的,但是在这个表中进行一次插入(我认为这是相对较小的)不应该导致整个地方的内存问题。这是插入语句:
mysql_query('INSERT INTO call_member SET user="'.$user.'", position="'.$position.'", CUID="'.$CUID.'", AUID="'.$apparatus.'", `LOSAP Added By`="'.$losap_added_by.'", `Added On`=NOW()');
现在,我知道我需要切换到 mysqli。那是在短期计划中。
什么会杀死服务器?我与托管公司合作,他们的服务器看起来不错。
我不完全确定这会导致内存问题,但每次运行这段代码时都会发生这种情况。所以,我相信这是原因。任何想法将不胜感激。
[添加更多代码]
$query = 'SELECT USER FROM member WHERE USER = "'.strtolower($user).'"';
$ck = squery( $query );
$num_entries = mysql_num_rows( $ck );
$row_person = mysql_fetch_assoc($ck);
$query = 'SELECT USER FROM call_member WHERE CUID='.$_REQUEST['CUID'].' AND USER = "'.strtolower($user).'" LIMIT 1';
$ck = squery( $query );
if( $num_entries == 1 && mysql_num_rows($ck) == 0 )
{
if( $num_entries == 1 )
{
$query = 'INSERT INTO call_member SET LOSAP="'.$row_person['LOSAP'].'", ccnumber ="' . $ccnumber . '", position="'.$position.'", CUID="'.$CUID.'", apparatus="'.$apparatus .'", `LOSAP Added By`="'.$user_added_by.'", `Added On`=NOW()';
$result = squery( $query );
}
else
{
print '<div>Error: Could not find a user number or unique person for "'.$user.'" or the person is not a current member.</div>';
}
}
我在包含函数中定义了一个函数 squery:
function squery( $query )
{
$result = mysql_query( $query );
print mysql_error();
return $result;
}