<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AWS on Yossy's Notes</title><link>https://yoshihiroshu.com/tags/aws/</link><description>Recent content in AWS on Yossy's Notes</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Sun, 12 May 2024 12:00:00 +0900</lastBuildDate><atom:link href="https://yoshihiroshu.com/tags/aws/index.xml" rel="self" type="application/rss+xml"/><item><title>DBインスタンスを最大6台から2台に削減した話</title><link>https://yoshihiroshu.com/blog/db-instance-reduction/</link><pubDate>Sun, 12 May 2024 12:00:00 +0900</pubDate><guid>https://yoshihiroshu.com/blog/db-instance-reduction/</guid><description>&lt;div>&lt;a id="td-block-0" class="td-offset-anchor">&lt;/a>&lt;/div>
&lt;section class="row td-box td-box--white td-box--height-auto">
&lt;div class="col">
&lt;div class="container">
&lt;h2 id="自己紹介">自己紹介&lt;a class="td-heading-self-link" href="#%e8%87%aa%e5%b7%b1%e7%b4%b9%e4%bb%8b" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;p>私は、現在とあるWeb系のベンチャーでWebアプリケーションエンジニアとして開発業務に従事しています。&lt;/p>
&lt;p>今回の記事では以前勤務していた株式会社ZUUでの開発に関して投稿したいと思います。&lt;/p>
&lt;p>今回は肥大化したDBにインデックスを付与することで、DBインスタンス数を最大6台から2台までに改善することができたので説明していきたいと思います。&lt;/p>
&lt;p>&lt;strong>本記事は個人の見解です。&lt;/strong>&lt;/p>
&lt;h2 id="サービスについて">サービスについて&lt;a class="td-heading-self-link" href="#%e3%82%b5%e3%83%bc%e3%83%93%e3%82%b9%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;p>株式会社ZUUでは金融に関する記事を掲載する様々なメディアを運営しています。&lt;/p>
&lt;p>ZUU Onlineやfuelle、MoneyTimes、dメニューマネー、その他にも多数メディアを運営しております。&lt;/p>
&lt;p>一部メディアでは、ユーザー機能を提供しており、その中にお気に入りの記事をクリップする機能などがあります。&lt;/p>
&lt;h2 id="概要">概要&lt;a class="td-heading-self-link" href="#%e6%a6%82%e8%a6%81" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;p>弊社の顔でもZUU onlineは、ローンチして約○年経ち、記事数やユーザー数ともに大きく成長しました。ただその一方でパフォーマンスの劣化などが問題となりユーザビリティを下げてしまうことに課題がありました。&lt;/p>
&lt;h2 id="前提">前提&lt;a class="td-heading-self-link" href="#%e5%89%8d%e6%8f%90" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;p>使用しているDBMSはPostgreSQL12です。&lt;/p>
&lt;p>今回改善したクエリを簡単な図で説明します。&lt;/p>
&lt;p>運用しているメディアでは、ユーザーが記事をクリップする機能が提供されています。&lt;/p>
&lt;p>その一部であるユーザーごとにクリップを取得する機能がボトルネックとなっていました。&lt;/p>
&lt;p>（以下のテーブルは例です。実際のテーブルとは異なります。）&lt;/p>
&lt;pre class="mermaid">erDiagram
 articles {
 id integer pk
 title text
 content text
 }
 article_clips{
 article_id integer fk
 user_id integer fk
 }
 users{
 id integer pk
 name text
 }
 articles ||--o{ article_clips : article_id
 users ||--o{ article_clips : user_id&lt;/pre>
&lt;p>それぞれおおよそ以下のレコード数を持っています。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>テーブル名&lt;/th>
 &lt;th>レコード数&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>articles&lt;/td>
 &lt;td>120,000&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>article_clips&lt;/td>
 &lt;td>2,800,000&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>users&lt;/td>
 &lt;td>200,000&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="スロークエリの分析">スロークエリの分析&lt;a class="td-heading-self-link" href="#%e3%82%b9%e3%83%ad%e3%83%bc%e3%82%af%e3%82%a8%e3%83%aa%e3%81%ae%e5%88%86%e6%9e%90" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;p>スロークエリが判明したので、実行計画をもとに分析していきます。&lt;/p></description></item></channel></rss>