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
徹底解説!Insight SQL Testingを活用したデータベース移行の実践ポイント
Search
coconala_engineer
July 11, 2024
Technology
0
260
徹底解説!Insight SQL Testingを活用したデータベース移行の実践ポイント
db tech showcase 2024の登壇資料。
https://www.db-tech-showcase.com/2024/schedule/
coconala_engineer
July 11, 2024
Tweet
Share
More Decks by coconala_engineer
See All by coconala_engineer
VPoE Meetup Vol.1 VPoEとして実践してきたことと反省点
coconala_engineer
3
270
エンジニアマネージャーになった理由を振り返ってみた
coconala_engineer
0
230
Developer Experienceを向上させる基盤づくりの取り組み事例集
coconala_engineer
0
200
Vue.jsで入力フォームにリアルタイムハイライト機能を自前実装した話
coconala_engineer
0
53
技術広報経験0のEMがエンジニアブランディングを始めてみた
coconala_engineer
2
240
オンコール運用をほんの少し効率的に行うためのTips
coconala_engineer
0
250
事業会社におけるセキュリティ・ ITガバナンス強化への道のり
coconala_engineer
0
34
人材・モチベーション・情報システムの融合とエンゲージメント
coconala_engineer
0
150
Macインスタンスを活用したアプリE2Eテストの実現
coconala_engineer
1
540
Other Decks in Technology
See All in Technology
Flutterによる 効率的なAndroid・iOS・Webアプリケーション開発の事例
recruitengineers
PRO
0
120
Lambda10周年!Lambdaは何をもたらしたか
smt7174
2
110
Python(PYNQ)がテーマのAMD主催のFPGAコンテストに参加してきた
iotengineer22
0
500
Engineer Career Talk
lycorp_recruit_jp
0
190
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.9k
Terraform Stacks入門 #HashiTalks
msato
0
360
Application Development WG Intro at AppDeveloperCon
salaboy
0
190
いざ、BSC討伐の旅
nikinusu
2
780
アジャイルチームがらしさを発揮するための目標づくり / Making the goal and enabling the team
kakehashi
3
140
Amazon CloudWatch Network Monitor のススメ
yuki_ink
1
210
Security-JAWS【第35回】勉強会クラウドにおけるマルウェアやコンテンツ改ざんへの対策
4su_para
0
180
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
9
1.1k
Featured
See All Featured
Speed Design
sergeychernyshev
25
620
The Language of Interfaces
destraynor
154
24k
Scaling GitHub
holman
458
140k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
GitHub's CSS Performance
jonrohan
1030
460k
Designing the Hi-DPI Web
ddemaree
280
34k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
16k
Visualization
eitanlees
145
15k
4 Signs Your Business is Dying
shpigford
180
21k
A better future with KSS
kneath
238
17k
Automating Front-end Workflow
addyosmani
1366
200k
Transcript
Copyright coconala Inc. All Rights Reserved. 徹底解説! Insight SQL Testingを活用した
データベース移行の実践ポイント 株式会社ココナラ 川崎 雄太・片桐 英斗 2024/07/11 db tech showcase 2024
Copyright coconala Inc. All Rights Reserved. 自己紹介(川崎 雄太) 2 川崎
雄太 Yuta Kawasaki @yuta_k0911 株式会社ココナラ システムプラットフォーム部 部長 / Head of Information SRE / 情シス / セキュリティ領域のEM SRE NEXT 2024のコアメンバー 今年の抱負:現状打破✨
Copyright coconala Inc. All Rights Reserved. 自己紹介(片桐 英斗) 3 片桐 英斗(かたぎり えいと)
システムプラットフォームグループ インフラ・SREチーム所属 2022年4月 ココナラ入社 プロダクトインフラの運用・改善をしています マイブームは家で挽きたてコーヒーを淹れる こと☕
Copyright coconala Inc. All Rights Reserved. 4 ココナラの事業内容
Copyright coconala Inc. All Rights Reserved. ココナラのエンジニア数の変遷 5 事業拡大に合わせて3年で約3倍の組織規模に成長 2020年
2023年 フェーズ 上場前 上場後 エンジニア数 20人強 70人強 リポジトリ数 45 170以上
Copyright coconala Inc. All Rights Reserved. 短期間で会社・プロダクトが成長している =「技術負債解消 < プロダクトのグ
ロース」の年月が長いです。 ※ベンチャーあるあるかも…🤔 6
Copyright coconala Inc. All Rights Reserved. もちろん(?)データベースに関する技 術課題もたくさんありました。 本セッションではココナラで実施した 打ち手とともにご紹介します😁
7
Copyright coconala Inc. All Rights Reserved. 8 Agenda ココナラで抱えていたデータベースの課題 課題にどう向き合ったか?
Insight SQL Testingの利活用 振り返り 今後の取り組み 1 2 3 4 5
Copyright coconala Inc. All Rights Reserved. ココナラで抱えていたデータベースの課題 Chapter 01 9
Copyright coconala Inc. All Rights Reserved. 「データベースの課題」といっても、 さまざまな切り口がありますよね🤔 ココナラでもたとえば、QCDの バランス確保やライフサイクルへの
追随で悩んできました😓 10
Copyright coconala Inc. All Rights Reserved. ひとことで言うと、スケーラビリティが確保できていなかった 11 設定したKPIより、AWS RDSのSLAの方が低い
KPIとして設定している目標はリクエ スト成功率が99.96%以上。 一方で、Amazon RDS(マルチAZ クラスタ)のSLAは99.95%となって おり、そもそも自社でコントロールでき ないところで、KPI達成が難しい状況 … イコール、意図せずKPIとして無理が ある設定になっていた。
Copyright coconala Inc. All Rights Reserved. IOPS(1秒あたりのI/Oアクセスの数)も限界が迫っていた 12 このままだと、近い未来にIOPSの上限に抵触する Amazon
RDSのインスタンスサイズは 適切なものを利用していたので、CPU やメモリなどは問題なかったが、 IOPSの上限に抵触しそうになっ た。 暫定的にデータベースのデータ量と無 関係にストレージを拡張すること で、IOPSの上限を上げていった が、一時しのぎであった。
Copyright coconala Inc. All Rights Reserved. 前述の課題に加えて、MySQL 5.7 EOL 対応も迫ってきた…😓
放っておいても数年後には限界を 迎えることも自明😭 本腰を上げたのが、2022年の春頃! 13
Copyright coconala Inc. All Rights Reserved. 課題にどう向き合ったか? Chapter 02 14
Copyright coconala Inc. All Rights Reserved. Amazon Auroraへの移行 15 設定したKPIの達成に向けてAmazon
Auroraを採用 Amazon AuroraのSLA(マルチ AZクラスタ)は99.99%なので、定 めているリクエスト成功率(99.96%) よりも高い。 また、IOPSの上限も撤廃されるた め、2つの課題を一気にクリアできる ことを期待して、Amazon Auroraへ 移行することに意思決定した。 Amazon Aurora Amazon RDS
Copyright coconala Inc. All Rights Reserved. DB移行は一大プロジェクトなので、マイルストーンを設定し、経営層と合意形成 16 MySQL5.7 EOL期限をデッドラインとして、計画を策定
経営層に「技術課題として、一番リスクと 難易度が大きいもの」とインプットするため に対応するタスクの整理と、マイルストーン 設定から着手。 MySQL5.7 EOL期限から逆算して、1年半が かりのプロジェクトを立ち上げ、ナレッジを 徐々に蓄積できるように5つのデータ ベースを影響が少ないところから順に対 応していく計画とした。
Copyright coconala Inc. All Rights Reserved. AWS社とディスカッションを進め、最速で品質の高いアプローチを模索する 17 定例MTGで議論を進めていき、検討を加速化
Copyright coconala Inc. All Rights Reserved. メンテナンス時間削減を目的としたブルーグリーンデプロイの採用 18
Copyright coconala Inc. All Rights Reserved. それらに加えて、8億本ものSQLを どのようにしてテストをするか?を 全力で考えていきました🤔 次のアジェンダで上記課題に対する
打ち手をご紹介します! 19
Copyright coconala Inc. All Rights Reserved. Insight SQL Testingの利活用 Chapter
03 20
Copyright coconala Inc. All Rights Reserved. プロダクトで利用しているDBのなかでも 「メインDB」は常時膨大な量のSQLが流れており、 MySQLメジャーバージョンアップ&Auroraへの移行後 (AuroraMySQL3化)に問題なく動作するか懸念されてい
た。 検証環境ではワークロードが違いすぎて網羅的にSQL動 作の確認がしきれない点が浮き彫りになった。 そのため、メインDBは本番環境相当のSQLを使った 性能テストを実施して移行時の品質向上を狙う。 重厚に性能テストを行うワケ 21 メインDBは桁違いに難易度の高い移行対象
Copyright coconala Inc. All Rights Reserved. 22 一度、スロークエリを対象に新旧バージョンの2DBにSQL 実行したが、SQL 200本程度でも実行から結果をまとめ
るのに時間・労力がかかった… これでは全量だと年単位で時間がかかってしまう恐れ があり、残された期間で効率的に実施できる方法を模索 していた
Copyright coconala Inc. All Rights Reserved. 重要ポイントを満たす選択肢として Insight SQL Testingを採用
23 移行後の品質を担保するために ・実際に流れているSQL(クエリログ: general log)を利用できること ・新旧バージョンの2DBに同一SQLを実行して結果を比較できること を重要視しており、それを満たしていたのが決め手。
Copyright coconala Inc. All Rights Reserved. Insight SQL Testing利用イメージ 24
Copyright coconala Inc. All Rights Reserved. 事前にPoCを行うことで、一発本番のリスクを軽減させる 25 進めるなかで「クエリログのサイズが大きいとInsight SQL
Testing側のクエ リログ取り込みに失敗してしまう」問題に直面 ただ、PoCでありながらインサイトテクノロジー社が親身にサポートくださり、 回避策に切り替えることで先に進めた。その後の正式利用時にはパッチが 適用され、この問題は解消された。 PoCの機会をいただき、一連の流れを経験
Copyright coconala Inc. All Rights Reserved. ただ、都合によりPoC時点では本番相当のクエリログを充分に用意 できていなかった😭 そのため今後イレギュラーが起きることを考慮して、予定よりも性能 テストフェーズの開始時期を前倒して更に2段階に分けて性能
テストを実施できるよう計画を変更した。 また、本来は1週間分取得して行う予定だったが、 ・1時間分のクエリログのテスト実行だけで4時間かかる ・取得したクエリログの保管コストがバカにならない ことがわかったため、取得範囲を狭めた。 26
Copyright coconala Inc. All Rights Reserved. ・連続24時間分 ・週次・月次定期バッチ処理の時間分 ・月次社内処理の時間分 網羅性を担保しつつテストする
全体量を削減することができた👏 27 実際に利用したクエリログ
Copyright coconala Inc. All Rights Reserved. 実際に利用した構成がコチラ 新旧バージョンの2DBに対し て並列でSQLを実行し、 その結果から
・新DBのみ失敗 ・2DBで取得結果が異なる ・新DBで性能劣化 と判定されたSQLの影響度合い を調査した。 指定時間分メインDBからクエリログを取得して性能テストを実施する仕組みを構築 28
Copyright coconala Inc. All Rights Reserved. ただ、正式に性能テストを実施していくなかで問題が出た。 PoCはGUIベースで性能テストを試していたが、 ・性能テストの実施オプションを毎回入力する必要があり非効率 ・単一クエリログサイズが大きく(≒SQL本数が多い)、時短のために
性能テストの「SQL並列実行数」オプションを大きくすると 途中でInsight SQL TestingのインスタンスがOOM になってしまい、テストがFailしてやり直しに 本番相当の性能テスト構成での詰まりポイント 29
Copyright coconala Inc. All Rights Reserved. REST APIが提供されていたので bashスクリプトを作成してテスト実行・結果取得の処理を効率化した。 ※APIリファレンス参照にはライセンスが必要なため具体スクリプト内容は割愛
本番相当の性能テスト構成での詰まりポイント(対策) 30 テストのオプションを毎回入力 途中でInsight SQL TestingのインスタンスがOOM インスタンスのメモリを増設しても解消しなかったので、 インサイトテクノロジー社サポートを頼りつつ、 1回のテストに使うクエリログ時間を1時間→1分に 分割して回すことで、性能テストが失敗したときの影響を軽減させた
Copyright coconala Inc. All Rights Reserved. 最終的にテスト対象のSQLは約8億本、 「新DBのみ失敗、2DBで取得結果が異なる、新 DBで性能劣化」結果から重複排除などを行い 影響調査が必要だったのは約200本、
事前に改修が必要だったのは約30本 となった。 事前に改修を終えることができ、 「その他は問題なし」と言い切れる安心感ができ た。 性能テストを実施してどうなったか? 31 事前に注力するべきSQLの本数は激減した
Copyright coconala Inc. All Rights Reserved. それでも念の為イレギュラーを考慮して切り 替え当日は厚めに体制を敷いて臨んだが AuroraMySQL3への移行は無事に完了! 現在もサービス影響なく稼働
させることができています😁 事前に問題点を洗い出すことができ、切り替え当日は無風 32 Amazon Aurora
Copyright coconala Inc. All Rights Reserved. 振り返り Chapter 04 33
Copyright coconala Inc. All Rights Reserved. 影響の大きいメインDBのAuroraMySQL3化が無事故で終えられた のは性能テストで事前に問題点を洗い出せたから。 Insight SQL
Testingを利用することで性能テストの品質を担保し つつかける工数を削減できた。 また、サポートという正式に頼るルートがあったおかげで、詰まった ときにも自分たちだけで抱え込まずに済んだ。 メインDBのAuroraMySQL3化はココナラ史上最大の課題だった 34
Copyright coconala Inc. All Rights Reserved. 社内外さまざまな協力・支援があったおかげで、1年半という期間 を計画的かつ大きな問題なく進めることができた。 途中でイレギュラーが起きた際にも計画を見直すことで死守する べき期限を変えずに完遂できた。
ただ、性能テストはPoC前にMTGなどでイメージ感や具体 ユースケースのすり合わせなど、もう少し解像度高く取り組むこ とができたはず。こちらからもう少し熱量を持ってコミュニケー ションできれば良かった。 対応してみてどうだったか? 35 確実に自分たちだけでは完遂できなかった
Copyright coconala Inc. All Rights Reserved. IOPS上限問題 抱えていた課題はどうなった? 36 SLO未達問題
EOL期限問題
Copyright coconala Inc. All Rights Reserved. 今後の取り組み Chapter 05 37
Copyright coconala Inc. All Rights Reserved. データベース移行はやっぱり事前の準備が大事 38 集められる情報は集めて、自社としての最適解を見つける 「データベース移行」といっても、システム構
成やシステム特性によって、考慮するポイ ントはさまざま。 類似したアーキテクチャーを採用しているシ ステムの情報を参考に「自社のベストプラク ティス」を探すことが重要。 なんといっても、数年に一度は必ず訪れる イベント・・・
Copyright coconala Inc. All Rights Reserved. システムメンテナンスの無い世界を目指していきたい 39 無停止でメンテナンスイベントをこなす最適解を見つける クラウドサービスを使っている限り、「基盤の
メンテナンス」は切っても切れないイベント になる。(全てがライブマイグレーションにな れば、みんなHappyだけど…) ココナラは「全てがそろうスキルマーケット」を 目指しているので、極力システムメンテナ ンスがない世界を実現するための机上 / 実機検証を続ける。
Copyright coconala Inc. All Rights Reserved. ココナラでは、Insight SQL Testing なしではQCDのバランスの取れた
移行作業はできませんでした。 1年近く伴走していただき、 本当にありがとうございました!! 40
Copyright coconala Inc. All Rights Reserved. データベースはどの企業でも利用してい るので、ナレッジを公開している企業も たくさんあります。 過去の知見や、AWS等のベンダーを
使い倒して、長きに渡るデータベース 移行を安全に乗り切りましょう!!😁 41
Fin