2013-04-16 143 views
18

私はAmazon EC2(シンガポール地域)に自分のWebサイトを公開しており、データストレージとしてMySQL RDSインスタンスを使用しています。パフォーマンスを除いてすべてが非常にうまく動作しています。Amazon RDS MySQLインスタンスが非常に遅いです

私のすべてのクエリ、特にselect文は、非常に遅いですね。私のローカルPCでこの問題をチェックすれば、それは非常にうまくいっています。しかし、RDSインスタンスからデータを取得しようとすると、非常に遅いです。 select文の中には、データを取得するのに2〜3秒かかるものがあります。

私はすべてのテーブルインデックスを適切に調整し、必要に応じて正規化/非正規化を行いました。私はRDSカスタムパラメータグループ(例えば、max_connection,バッファなど)に必要な設定をすべて行っています。私は何かが欠落しているかどうか分からないが、それは私のために働かなかった - パフォーマンスは向上しなかった。

誰かがこの問題を手伝ってくれますか?

+0

わかりました。あなたはどちらのインスタンスを使用していますか? –

+0

私は同じ問題があります。私はデジタルオーシャンページロード(DBに依存)を使ってRDSをセットアップしようとしましたが、平均で1.8秒から5.9秒になりました。したがって、EC2とRDSのセットアップ全体を同じ地域/クラスタと同じタイムゾーンで再作成しました。私はセットアップキャッシングもします。 –

答えて

2

RDS MySQLのパフォーマンスは、システムを想定し、次の方法で増やすことができ、より読み取った比率:

P1)は、彼らがより良いNW帯域幅が付属して、大規模なインスタンスタイプを使用してください。 AWSの例Quadrapule EXLには1000Mbpsの帯域幅があります。

P2)の使用PIOPSストレージあなたは

にMySQLのDBからP3を16キロバイトの12500のIOPSを抽出することができます)の読み取りがたくさんが行われた場合には、一つ以上のリードレプリカの読み取り性能を向上させるために追加の

P4)は、標準的な適用しますクエリをチューニングし、インデックスを適用してください。

6

RDSとEC2インスタンスを同じリージョンにはなく、同じ可用性ゾーンに置いて待ち時間を最小化することが重要です。

私はアイルランドでEC2でホストされていたAPIを持っていました。別のプロジェクト用にセットアップしたバージニア州のMySQLクラスタにデータベースを移動しましたが、すべてのSQLクエリで往復でAPIを使用できなくなりました。

+5

RDSとEC2が同じアベイラビリティゾーンにあることは、それらが同じ地域にあることを意味します。 – dvdvck

+1

あなたは今月自分の月を作成しました –

25

何らかの理由で、MySQLクエリキャッシュはRDSではデフォルトでオフになっています。私たちは今週私たちが苦労して学んだことを学びました。

これは、最初のクエリのパフォーマンスには役立ちませんが、一般的には高速化する可能性があります。再度有効にクエリキャッシュに

:表示するには、あなたのRDSインスタンス上

  1. ログイン
  2. RDSコンソールにクリックして、それが編集データベースパラメータグループ
  3. は必ず設定してください詳細
  4. ですquery_cache_sizequery_cache_type

(免責事項:私はDBAではないため、additio私はここに欠けている最終のもの)

+1

InnoDBテーブルの場合、オフにしておく必要があります。参照:https://serverfault.com/questions/604315/is-enabling-mysql-query-cache-size-innodb-lock-safe –

2

まず、私は非常にあなたがSHOW FULL PROCESSLIST

これにそれについての詳細を読むことができ

SHOW FULL PROCESSLIST

を使用してこれらのクエリに目を通すことをお勧め各クエリにかかる時間が表示されます。

次に、あなたがあなたのクエリ

0

私にいくつかの拡張が必要な​​場合、これはあなたが表示されますあなたはEXPLAIN

にそれについての詳細を読むことができ

をEXPLAIN

使用することができますまったく同じ問題だった。私は、問題はMariaDBとMySQLの両方がMyISAMではなくInnoDBにデフォルトであることだと思います! (InnoDBについては何も立つことはできません)。最初のテストでは、私の質問に対して15倍の改善が見られました。

0

プロファイリングを利用してクエリの所要時間を確認できます。以下のクエリを使用しますは

  • ショープロフィールが
  • これは、クエリが消費しているクエリの状態とをご紹介しますあなたの選択クエリ実行

    1. セットプロファイリング= 1
    2. をその時間。プロファイリングによって返されたすべての時間の合計がクエリの実際の実行時間より短い場合は、ネットワーク帯域幅などの他の要因が原因になる可能性があります。

    0

    私にとっては、MySQLとは関係ありませんでしたが、インスタンスタイプIはt2.mediumでした。問題は、DBの負荷が高すぎるため、CPUクレジットがなくなってしまい、最終的には、必要な場所で毎時のクレジット数がはるかに少なくなるまでバランスが崩れていたからです。ここで

    は、私はCPUクレジットの使用状況の下でRDS CloudWatchの中で見たものである:

    enter image description here

    あなたは同じ問題を抱えている場合、別のインスタンスへの切り替え時間がかかるかもしれません。ここでは、インスタンスタイプのリストは以下のとおりです。

    https://aws.amazon.com/rds/instance-types/

    は、この情報がお役に立てば幸いです。