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
44
めぐろ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
LINE Works Bot入門
maguroalternative
0
33
DiscordBotをPythonからGoへリプレイスした話
maguroalternative
0
78
Golangのデータベーステストフィクスチャ作成
maguroalternative
0
270
DiscordとLINEをPython+FastAPI+Dockerで連携させる
maguroalternative
0
330
就活体験記
maguroalternative
0
120
LINEBotCourse.pdf
maguroalternative
0
220
カプコンのカンファレンスいった話
maguroalternative
0
170
22年度新歓LT
maguroalternative
0
96
jackさん合同LT
maguroalternative
0
61
Other Decks in Technology
See All in Technology
オプトインカメラ:UWB測位を応用したオプトイン型のカメラ計測
matthewlujp
0
210
ガバナンスを支える新サービス / New Services to Support Governance
sejima1105
0
110
JVM(JavaVM)の性能分析者観点で探るInstanaの可能性
instanautsjp
0
120
ゼロから創る横断SREチーム 挑戦と進化の軌跡
rvirus0817
3
380
12 Days of OpenAIから読み解く、生成AI 2025年のトレンド
shunsukeono_am
0
360
Google Cloud で始める Cloud Run 〜AWSとの比較と実例デモで解説〜
risatube
PRO
0
120
10個のフィルタをAXI4-Streamでつなげてみた
marsee101
0
180
Storage Browser for Amazon S3
miu_crescent
1
300
TSKaigi 2024 の登壇から広がったコミュニティ活動について
tsukuha
0
170
ソフトウェア開発における「パーフェクトな意思決定」/Perfect Decision-Making in Software Development
yayoi_dd
0
630
サーバーなしでWordPress運用、できますよ。
sogaoh
PRO
0
130
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
140
Featured
See All Featured
A Tale of Four Properties
chriscoyier
157
23k
Fireside Chat
paigeccino
34
3.1k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Gamification - CAS2011
davidbonilla
80
5.1k
Scaling GitHub
holman
459
140k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Building Applications with DynamoDB
mza
91
6.1k
For a Future-Friendly Web
brad_frost
175
9.4k
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のモデルの扱い⽅ちょっとわかった • モデルの事前読み込みの扱い方がイメージできていなかったた めいい例を体験できた ペアプロが⾮常にありがたかった
• チームに調査や改善手法まで手取り足取り教えていただいた 本当にありがとうございました。