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
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
めぐろ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
470
useEffectってなんで非推奨みたいなこと言われてるの?
maguroalternative
11
7.8k
React19.2のuseEffectEventを追う
maguroalternative
2
1.2k
UDDのススメ - 拡張版 -
maguroalternative
2
1.7k
遊戯王GX 丸藤兄弟から学ぶ成長
maguroalternative
1
180
UDDのすすめ
maguroalternative
0
1.5k
LINE Works Bot入門
maguroalternative
0
130
DiscordBotをPythonからGoへリプレイスした話
maguroalternative
1
220
Golangのデータベーステストフィクスチャ作成
maguroalternative
0
440
Other Decks in Technology
See All in Technology
“それは自分の仕事じゃない"を越えて行け
yuukiyo
1
440
CIで使うClaude
iwatatomoya
0
290
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
4
2.3k
発表と総括 / Presentations and Summary
ks91
PRO
0
130
見守りエージェントを作ってみた(ローカルLLM + Hermes Agent)
happysamurai294
0
110
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
210
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
2
250
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.4k
人を動かすのは時間ではなく、納得感 〜新任EMが入社3ヶ月、組織を2回変えた話〜
kakehashi
PRO
3
260
そのドキュメント、自動化しませんか?
yuksew
1
250
Type-safe IaC for Dart
coborinai
0
150
SRE Next 2026 何でも屋からの脱却
bto
0
870
Featured
See All Featured
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.7k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
340
Automating Front-end Workflow
addyosmani
1370
210k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
650
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Believing is Seeing
oripsolob
1
170
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
230
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
220
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
490
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
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のモデルの扱い⽅ちょっとわかった • モデルの事前読み込みの扱い方がイメージできていなかったた めいい例を体験できた ペアプロが⾮常にありがたかった
• チームに調査や改善手法まで手取り足取り教えていただいた 本当にありがとうございました。