web-dev-qa-db-ja.com

AWS RDSのパフォーマンスを向上させる方法-重い読み取り書き込み更新

多くの投稿、コメント、ディスカッションを検索して読んだ後、自分の問題に固有の投稿は見つかりませんでした。

単一のRDSを持つ複数のAWS EC2デプロイメントがすべて同じ配信ゾーンus-west-2(c)にあります

インスタンスの負荷を、すぐに予想されるものの何分の1かでテストしています。私が気になる問題は、更新をプッシュしている間のパフォーマンスです。一度に1,000レコードの更新を頻繁に取得し、データを取得して比較し、必要に応じてデータを更新します。その結果、エントリごとに1つの読み取りと1つの書き込み。 1時間で100,000件の更新が届くのは珍しいことではありません。

現在、AWS t2.mediumクラスのRDSにMySQLデータベースがあり、22%のCPUと1GB未満のメモリで5つの更新プロセスを実行しています。

これらの低い数値でも、106.3Kレコードのデータベースを検索するための読み取り時間は2〜3秒かかり、書き込み時間はさらに2秒です。

これらの読み取り/書き込み時間を改善する方法についていくつかの考えが必要です。

追加情報:レプリカインスタンスも実行しています。 CMSによって駆動されるサイト(毎日100と増加中)は、コンテンツのためにレプリカインスタンスに接続します。

ありがとう!

4
Steven K7FAQ

上記のコメントを回答に変えます。

T2インスタンスは CPUの一部 -t2.microの場合は10%、t2.mediumの場合は40%のみを取得します。蓄積されたCPUクレジットを取得しますが、それらを使用すると、CPUのスロットルが発生します。また、物理マシンリソースを共有する必要があるため、ネットワークとIOパフォーマンスが低下します。

私が疑っているのは、テストでCPUクレジットが不足していて、スロットルが絞られていることです。 CloudWatchで CPUクレジットを監視 できます。これにより、私の推測が正しいかどうかがわかります。

私が正しいかどうかに関係なく、t2インスタンスは、常に作業が行われるシステムには適していません。 C4またはその他の一般的なインスタンスがおそらく最善の策です。 CloudWatchでデータベースのメモリとCPUの使用状況を監視して、必要なデータベースインスタンスのサイズを把握することができます。

5
Tim

ディスクのボトルネックであるディスクIOPSに注意してください。 RDSは、IOプロビジョニングされていない場合、リクエストを抑制します。SSDには3iops/GBが割り当てられます。したがって、SSDに100GBが割り当てられている場合、3x100 = 300 iopsブロックを最大化できます。
プロビジョニングされたSSDに支払う場合、それ以上のiopsをプロビジョニングできます。

標準の(磁気)ストレージの場合、数百万iopsあたりの追加の電荷カウント、およびバーストは40〜200 iopsです。

アクティビティのRDS ioログをチェックして、より良いディスクio戦略を決定してください。詳細情報リファレンス: https://stackoverflow.com/questions/18777070/aws-rds-provisioned-iops-really-worth-it

2
mootmoot

最終的にc4.xlarge EC2を作成し、それをMariaDB 10サーバーとして動作させました。現在大量のトラフィックがあり、新しいマーケティングキャンペーンで大幅な増加が見られるため、毎月数百ドルも費やすことなくRDSに依存することはできませんでした。そして、私と同じような問題を抱えたAWS RDSに関する多くの不満を見つけました。

これで、システムは2つの更新ワーカーを同時に維持でき、訪問者はパフォーマンスを低下させることなく動的コンテンツを取得できます。

みなさんの感想やコメントありがとうございます!

  • スティーブン
0
Steven K7FAQ