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

フォームがある Web ページに移動すると、フォームに記入してこのテーブルに挿入します。初回はそこそこの速度。2 回目は、ページが完了するまでに数十秒かかり、ホスティング サーバーのメモリ ログなどを確認すると、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

squeryメソッド:

関数squery($ query)

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

持っている必要があります:

return $result;

最後に。

于 2013-02-27T16:39:27.617 に答える