5

これは明白な質問のように思えるかもしれませんが、Windows 2008 サーバーで実行される PHP/MySQL アプリケーションがあります。サーバーには、合計で約 10 の異なるサイトが実行されています。問題のサイトの管理オプションを使用すると、管理者は (サイトを通じて) レポートを実行できます。レポートは巨大で、場合によっては約 10 分かかることがあります。これらのレポートは、データを画面に表示する巨大な mysql クエリです。これらのレポートを実行すると、すべてのユーザーにとってサイト全体が遅くなります。だから私の質問は:

  • (Web サイトの) 管理者がレポートを実行する場合に、他のユーザーがパフォーマンスの問題なくサイトにアクセスできるように、サーバー リソースを割り当てる簡単な方法はありますか?
  • レポートを実行すると、そのサイトのすべてのユーザーの Web サイトが強制終了されますが、同じサーバー上の他のサイトには影響しません。何故ですか?
  • 前述のように、レポートの生成には約 10 分かかる場合があります。この種のレポートを Web サイトで利用できるようにするのは悪い習慣ですか? これらは通常、夜間にスケジュールされたタスクによって生成されますか?

よろしくお願いします。

4

4 に答える 4

1

サーバーにかかる負荷は、おそらくアプリケーションとは何の関係もありませんが、おそらく非難しているmysqlテーブルとは関係ありません。ほとんどの人は、ダウンタイムにレポートを生成するか、mysql レプリケーションを使用して、純粋にレポート用に使用される 2 番目のデータベースを作成することで、これを回避しています。

サーバーを監視して、実際に何が起こっているかを確認することをお勧めします。Newrelic はそのプラットフォームの Windows バージョンをリリースしたばかりで、30 日間無料で試すことができると思います。

于 2012-08-30T14:01:25.990 に答える
0

ウェブサイトがブロックされるという負担を避けるために、複製された MySQL サーバーをインストールしてから、大規模な管理者クエリ (自然に SELECT のみ) を実行することを強くお勧めします! 1 秒あたりのトランザクションが多すぎない場合は、本番サーバーからリモートでデスクトップ コンピューター上でレプリカを実行することもできるため、DB のオフサイト バックアップを作成できます。

于 2012-08-30T14:02:07.143 に答える
0

フラグはありLOW_PRIORITYますが、テーブル/行のロックの問題が発生している可能性が高いため、それがプラスの効果をもたらすかどうかはわかりません. SHOW PROCESSLIST;クエリを使用すると、何が起こっているかを把握できます。

他の Web サイトが正常に動作している場合は、データベース ロックが原因である可能性がさらに高くなります (ロックが解放されるまで Web プロセスが待機する原因となります)。

最後に、大規模なレポート クエリは、夜間 (またはサーバーの負荷が最小限のときに) 実行することを常にお勧めします。読み取り複製されたスレーブを持つことも役立ちます。

于 2012-08-30T14:02:16.317 に答える
0

必要なすべてのインデックスを追加したことを 100% 確信していますか?

インデックスがない場合を除き、この種の問題が発生するには、非常に大きな Web サイトが必要です。

適切なインデックスが作成されていることを確認し、varchar の接続フィールドがないことを確認してください。非常に高速ではありません。

私は、24 時間 365 日稼働しているかなりの数の大きなテーブルと数百万のレコードを含むデータベースを持っています。

適切なインデックス作成により、多くのアクティビティと自動化されたサービスが問題なく処理されます。

于 2012-08-30T14:16:45.590 に答える