3

txtファイルを解析してデータをMysqlテーブルに書き込むphpファイルがあります。xmlファイルは非常に大きく、600万行を超えています。私は自宅のコンピューターでこれを行いましたが、プロセス全体で約6時間かかりました。今、私は強化された専用サーバー(32GB RAM)でまったく同じことをしようとしていますが、12時間後、レコードの10%をほとんど通過しませんでした。

接続されているかどうかはわかりませんが、数日前にphpmyadminを介して大きなSQLファイルをインポートしたので、必要以上に時間がかかったと思いました。

何が問題なのですか?

TIA!

4

3 に答える 3

2

プロファイリングや EXPLAIN クエリなどを行わない限り、それを言うのは困難です。

ただし、調査する価値のある可能性がいくつかあります。

  • 多くのインデックス: INSERTS を実行している場合、INSERTING 先のテーブルに関連付けられているすべてのインデックスを更新する必要があります。多数のインデックスがある場合、1 回の挿入で多数の書き込みがトリガーされる可能性があります。開始する前にインデックスを削除し、後で元に戻すことでこれを解決できます
  • MyISAM と InnoDB の比較: 前者は速度のために機能を犠牲にするため、より高速になる傾向があります。InnoDB テーブルへの書き込みは遅くなる傾向があります。注: これはアプリケーションの実行速度が遅くなる潜在的な原因であることを指摘しているだけであり、InnoDB テーブルを MyISAM に変更することはお勧めしません!
  • トランザクションなし: InnoDB を使用している場合は、トランザクション内で一括操作を実行することで高速化できます。トランザクションを使用していない場合は、実行するすべての INSERT の周りに暗黙的なトランザクションがあります。
  • PHP マシンと SQL サーバー間の接続: テストでは、おそらく PHP と SQL サーバーの両方を同じマシンで実行していました。名前付きパイプまたは TCP/IP 接続 (オーバーヘッドが大きい) を介して接続している可能性がありますが、いずれの場合も帯域幅は事実上無制限です。SQL サーバーが PHP スクリプトを実行しているマシンと同じでない場合、2 つの間の接続に存在する帯域幅に制限されます。
  • 同時ユーザー: テスト SQL データベースの任意の時点で唯一のユーザーでした。ライブ システムには、任意の数の追加ユーザーが接続され、特定の時間にクエリを実行する可能性があります。これにより、スクリプトから時間がかかり、実行時間が長くなります。他のユーザーに迷惑をかけないように、またパフォーマンスが奪われないように、大きな SQL ジョブを夜間に実行する必要があります。他にも理由はありますが、上記のものは最初に調査する価値があります。

もちろん、問題は PHP 側にある可能性があります。速度が低下している場所と理由を正確に調査するまで、問題がデータベースにあることを確認することはできません。

于 2013-02-15T07:32:17.860 に答える
0

サーバーのphpmemory_limit設定またはMysqlバッファ設定がローカルよりも低いかどうかを確認します。

于 2013-02-15T07:46:55.803 に答える
0

さて、ここでアドバイスされているように、DB設定へのすべての変更を実装することになりました:http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/

そして今、データベースは一緒に轟音を立てています! どの設定が違いを生んだのか正確にはわかりませんが、現在は機能しているので、主なものです! いずれにせよ、皆さんも私がフォローアップする素晴らしいアドバイスをくれたので、ありがとう!

于 2013-02-15T08:34:26.000 に答える