2013-02-27 113 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