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
マグロ隊長kinTV
November 15, 2024
Technology
0
93
めぐろLT#21 今年一番の仕事の成果
めぐろLT#21「今年一番の〇〇聞いてくれ」の登壇資料です。
https://meguro-lt.connpass.com/event/330012/
マグロ隊長kinTV
November 15, 2024
Tweet
Share
More Decks by マグロ隊長kinTV
See All by マグロ隊長kinTV
遊戯王GX 丸藤兄弟から学ぶ成長
maguroalternative
1
75
UDDのすすめ
maguroalternative
0
1k
LINE Works Bot入門
maguroalternative
0
70
DiscordBotをPythonからGoへリプレイスした話
maguroalternative
1
130
Golangのデータベーステストフィクスチャ作成
maguroalternative
0
340
DiscordとLINEをPython+FastAPI+Dockerで連携させる
maguroalternative
0
400
就活体験記
maguroalternative
0
150
LINEBotCourse.pdf
maguroalternative
0
240
カプコンのカンファレンスいった話
maguroalternative
0
260
Other Decks in Technology
See All in Technology
Jitera Company Deck / JP
jitera
0
250
LLMでAI-OCR、実際どうなの? / llm_ai_ocr_layerx_bet_ai_day_lt
sbrf248
0
110
Datasets for Critical Operations by Dataform
kimujun
0
120
AIに全任せしないコーディングとマネジメント思考
kikuchikakeru
0
270
Power Automate のパフォーマンス改善レシピ / Power Automate Performance Improvement Recipes
karamem0
0
270
Railsの限界を超えろ!「家族アルバム みてね」の画像・動画の大規模アップロードを支えるアーキテクチャの変遷
ojima_h
4
520
[TechNight #91] Oracle Database 最新パフォーマンス分析手法
oracle4engineer
PRO
3
150
MCPと認可まわりの話 / mcp_and_authorization
convto
2
290
With Devin -AIの自律とメンバーの自立
kotanin0
2
790
データエンジニアがクラシルでやりたいことの現在地
gappy50
3
660
Recoil脱却の現状と挑戦
kirik
3
460
SAE J1939シミュレーション環境構築
daikiokazaki
1
190
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
KATA
mclloyd
30
14k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
The World Runs on Bad Software
bkeepers
PRO
70
11k
We Have a Design System, Now What?
morganepeng
53
7.7k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.6k
How to train your dragon (web standard)
notwaldorf
96
6.1k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
110
19k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Typedesign – Prime Four
hannesfritz
42
2.7k
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のモデルの扱い⽅ちょっとわかった • モデルの事前読み込みの扱い方がイメージできていなかったた めいい例を体験できた ペアプロが⾮常にありがたかった
• チームに調査や改善手法まで手取り足取り教えていただいた 本当にありがとうございました。