Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
めぐろLT#21 今年一番の仕事の成果
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
マグロ隊長kinTV
November 15, 2024
Technology
130
0
Share
めぐろLT#21 今年一番の仕事の成果
めぐろLT#21「今年一番の〇〇聞いてくれ」の登壇資料です。
https://meguro-lt.connpass.com/event/330012/
マグロ隊長kinTV
November 15, 2024
More Decks by マグロ隊長kinTV
See All by マグロ隊長kinTV
感動を貰う側から与える側へ -アイドルマスターミリオンライブから学ぶCfPに挑むと言うこと-
maguroalternative
1
440
useEffectってなんで非推奨みたいなこと言われてるの?
maguroalternative
11
7.7k
React19.2のuseEffectEventを追う
maguroalternative
2
1.1k
UDDのススメ - 拡張版 -
maguroalternative
2
1.6k
遊戯王GX 丸藤兄弟から学ぶ成長
maguroalternative
1
160
UDDのすすめ
maguroalternative
0
1.4k
LINE Works Bot入門
maguroalternative
0
120
DiscordBotをPythonからGoへリプレイスした話
maguroalternative
1
220
Golangのデータベーステストフィクスチャ作成
maguroalternative
0
430
Other Decks in Technology
See All in Technology
テストコードのないプロジェクトにテストを根付かせる
tttol
1
240
関西に縁あるMicrosoft MVPsが語るCopilotの未来
kasada
0
830
ポスター発表&デモと総括 / Poster Presentations & Demonstrations and Summary
ks91
PRO
0
180
Mastering Ruby Box
tagomoris
3
100
Oracle Cloud Infrastructure:2026年5月度サービス・アップデート
oracle4engineer
PRO
1
280
Claude Codeを組織で使いこなす— サーバサイドAIエージェント運用の実践知
techtekt
PRO
0
150
Spring AI × MCP 入門〜AIエージェントへのツール公開、境界設計から始める最小構成 〜
yuyamiyamoto
0
190
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
Anthropic AIネイティブ・スタートアップ構築のプレイブック を理解する
nagatsu
0
230
Javaで学ぶSOLID原則
negima
1
250
サプライチェーンセキュリティの空白地帯 - 信頼できる”依存性”の未来を考える
rung
PRO
2
560
開発を止めない CI/CD ~CI Visibilityによる継続的最適化~
pensuke628
0
220
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
141
7.5k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Test your architecture with Archunit
thirion
1
2.3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
190
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Fireside Chat
paigeccino
42
3.9k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
160
Testing 201, or: Great Expectations
jmmastey
46
8.2k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
61
44k
Odyssey Design
rkendrick25
PRO
2
650
Transcript
1 今年一番の仕事の成果 2024/11/15 めぐろLT#21 株式会社くふうカンパニー 佐々木陽貴(マグロ)
2 ⾃⼰紹介 佐々木陽貴 (sasaki haruki / maguro) 24卒サーバーサイドエンジニア X: @sigumataityouda
GitHub: maguro-alternative 最近書く言語 Ruby,TypeScript,Go
3 ⾃⼰紹介 携わっているプロダクト 「トクバイ」 全国のスーパーやドラッグストアなどのチラ シが無料で見れるサービス サーバーは Ruby on Railsで構成
4 CSV生成バッチのパフォーマンス改善
5 CSV⽣成バッチのパフォーマンス改善 CSV⽣成バッチのパフォーマンス改善 • toB向けに提供していた商品やチラシなどのデータを提供する バッチ。 • 60~90分かかっていた処理を 14~19分ほどに短縮。
6 CSV⽣成バッチのパフォーマンス改善 背景 • 1時間に1回、FTP形式でデータ提供を行っていた。 ◦ つまり作成に 1時間以上かかってはいけない。 • 作成当初、処理時間は
15分ほどだった。 • しかし5月ごろから 50分へと増加し、ついに生成に 60分を超え 90分台に突入してしまう。 • 一旦マシンパワー増強で 50~60分に収めるが ... これやべーぞ ということで改善します
7 CSV⽣成バッチのパフォーマンス改善 調査 • 生成してた csvファイルは 5つ。 ◦ shop ◦
leaflet ◦ product ◦ product_classification ◦ product_classification_map • ログをつけて処理時間を計測。
8 CSV⽣成バッチのパフォーマンス改善 調査 • 内訳はこれぐらい。 ◦ shop 40s ◦ leaflet
2400s ◦ product 800s ◦ product_classification 20s ◦ product_classification_map 200s • チラシが一番時間がかかっている。 • 上から順番に作成しているので、並列で作れば解決するので は?
9 CSV⽣成バッチのパフォーマンス改善 調査 • だがやっぱり
10 CSV⽣成バッチのパフォーマンス改善 調査 • チラシに注目してみる ◦ shop 40s ◦ leaflet
2400s ◦ product 800s ◦ product_classification 20s ◦ product_classification_map 200s
11 CSV⽣成バッチのパフォーマンス改善 調査 • (チラシの部分で )クエリ取得に対して csvへの書き込みに時間 がかかりすぎている。 ◦ クエリ0.1秒に対し、
csv書き込みに 100秒以上(約1000倍)
12 CSV⽣成バッチのパフォーマンス改善 調査 • find_in_batchsで分けて読み込むため、クエリだったら若干時 間がかかる。 • でもcsv書き込みだけでなんでこんなに、、、?どうなってんの?
13 CSV⽣成バッチのパフォーマンス改善 調査 • 画像urlの書き込みで N+1が発生。
14 CSV⽣成バッチのパフォーマンス改善 調査 • 画像urlの書き込みで N+1が発生。 ◦ 画像urlの書き込みの際、事前読み込みに含まれていない モデルがあった。 ◦
find_in_batchsのバッチサイズごとにクエリが発行。 ▪ csvファイルを 1回生成するのに約 4万回ほどクエリ叩か れてた。 ◦ チラシのモデルに上記のモデルを追加して対応。
15 CSV⽣成バッチのパフォーマンス改善 調査 • 画像urlの書き込みで N+1が発生 ◦ 結果 チラシcsvの作成で約 6割の時間短縮
(約40分→約16分) 全体で約3割の時間短縮
16 CSV⽣成バッチのパフォーマンス改善 調査 • 目標の1時間以内に収めることには成功。 まだチラシcsvの最 適化は終了してな いぜ!!
17 CSV⽣成バッチのパフォーマンス改善 調査 • find_in_batchsでメモリの使用を抑えて csvへ書き込みしてい た。 ◦ 直接の原因ではなかったものの、一度に読み取る数を増や せばもっと改善するのでは?
◦ バッチサイズを 5倍にして試す。
18 CSV⽣成バッチのパフォーマンス改善 調査 • 結果 ◦ 約6割の時間短縮 (約16分→約6分) 全体はついに 20分台へ
19 CSV⽣成バッチのパフォーマンス改善 調査 • もうこれで良くない?でも ...
20 CSV⽣成バッチのパフォーマンス改善 調査 • 商品に注目 ◦ shop 40s ◦ leaflet
2400s → 385s ◦ product 800s ◦ product_classification 20s ◦ product_classification_map 200s
21 CSV⽣成バッチのパフォーマンス改善 調査 • クエリに対して書き込みに時間がかかりすぎている。 (クエリに対 して約2~3倍) • またN+1…?
22 CSV⽣成バッチのパフォーマンス改善 調査 • 結果
23 CSV⽣成バッチのパフォーマンス改善 調査 • というのも ◦ N+1は発生していない。 (クエリも最適化されている。 ) ◦
商品のcsvの書き込み量がただ多いだけ。 (多い時1つのク エリに対し 4万行) 容量なんと 900MB
24 CSV⽣成バッチのパフォーマンス改善 調査 • これ以上クエリの最適化は望めなさそう。 ◦ なので各処理を並列化させて終了。 ◦ 約28分→約18分に短縮!
25 感想 N+1怖い • 下手をすると業務に支障を与えることもある Railsのモデルの扱い⽅ちょっとわかった • モデルの事前読み込みの扱い方がイメージできていなかったた めいい例を体験できた ペアプロが⾮常にありがたかった
• チームに調査や改善手法まで手取り足取り教えていただいた 本当にありがとうございました。