0
Help us understand the problem. What are the problem?

posted at

updated at

【AWS RDS】mysql, auroraのCPU負荷を減らす。

Amazon RDS「Performance Insights」を有効化して、CPU負荷の高いSQLを特定する。

CPU負荷の高いSQLをexplainで分析する。

MySQL Workbenchの「Visual Explain」機能で、explainの結果を図で表示する。

  • explain によるSQLの分析結果をそのまま文字で見ても、どこに問題があるのか理解しづらいです。
  • MySQL Workbenchの「Visual Explain」機能を利用すれば、SQLのどこに負荷がかかっているか、indexが利用されていないか図で表示されます。

7.5 Tutorial: Using Explain to Improve Query Performance
MySQL Workbench: VISUAL EXPLAIN でインデックスの挙動を確認する

exlainの結果、見つかった問題の対応

個人的によく見る問題と解決策を紹介します。

レコード数が多いテーブルを全件取得しているような場合

  • 本当に最新かつ全件のレコードを取得する必要があるのか検討します。
    • 一部のレコードだけを取得するのでは問題があるか
    • 最新のレコードを取得する必要があるか。
      • 30分に1回取得してキャッシュに保持しているレコードを利用するようなことはできないか。

indexが利用されていない場合

テーブルにindexを設定します。

indexは期待通りに利用されているが、レコード数が多くて負荷が高くなっている場合

  • 対象のデータが頻繁に更新されるものでなければ、キャッシュに保持してMySQLからの参照する回数を減らせないか検討します。
    • インメモリデータベース(Redis, memcached等) に取得結果を保存する。
    • 各言語のキャッシュのライブラリを利用して、MySQLからの取得結果を保存する。

全文検索、位置情報による検索に時間がかかっている場合

  • Elasticsearch等の MySQLよりも、やりたい検索処理に特化しているアプリケーションを利用することを検討します。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?