0

我有一些 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;
}
4

1 回答 1

0

你的查询方法:

函数查询($查询)

{
    $result = mysql_query( $query );
    print mysql_error();
}

应该有一个:

return $result;

在最后。

于 2013-02-27T16:39:27.617 回答