$30 off During Our Annual Pro Sale. View Details »

無限にスケールできるRDB・TiDBの効果~移行までを考察する - Insight Technologyセッションその2

PingCAP-Japan
September 08, 2022

無限にスケールできるRDB・TiDBの効果~移行までを考察する - Insight Technologyセッションその2

RDBのスケールの課題を直接的に解決するNewSQLデータベースの普及が進んでいます。
現実的に移行していくにはどのようなツールを使っていけるのか、NewSQLのメリットを振り返りながら考察していきます。

TiDBへの移行の勘所とそれを支えるツール
TiDBへの乗り換え時に必要となる、データ移行、アプリケーション改修・テスト。特にMySQL以外から乗り換える場合は、いろいろと考慮が必要となります。

本スライドでは、インサイトテクノロジー社開発製品であるInsight Database Testing、インサイトテクノロジー社取扱い製品であるQlik Replicateを使用して、MySQLからの乗り換えはもちろん、MySQL以外のデータベースからの乗り換え時に「いかに簡単に」対応できるのか、事例を含めて紹介します。

PingCAP-Japan

September 08, 2022
Tweet

More Decks by PingCAP-Japan

Other Decks in Technology

Transcript

  1. © 2022 Insight Technology, Inc. TiDBへの移⾏の勘所と それを⽀えるツール - アプリ移⾏のためのSQL互換性確認ツール編 -

    インサイトテクノロジー
  2. ⾃⼰紹介 l 名前 • 松尾 拓真 l インサイトテクノロジー(札幌R&Dセンター⛄) • プロダクト開発本部

    • プロダクトマネジメント本部 l やってること • PISO、Insight Database Testing、Insight Data Maskingなど、 ⾃社のプロダクト関連で活動 2 © 2022 Insight Technology, Inc.
  3. TiDBへの移⾏を考える上で気になることは? やはり既存のMySQLアプリが どのくらいそのまま動くのか? ではないでしょうか? 3 © 2022 Insight Technology, Inc.

  4. TiDBの互換性に関するページを⾒てみると、、 l https://docs.pingcap.com/ja/tidb/stable/mysql-compatibility l “TiDBは、 MySQL 5.7プロトコルおよびMySQL 5.7の⼀般的な機能と構⽂と⾼い互換性が あります。 MySQL

    5.7のエコシステムツール(PHPMyAdmin、Navicat、MySQL Workbench、mysqldump、およびMydumper / myloader)とMySQLクライアントをTiDB に使⽤できます。” l “ただし、MySQLの⼀部の機能はサポートされていません。これは、問題を解決するため のより良い⽅法があるため(JSONに置き換えられたXML関数など)、または現在の需要 と必要な労⼒の不⾜(ストアドプロシージャや関数など)が原因である可能性がありま す。⼀部の機能は、分散システムとして実装するのが難しい場合もあります。” 4 © 2022 Insight Technology, Inc.
  5. TiDB:サポートされていない機能 l ストアドプロシージャと関数 l トリガー l イベント l ユーザー定義関数 l

    FOREIGN KEY制約 l FULLTEXT構⽂とインデックス l SPATIAL ( GISとも呼ばれGEOMETRY )関数、データ型、およびインデックス#6347 l ascii 、 binary latin1 utf8のutf8mb4 gbk 。 l SYSスキーマ l オプティマイザートレース l XML関数 l セーブポイント l CREATE TABLE tblName AS SELECT stmt構⽂ l :(などなど) 5 © 2022 Insight Technology, Inc. 結構たくさんリストされていて 調査が⼤変、、、、 今実⾏しているアプリへの影響を 簡単に確認するすべはないか?
  6. ソースコードの全調査をせず知ることは可能か? Insight Database Testing でできるよ♪ 6 © 2022 Insight Technology,

    Inc.
  7. Insight Database Testingとは 7 © 2022 Insight Technology, Inc.

  8. Insight Database Testingは何をするツールか? l SQLテストを活⽤し • データベース移⾏時の移⾏アセスメント(アプリ改修コストの⾒積もり)に利⽤ • データベースバージョンアップ時のSQL互換性テスト l

    SQLテストとは? • SQLテストではこれまで運⽤し動作してきたSQLが アップグレード後も “きちんと” 動作するかを確認する 8 © 2022 Insight Technology, Inc.
  9. Insight Database TestingによるSQLテスト l 現環境でアプリケーションが発⾏するSQLを収集 l 収集したSQLをテスト・評価 • 実⾏可否、実⾏結果⽐較(Select、更新DML)、実⾏速度⽐較 l

    マルチデータベース対応(Oracle Database / SQL Server / PostgreSQL / MySQL) 9 © 2022 Insight Technology, Inc. テスト環境 Test Report 現⾏環境 移⾏元 移⾏先 SQL 収集 SQL テスト
  10. とくに多い使われ⽅や問い合わせ l 「Oracle à PostgreSQL」(移⾏) • 異なるデータベースへの移⾏ • 移⾏先のDBとしては、EDB Postgresや、Amazon

    Auroraなど l 「Oracle à Oracle」(バージョンアップ) • バージョンアップ時のSQL互換性確認 l 「PostgreSQL à PostgreSQL」「MySQL à MySQL」(バージョンアップ) • バージョンアップ時のSQL互換性確認 (特にRDSやAurora) l「MySQLなど à TiDB」(互換DBへの移⾏) 10 © 2022 Insight Technology, Inc.
  11. TiDBへの移⾏における利⽤シーン l 移⾏アセスメント • 現⾏環境で発⾏されているSQLを収集 • 動的SQLやバインド変数を使⽤したSQLの変数値も取得 • SQLテストを実⾏して、実⾏できないSQLと発⽣するエラー情報を収集 è修正⼯数⾒積もりの精緻化

    • 実⾏できてもクエリ実⾏結果が現在と変わるものや性能が著しく劣化してしまうものの洗い出し è早い段階で⾒つけられる問題を発⾒ l SQL変換・修正後の⽐較 • 開発フェーズにおいて現⾏SQLと修正後SQLを実⾏しての現新⽐較 èツールを使うことでの実施作業/デバッグ作業の省⼒化、結果の⾒える化 l 事例などは https://www.insight-tec.com/resource/ を参照ください。 11 © 2022 Insight Technology, Inc.
  12. 実施例 〜⾮常にシンプルな例で〜 12 © 2022 Insight Technology, Inc.

  13. 実施環境 13 © 2022 Insight Technology, Inc. 現⾏環境 MySQL 5.7

    (RDS) 移⾏元 移⾏先 SQL 収集 SQL テスト 現⾏環境(テスト環境) MySQL 5.7 (RDS) 現⾏環境(テスト環境) TiDB v6.2.0 (TiDB cloud)
  14. TiDB環境はTiDB cloudを使⽤しました(超簡単) 14 © 2022 Insight Technology, Inc.

  15. 実⾏したSQL(今回はこれだけ) l select * from emp; l select d.deptno, d.dname,

    e.empno, coalesce(e.ename,'(no employee)') ename from dept d left outer join emp e on d.deptno=e.deptno; l select max(ename) from emp group by ename; l create table test as select * from emp; l select * from test; 15 © 2022 Insight Technology, Inc.
  16. Insight Database Testingで取り込んだSQL 16 © 2022 Insight Technology, Inc. ※いくつかmysqlクライアントから発⾏されたと

    思われるSQLも取得されている
  17. TiDB (TiDB cloudにはMySQLとして接続) 17 © 2022 Insight Technology, Inc.

  18. アセスメント結果 18 © 2022 Insight Technology, Inc.

  19. アセスメント結果:失敗したSQL 19 © 2022 Insight Technology, Inc.

  20. アセスメント結果:失敗したSQL 20 © 2022 Insight Technology, Inc. ※未実装の構⽂

  21. アセスメント結果:失敗したSQL 21 © 2022 Insight Technology, Inc.

  22. アセスメント結果:結果が異なるSQL 22 © 2022 Insight Technology, Inc.

  23. アセスメント結果:結果が異なるSQL 23 © 2022 Insight Technology, Inc.

  24. アセスメント結果:結果が異なるSQL 24 © 2022 Insight Technology, Inc. 環境問題なので 無視してもよさそう

  25. アセスメント結果:結果が異なるSQL 25 © 2022 Insight Technology, Inc.

  26. アセスメント結果:結果が異なるSQL 26 © 2022 Insight Technology, Inc. 順序違いも検出できる ※ORDER BYのないクエリの順序違いを無視した⽐較も可能

  27. アセスメント結果:結果が異なるSQL 27 © 2022 Insight Technology, Inc.

  28. アセスメント結果:結果が異なるSQL 28 © 2022 Insight Technology, Inc. これも順序違いだが、 MySQL 5.7ではGROUP

    BY句で暗黙ソートがあった
  29. アセスメント結果:結果が異なるSQL 29 © 2022 Insight Technology, Inc. 基本は5.7準拠であるが、 ⼀部、8.0の仕様が取り込まれているものがある

  30. アセスメント結果:性能が劣化したSQL 30 © 2022 Insight Technology, Inc. 今回の環境は特に性能を意識して準備はしていないので、 どういった感じで確認できるかのサンプルとなります。

  31. アセスメント結果:性能が劣化したSQL 31 © 2022 Insight Technology, Inc. 実⾏計画の確認ができます 実⾏計画の確認もMySQLと同様にできることがわかりました

  32. まとめ l MySQLからTiDBへの移⾏を想定した際のSQL互換性確認に、 SQLテストツール Insight Database Testing を使⽤する例を紹介しました。 l 今回お⾒せした例はシンプルなクエリのみですが、実際のアプリケーションで

    発⾏されているSQLは少なくても数千、多ければ数万、それ以上になると思われ、 それらの確認を⼿動で⼀つずつ確認していくのは⾮現実的です。⼀⽅、ソースコードと DBの互換性の仕様を確認して⾮互換を洗い出すのも ⼤変⾻の折れる作業ではあります。 l 性能確認の機能として、クエリ単位でのSQL実⾏時間の確認を⾏うことができます。 l まずは現在使⽤されているクエリが問題ないか、また、確認漏れがないかをチェック するなどを⽬的として、Insight Database Testing などのツールをご活⽤ください。 32 © 2022 Insight Technology, Inc.
  33. 33 © 2022 Insight Technology, Inc.

  34. None