2012-04-04 4 views
0

私は内部Webアプリケーションがパフォーマンス上の問題を抱えている理由を調査する任務を負っています。MySQLのスケールアップまたはスケールアウト?

ウェブアプリケーション自体はPHPで書かれていて、Perlで書かれています。私たちは、パフォーマンスのヒットが発生していると思われるMySQLデータベースを持っています。

システムのユーザーは約400人ですが、ほとんどのユーザーは異なるタイムゾーンにまたがっています。したがって、一般には最大30人のユーザーしかオンラインにはなりません。パフォーマンスの問題は、特にデータベースが拡大し続けるにつれて、特に過去1年間で私たちに脈打ってきました。

システムは32ビットの1台のDebianサーバー(6GBのRAM、8個の2.4GHz Intel CPU搭載)で動作します。これはおそらく、仕事のために十分なものではありません。しかし、私が唯一のオンラインユーザーであっても、ページの読み込み時間はまだまだ遅くなる可能性があります。

スケールアップするかスケールアウトする必要があるかを判断しようとしています。まず、ハードウェアがその要求にどれだけうまく対処しているかを知りたいと思います。次に、スケールアウトする価値があるかどうかと、負荷のバランスをとるためにいくつかの複製スレーブを作成するかどうか。

インターネット上で利用できるツールがたくさんあります。調査するには多分多すぎます。誰でもプロファイリング/パフォーマンスモニタリングを提供できるツールをお勧めしますか?

多くのおかげで、 NS

+1

確かに、私はDebianについてほとんど知らないけど、4GB以上のRAMを利用するには64ビットOSを使ってはいけませんか? –

+0

PAE対応のカーネルであるかどうかに依存していると思います。 – nnichols

答えて

4

スローダウンはデータに関連しており、

適切に索引付けされた問合せは、データの量に応じて対数的にスケールアップする傾向があります。つまり、データを倍増すると定数Cで問合せ時間が増加し、同じCでデータが倍増し、 ...あなたがそれを知る前に膨大な量のデータを持っていますが、クエリはちょうどです。あなたのケースでは自分自身が徐々にそうではありませんでした。それはデータの量に比例していました、または悪化しました)、これはひどく最適化されたクエリの兆候かもしれません。問題でより多くの鉄を投げるそれを延期しますが、あなたが無制限の予算を持っていない限り、あなたは実際にいくつかの点で根本的な原因を解決する必要があります:

  1. 測定実際のデータのクエリのパフォーマンスが遅い識別するために、クエリ。
  2. 改善の可能性がある実行計画を確認してください。
  3. 必要に応じてindexing, clustering, coveringとその他のパフォーマンス技術について学んでください。
  4. 最後に、ステップ(1)と(2)で特定したクエリにその知識を適用します。

他に何も役立たない場合は、データモデルについて考えてください。場合によっては、「完全に」正規化されたモデルが最良のものではないため、司法の非正規化が正当化される可能性があります。

2

簡単(怠惰な)方法あなたは予算を持っている場合はそれにいくつかのより多くの鉄を投げることです。

どこでどのようにスケールするかを決める前に、より良い方法は、ボトルネックを特定することです。すべてのページの読み込みが遅いのですか?または特定のページだけ?ほんの数ページであれば、プロファイラに投資してください(xDebugとZend Debuggerの両方でプロファイリングが可能です)。また、診断を実行するためにライブシステムとできるだけ似ているテストシステムに投資します(もしそうでない場合)。

統計情報を収集することもできます。 sar(from the sysstat packageなど)のプログラムを使用してサーバーレベルで実行するか、dbレベルで実行します(遅いクエリログを実行していますか?)

+3

ええ、1人のユーザーでは速度が遅い場合、スケーリングは問題ではありません。パフォーマンスを固定しています。 – ceejayoz

+0

入力いただきありがとうございます。私たちは過去1〜2年の間にsarを使用しましたが、特にMySQLのパフォーマンスについて詳しくは言及していません。 私はいくつかのあなたの提案を調べ、あなたに連絡します。 多くのおかげで、 – nonshatter

関連する問題