2
0

More than 1 year has passed since last update.

AWSにおけるDBのパフォーマンス向上について

Last updated at Posted at 2021-09-25

はじめに

AWSにはNoSQLも含めて、様々なDBサービスが展開されています。
その中でも運用していく段階で、トラフィックの増大などによって上手くDBが機能しない場合があります。(DBへの受信リクエストの急増により、WEBサイトが表示されないなど)
そのような場合にスループットやIOPSを向上させることにより以上のような問題を解決できますが、具体的にどのような対処によりパフォーマンスが向上するのか、少しまとめてみたいと思います。

そもそも

そもそもの話として、スループットならびにIOPSの詳細についてから入りたいと思います。

スループット

スループットとは、「単位時間あたりの処理量」になります。
単位時間というところがポイントで、「○○あたり」という限定された範囲内の話です。
具体的には、一定時間内でどれだけデータ量を転送できたかを表し、単位としては「bps」、「kbps」などで、よくネットワーク機器などの性能表記に書かれていることが多いです。

IOPS(Input/Output per second)

IOPSは「1秒あたりに処理できるI/O(読込・書込)アクセス数」になります。つまり、IOPSが高いと高速にデータの読み書きが可能という意味になります。
ハードディスクやSSDなどのストレージの性能指標として表されます。ちなみに、ハードディスクは物理的に1分あたりのディスクの回転数(RPM)に限界があるためIOPSが低く、SSDはIOPSが高いです。
読込性能はキャッシュレイヤの追加などにより改善されますが(キャッシュに乗る初回アクセスはIOPSの影響を受ける)、書込み処理(追加・更新・削除)はIOPSの影響を受けやすいです。

DBのパフォーマンスを向上させていくには、このIOPSとスループットを改善していく必要があります。
以下のケーススタディを考えてみました。

ケーススタディA

アクセスの増加により、データベース(例えばRDS)が受信リクエストへの対処が追いつかなくなってしまい、WEBサイトがきちんと表示されない場合を考えてみます。
この場合、受信リクエスト=つまり読み取り処理が増大したことによる障害のため、データベースの読み取りパフォーマンスを向上させる必要があります。対応としては以下が考えられると思います。

・リードレプリカを作成し、読み取りトラフィックをオフロードさせる。(→スループットの改善)
・キャッシュレイヤーを追加して、アクセスが集中しているクエリをキャッシュ処理することで、高速処理を実現し、データベース側への負荷を減少させる。(→スループットの改善)
・アタッチしているストレージのストレージタイプをIOPSの大きなものに変更することで、DB本体のI/O性能を向上させる。(→IOPSの改善)

ケーススタディB

反対に、DBに対する書込み処理の増大により、DBの書込みパフォーマンスが低下している場合はどうでしょうか。
こちらは、以下のような対応が考えられると思います。

・EBSボリュームを追加し、RAID 0構成とする。(→IOPSの改善、スループットの改善)
・高パフォーマンスを実現できるストレージボリュームタイプ(プロビジョンドIOPSなど)に変更する。(→IOPSの改善)
・インスタンスタイプを変更する(EC2などにミドルウェアをホストしている場合)。(→IOPSの改善) 

スループットとIOPSによるパフォーマンス最適化

以上のように、スループットやIOPSの改善によりパフォーマンスを向上できます。
ただ、スループットの大きいディスク(スループット最適化HDD)を選んだからといって、アプリのパフォーマンスが向上するとは限りません。例えば、ファイルサイズがあまり大きくない3~4KB程度のデータを頻繁に書込むようなケースの場合、IOPSが高くないと処理が追いつかず、結果としてパフォーマンスが低下してしまうので、スループットよりもIOPSを重視した方がパフォーマンスが上がりやすいです。
反対に、一度の書込みが数GB単位のような大きいサイズファイルのデータの場合、いくらIOPSが高くてもスループットが低いとデータ転送に時間がかかり、結果としてパフォーマンスが低下してしまうので、IOPSよりもスループットを重視した方がパフォーマンスが上がりやすいです。

まとめ

DBのパフォーマンスを向上させるには、IOPSとスループットの2つの観点から改善を行なっていく必要があることがわかりました。
ケースに合わせて、最適なストレージタイプの選択やRAID構成を組んだり、リードレプリカやキャッシュレイヤを追加したりすることによって、アプリ全体のパフォーマンスを上げていく必要がありますね。
DBRE(Database Reliability Engineering)と言われているように、DBのパフォーマンスがアプリ全体のパフォーマンスに関わってくるんだなと痛感しました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0