4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

追記

Qiita Advent Calendar 2023にてNew Relic賞をいただくことができました!
ご選出いただいたNew Relic様、また記事を読んでくださった皆様、誠にありがとうございました🙇‍♂️
https://blog.qiita.com/adventcalendar-2023-presents-winners/

はじめに

この記事はNew Relic 使ってみた情報をシェアしよう! by New Relic Advent Calendar 2023 24日目の記事になります:christmas_tree:

今回はDatadogからNew Relicに移行後はじめて、かつ組織にSREポジションができてはじめてのパフォーマンス改善についてご紹介します。

この記事で紹介しないこと

  • 高度なパフォーマンス改善のノウハウ
  • Datadogからの移行ノウハウ

あらまし

国内最大級のファッションレンタルサービスを展開するエアークローゼットでは、サービスサイトやアプリの他に、倉庫システムなど様々なシステムを自社内製化しています。

なかでも特徴的なのが、スタイリストがオンライン上でお客様に合ったお洋服をお選びするスタイリング提供システムです。

ただ、このシステムにはパフォーマンス面の課題があり、度々スタイリストさんから「ローディングが長い」「サクサク動くようにしてほしい」といった要望を受けていました。が、優先度が上がらず着手されていませんでした。

そんな中、エアークローゼットでは2023年3月にSREポジションが誕生し、プロダクトの品質や障害対応速度の向上などに立ち向かっていました。パフォーマンスまわりの課題をCTOと棚卸する中で、このスタイリング提供システムのパフォーマンスが話題にあがったのです。

そして、Datadogから移行したばかりのNew Relicを使い、システムのパフォーマンスを改善していくことが決まりました。

やったこと

1. New Relicでパフォーマンス問題の原因を探る

まずは、パフォーマンス問題のざっくりとした原因を探ります。
New RelicのTransactionsでは、エンドポイント単位のパフォーマンスを見ることができます。ここで、問題の原因がDBにあるのか、アプリケーションの処理にあるのか、外部との通信にあるのかを確認することができます。
Breakdown table

スタイリング提供システムにおいては、ほとんどがDBの問題であることがわかりました。そこで、流れているクエリを見てみようとしたのですが...
Slow SQL traces
クエリがない...だと...?!

2. New Relicの設定でクエリ転送設定を有効化する

どうやら、導入時にクエリの転送設定をしていなかったようです。
ドキュメントを参考に、スロークエリの転送設定とTransactionにおけるクエリの転送を設定してみることにしました。

New Relicの設定ファイルでslow_sqltransaction_tracerを設定することで、簡単に有効化ができました。

newrelic.js

リリース後すぐに、以下のようにクエリを確認できるようになります。

スロークエリの一覧

クエリの詳細

3. 問題の原因を調査・対策

先ほど確認できたクエリを実際に流してみたり、EXPLAINしてみたりして調査を進めました。調査の中で、複雑なクエリや冗長なクエリによってパフォーマンスが低下しているケースはほとんどありませんでした。

お恥ずかしいことに、原因のほとんどは取得・更新のキーに使用しているカラムにIndexが貼られていなかったことでした...。

4. 対策を打つ

貼るべきIndexが貼られていなかったこともあり、改善のためのアクションはほとんどが「適切なインデックスを貼ること」でした。
1~2ヶ月を通して7カラムにIndexを貼り、都度その効果を確認していきました。

視覚的にわかりやすく、改善が目に見えてわかるのも非常にありがたいです。
Top 5 database operation

どのくらいの効果があったの?

結果的に、多くのエンドポイントにおいてパフォーマンスを改善することができました!

API 改善前 改善後 改善幅
A 4.34s  0.38s = 3.96s (91%改善)
B   3.96s 0.37s = 3.59s (90%改善)
C 10.6s 7.41s = 3.19s (30%改善)
D 4.23s 0.57s = 3.66s (86%改善)
E 4.49s 0.74s = 3.75s (83%改善)

トータルすると、選定1回あたり18.15秒のパフォーマンス改善になりました。
エアークローゼットでは年間約500,000回以上の選定が行われているため、年間にすると実に約2,520時間分の選定時間を削減することができました🎉🎉🎉

まとめ

最後までご覧いただきありがとうございました🙏

エアークローゼット Advent Calendar 2023もご覧いただけると大変嬉しく思います!
エアークローゼットはエンジニア採用活動も行っておりますので、興味のある方はぜひご覧ください!

4
2
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?