Upgrade to Pro — share decks privately, control downloads, hide ads and more …

徹底解説!Insight SQL Testingを活用したデータベース移行の実践ポイント

徹底解説!Insight SQL Testingを活用したデータベース移行の実践ポイント

db tech showcase 2024の登壇資料。
https://www.db-tech-showcase.com/2024/schedule/

coconala_engineer

July 11, 2024
Tweet

More Decks by coconala_engineer

Other Decks in Technology

Transcript

  1. Copyright coconala Inc. All Rights Reserved. 徹底解説! Insight SQL Testingを活用した

    データベース移行の実践ポイント 株式会社ココナラ 川崎 雄太・片桐 英斗 2024/07/11 db tech showcase 2024
  2. Copyright coconala Inc. All Rights Reserved. 自己紹介(川崎 雄太) 2 川崎

    雄太 Yuta Kawasaki @yuta_k0911 株式会社ココナラ システムプラットフォーム部 部長 / Head of Information SRE / 情シス / セキュリティ領域のEM SRE NEXT 2024のコアメンバー 今年の抱負:現状打破✨
  3. Copyright coconala Inc. All Rights Reserved. 自己紹介(片桐 英斗) 3 片桐 英斗(かたぎり えいと)

    システムプラットフォームグループ インフラ・SREチーム所属 2022年4月 ココナラ入社 プロダクトインフラの運用・改善をしています マイブームは家で挽きたてコーヒーを淹れる こと☕
  4. Copyright coconala Inc. All Rights Reserved. ココナラのエンジニア数の変遷 5 事業拡大に合わせて3年で約3倍の組織規模に成長 2020年

    2023年 フェーズ 上場前 上場後 エンジニア数 20人強 70人強 リポジトリ数 45 170以上
  5. Copyright coconala Inc. All Rights Reserved. ひとことで言うと、スケーラビリティが確保できていなかった 11 設定したKPIより、AWS RDSのSLAの方が低い

    KPIとして設定している目標はリクエ スト成功率が99.96%以上。 一方で、Amazon RDS(マルチAZ クラスタ)のSLAは99.95%となって おり、そもそも自社でコントロールでき ないところで、KPI達成が難しい状況 … イコール、意図せずKPIとして無理が ある設定になっていた。
  6. Copyright coconala Inc. All Rights Reserved. IOPS(1秒あたりのI/Oアクセスの数)も限界が迫っていた 12 このままだと、近い未来にIOPSの上限に抵触する Amazon

    RDSのインスタンスサイズは 適切なものを利用していたので、CPU やメモリなどは問題なかったが、 IOPSの上限に抵触しそうになっ た。 暫定的にデータベースのデータ量と無 関係にストレージを拡張すること で、IOPSの上限を上げていった が、一時しのぎであった。
  7. Copyright coconala Inc. All Rights Reserved. 前述の課題に加えて、MySQL 5.7 EOL 対応も迫ってきた…😓

    放っておいても数年後には限界を 迎えることも自明😭 本腰を上げたのが、2022年の春頃! 13
  8. 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
  9. Copyright coconala Inc. All Rights Reserved. DB移行は一大プロジェクトなので、マイルストーンを設定し、経営層と合意形成 16 MySQL5.7 EOL期限をデッドラインとして、計画を策定

    経営層に「技術課題として、一番リスクと 難易度が大きいもの」とインプットするため に対応するタスクの整理と、マイルストーン 設定から着手。 MySQL5.7 EOL期限から逆算して、1年半が かりのプロジェクトを立ち上げ、ナレッジを 徐々に蓄積できるように5つのデータ ベースを影響が少ないところから順に対 応していく計画とした。
  10. Copyright coconala Inc. All Rights Reserved. プロダクトで利用しているDBのなかでも 「メインDB」は常時膨大な量のSQLが流れており、 MySQLメジャーバージョンアップ&Auroraへの移行後 (AuroraMySQL3化)に問題なく動作するか懸念されてい

    た。 検証環境ではワークロードが違いすぎて網羅的にSQL動 作の確認がしきれない点が浮き彫りになった。 そのため、メインDBは本番環境相当のSQLを使った 性能テストを実施して移行時の品質向上を狙う。 重厚に性能テストを行うワケ 21 メインDBは桁違いに難易度の高い移行対象
  11. Copyright coconala Inc. All Rights Reserved. 22 一度、スロークエリを対象に新旧バージョンの2DBにSQL 実行したが、SQL 200本程度でも実行から結果をまとめ

    るのに時間・労力がかかった… これでは全量だと年単位で時間がかかってしまう恐れ があり、残された期間で効率的に実施できる方法を模索 していた
  12. Copyright coconala Inc. All Rights Reserved. 重要ポイントを満たす選択肢として Insight SQL Testingを採用

    23 移行後の品質を担保するために ・実際に流れているSQL(クエリログ: general log)を利用できること ・新旧バージョンの2DBに同一SQLを実行して結果を比較できること を重要視しており、それを満たしていたのが決め手。
  13. Copyright coconala Inc. All Rights Reserved. 事前にPoCを行うことで、一発本番のリスクを軽減させる 25 進めるなかで「クエリログのサイズが大きいとInsight SQL

    Testing側のクエ リログ取り込みに失敗してしまう」問題に直面 ただ、PoCでありながらインサイトテクノロジー社が親身にサポートくださり、 回避策に切り替えることで先に進めた。その後の正式利用時にはパッチが 適用され、この問題は解消された。 PoCの機会をいただき、一連の流れを経験
  14. Copyright coconala Inc. All Rights Reserved. ただ、都合によりPoC時点では本番相当のクエリログを充分に用意 できていなかった😭 そのため今後イレギュラーが起きることを考慮して、予定よりも性能 テストフェーズの開始時期を前倒して更に2段階に分けて性能

    テストを実施できるよう計画を変更した。 また、本来は1週間分取得して行う予定だったが、 ・1時間分のクエリログのテスト実行だけで4時間かかる ・取得したクエリログの保管コストがバカにならない ことがわかったため、取得範囲を狭めた。 26
  15. Copyright coconala Inc. All Rights Reserved. 実際に利用した構成がコチラ 新旧バージョンの2DBに対し て並列でSQLを実行し、 その結果から

    ・新DBのみ失敗 ・2DBで取得結果が異なる ・新DBで性能劣化 と判定されたSQLの影響度合い を調査した。 指定時間分メインDBからクエリログを取得して性能テストを実施する仕組みを構築 28
  16. Copyright coconala Inc. All Rights Reserved. ただ、正式に性能テストを実施していくなかで問題が出た。 PoCはGUIベースで性能テストを試していたが、 ・性能テストの実施オプションを毎回入力する必要があり非効率 ・単一クエリログサイズが大きく(≒SQL本数が多い)、時短のために

     性能テストの「SQL並列実行数」オプションを大きくすると  途中でInsight SQL TestingのインスタンスがOOM  になってしまい、テストがFailしてやり直しに 本番相当の性能テスト構成での詰まりポイント 29
  17. Copyright coconala Inc. All Rights Reserved. REST APIが提供されていたので bashスクリプトを作成してテスト実行・結果取得の処理を効率化した。 ※APIリファレンス参照にはライセンスが必要なため具体スクリプト内容は割愛

    本番相当の性能テスト構成での詰まりポイント(対策) 30 テストのオプションを毎回入力 途中でInsight SQL TestingのインスタンスがOOM インスタンスのメモリを増設しても解消しなかったので、 インサイトテクノロジー社サポートを頼りつつ、 1回のテストに使うクエリログ時間を1時間→1分に 分割して回すことで、性能テストが失敗したときの影響を軽減させた
  18. Copyright coconala Inc. All Rights Reserved. 最終的にテスト対象のSQLは約8億本、 「新DBのみ失敗、2DBで取得結果が異なる、新 DBで性能劣化」結果から重複排除などを行い 影響調査が必要だったのは約200本、

    事前に改修が必要だったのは約30本 となった。 事前に改修を終えることができ、 「その他は問題なし」と言い切れる安心感ができ た。 性能テストを実施してどうなったか? 31 事前に注力するべきSQLの本数は激減した
  19. Copyright coconala Inc. All Rights Reserved. 影響の大きいメインDBのAuroraMySQL3化が無事故で終えられた のは性能テストで事前に問題点を洗い出せたから。 Insight SQL

    Testingを利用することで性能テストの品質を担保し つつかける工数を削減できた。 また、サポートという正式に頼るルートがあったおかげで、詰まった ときにも自分たちだけで抱え込まずに済んだ。 メインDBのAuroraMySQL3化はココナラ史上最大の課題だった 34
  20. Copyright coconala Inc. All Rights Reserved. 社内外さまざまな協力・支援があったおかげで、1年半という期間 を計画的かつ大きな問題なく進めることができた。 途中でイレギュラーが起きた際にも計画を見直すことで死守する べき期限を変えずに完遂できた。

    ただ、性能テストはPoC前にMTGなどでイメージ感や具体 ユースケースのすり合わせなど、もう少し解像度高く取り組むこ とができたはず。こちらからもう少し熱量を持ってコミュニケー ションできれば良かった。 対応してみてどうだったか? 35 確実に自分たちだけでは完遂できなかった
  21. Copyright coconala Inc. All Rights Reserved. データベース移行はやっぱり事前の準備が大事 38 集められる情報は集めて、自社としての最適解を見つける 「データベース移行」といっても、システム構

    成やシステム特性によって、考慮するポイ ントはさまざま。 類似したアーキテクチャーを採用しているシ ステムの情報を参考に「自社のベストプラク ティス」を探すことが重要。 なんといっても、数年に一度は必ず訪れる イベント・・・
  22. Copyright coconala Inc. All Rights Reserved. システムメンテナンスの無い世界を目指していきたい 39 無停止でメンテナンスイベントをこなす最適解を見つける クラウドサービスを使っている限り、「基盤の

    メンテナンス」は切っても切れないイベント になる。(全てがライブマイグレーションにな れば、みんなHappyだけど…) ココナラは「全てがそろうスキルマーケット」を 目指しているので、極力システムメンテナ ンスがない世界を実現するための机上 / 実機検証を続ける。
  23. Copyright coconala Inc. All Rights Reserved. ココナラでは、Insight SQL Testing なしではQCDのバランスの取れた

    移行作業はできませんでした。 1年近く伴走していただき、 本当にありがとうございました!! 40
  24. Fin