新卒でもできた!New Relic の言う通りにしただけで39倍早くなったIndex改善
これなに?
千株式会社システム開発部所属のkoinunopochi(社内:おかき)です。
弊社のNew Relic本番導入は10月20日で、今回のIndex改善は11月6日にリリースしました。導入から約2週間での改善事例になります。
New Relicを導入したことでいくつかポジティブな効果があったのですが、その中でもとりわけインパクトがあった改善事例をご紹介します。
なぜNew Relicを導入したのか、導入時にサービスが落ちてしまった話などは先輩が記事にしているので、そちらも参考にしていただければと思います!
導入前の世界線
私たちは「はいチーズ!システム」という保育ICTシステムを運用しています。
保育施設では登園・降園の時間帯など、決まったスパンでアクセスが集中する特性があり、次のような形になっています。

このようにアクセスが集中するタイミングでDBが高負荷になること自体は元々認識していました。
しかし、他の開発タスクに追われ、なかなか対応に時間を割けていないのが現状でした。
入れたぜNew Relic
スロークエリの発見
APMを導入したことで、スロークエリが可視化されるようになりました。

全トランザクションの中で、19.82%もの時間を占めているクエリがあることがわかります。
画面下部の Slow SQL tracesセクションから、スロークエリの詳細を確認できます。
ヒントに従って改善
スロークエリの詳細画面には、Hintが表示されていることがあります。

※当時のスクショが残っていなかったため、類似のものを掲載しています
今回のヒントでは、フルスキャンが発生しているのでIndexを貼りましょうという内容でした。
これをAIに食わせてIndex追加のマイグレーションを作成し、EXPLAINで実行計画を確認してIndexが利用されていることを確認した上で、リリースしました。
改善効果
Index追加後、該当トランザクションの処理時間が大幅に改善されました。
改善前のピーク時は44.94msだったのが、改善後の同じ時間帯で1.16msまで短縮されています。約39倍の高速化です。

ここまで劇的に改善されるケースは稀かもしれませんが、改善効果を即座に確認できるのはモチベーション維持に大事だと感じました。
また、New Relicのダッシュボード機能で改善効果を継続的にモニタリングしています。

今後は継続的なモニタリングが必要なケースも出てくると思うので、関連箇所を一目で見れるように整備していきたいです。
コスト削減
パフォーマンス改善に加えて、インフラコストも削減できました。
DB ACU使用量の変化:

必要タスク数の変化:

Index追加によりDBの負荷が下がり、必要なリソースが減少しています。

New RelicのヒントにしたがってIndexを貼っただけなのに褒められてこそばゆいです。
まとめ
New Relicを導入したことで、スロークエリの発見からヒントに従った改善、効果確認までスムーズに行うことができました。
パフォーマンスの問題を簡単にキャッチして改善まで繋げることができ、めちゃめちゃ最高です。
パフォーマンス改善は後回しにされがちですが、まずはシステムの状態を可視化するところから始めてみると良いかもしれません。
Discussion