php mysql插入内存问题

时间:2013-02-27 15:39:07

标签: php mysql

我有一些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,我听说曾经有过这方面的漏洞(但那是几年前发生的)。

也许这是不现实的,但是在这个表中进行一次插入(我认为这个相对较小)不应该导致整个地方出现内存问题。这是insert语句:

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>';
    }
}       

我在include函数中定义了一个函数squery:

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

1 个答案:

答案 0 :(得分:0)

你的淘气方法:

函数squery($ query)

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

应该有:

return $result;

最后。