2013-02-27 88 views
0

我有一些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,我听说这里曾经有过错误(但是那是几年前)。

也许这是不现实的,但是在这张表中做一个单独的插入(我认为这比较小)不应该导致所有地方的内存问题。这里是插入语句:

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; 
} 
+1

什么进程正在使用那么多的内存,mysql或apache? – Pitchinnate 2013-02-27 15:48:54

+0

昨天我在主机箱上运行“顶部”,而我正在做一些这些事情。有多个php进程正在创建,其中有几个进程是。 – brechmos 2013-02-27 15:53:24

+0

我们需要查看您的代码以回答您的问题。此外,你的字段名称不应该有空格!它会导致各种问题。下划线或连字符要好得多,我更喜欢下划线。 – Kyle 2013-02-27 15:53:26

回答

0

你squery方法:

功能squery($查询)

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

应该有:

return $result; 

最后。

+0

是的。它实际上是。复制/粘贴错过了它。 – brechmos 2013-02-27 17:11:44