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
150
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
500
useEffectってなんで非推奨みたいなこと言われてるの?
maguroalternative
11
7.9k
React19.2のuseEffectEventを追う
maguroalternative
2
1.2k
UDDのススメ - 拡張版 -
maguroalternative
2
1.7k
遊戯王GX 丸藤兄弟から学ぶ成長
maguroalternative
1
190
UDDのすすめ
maguroalternative
0
1.5k
LINE Works Bot入門
maguroalternative
0
150
DiscordBotをPythonからGoへリプレイスした話
maguroalternative
1
220
Golangのデータベーステストフィクスチャ作成
maguroalternative
0
450
Other Decks in Technology
See All in Technology
GuardDuty 検知対応を DevOps Agent で効率化しようとしている話 / GuardDuty Investigations with DevOps Agent
masahirokawahara
1
340
Multica × 長期記憶:40個のミニプロジェクト管理
eiei114
1
210
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
280
Jetpack Compose で挑む新聞紙面UI ─ 複合ジェスチャー・ポリゴン記事領域・適応的ページ構成という3つの壁/droidkaigi2026
nikkei_engineer_recruiting
0
240
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
240
Bet AI Day 2026丨AIによって本質に戻るシステムリスク管理
layerx
PRO
0
1.3k
GoにおけるFFIのこれまでとこれから
goccy
4
1.3k
omasushiというライブラリを作った
polidog
PRO
0
150
「図書館」という名前のままでいいのか -Code4Lib JAPANカンファレンス2026 アンカンファレンス報告- / Code4Lib JAPAN Conference 2026: Unconference Report
ykiyota
0
120
2026/09/10 Spring_Bootから_Jakarta_EE_MicroProfileへの移行
megascus
0
250
Deploying a Full-Stack Bun-Native Framework on Cloudflare Workers
7nohe
0
120
Webとヘルスデータ
yukukotani
1
200
Featured
See All Featured
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
400
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
230
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
430
How GitHub (no longer) Works
holman
316
150k
Being A Developer After 40
akosma
91
590k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.7k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
560
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
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のモデルの扱い⽅ちょっとわかった • モデルの事前読み込みの扱い方がイメージできていなかったた めいい例を体験できた ペアプロが⾮常にありがたかった
• チームに調査や改善手法まで手取り足取り教えていただいた 本当にありがとうございました。