YugabyteDBへの移行をInsight Database Testingで評価できるか試してみる

こんにちは。インサイトテクノロジーの松尾です!

7月も中盤に入り、札幌でも日中は25度を超える日が続くようになってきました。ただ、東京と異なるところとしては、札幌の夜は夏でも比較的涼しいこと。たまに夜も暑い日があるのですが、基本は夜は涼しいため、真夏でも窓を開けて寝ると寒い日もあるくらいです。

ところで、YugabyteDBについてご存じでしょうか?
YugabyteDBはPostgreSQL互換のクラウドネイティブ分散SQLデータベースです。

PostgreSQL互換ということでさくっと使い始められるような気もするものの、本当にそうなのか、普通のSQLが実行できるのか、不安に感じる方もいると思います。以下を見ると、大きな制限はなさそうですね。

PostgreSQL互換ということで、今回のブログではInsight Database Testingで評価可能かを確認してみたいと思います。

YugabyteDBはYugabyteDB Managedを使用

YugabyteDBの用意は、無料で試すことのできる YugabyteDB Managed を使用しました。サインアップして無料のクラスターを簡単に用意できます。

アカウント作成後は、ステップに従って必要情報を入力するのみで、簡単に接続可能なデータベースを用意できました。

クラスタの作成先はAWSかGCPを選択可能です。

作成後は、作成時に入力した情報で接続可能です。dbeaverからも簡単に接続できます。

Oracle Databaseからの移行を想定して試す

ところで、YugabyteDBでInsight Database Testingの動作確認を行うにあたり、まずはテーブルやデータなどのスキーマをYugabyteDBに用意してあげる必要があります。今回は、移行をサポートするツールであるYugabyteDB Voyagerを使用して、Oracleのスキーマとデータを移行してみます。

YugabyteDB Voyagerは、YugabyteDBへの移行を強力にサポートするツールという触れ込みで、現バージョンでは、Oracle、MySQL、PostgreSQLからの移行をサポートしています。

ツールのインストールを行った後は以下の流れで移行を行います。

  • ソースから、スキーマをエクスポートと確認
  • ソースから、データをエクスポート
  • ターゲットへ、スキーマをインポート
  • ターゲットへ、データをインポート

インストールについてはgithubからcloneしてインストールコマンドを実行するだけなのですが、Dockerfileでも用意しておいていただけると、もっと手間が省けてありがたいですね。なお、インストールの途中でOra2Pg利用の確認が求められました。Oracleからの移行については、内部的にはOra2Pgを使っているということでしょうね。

以下のような感じで実行することができました。

ソースから、スキーマをエクスポートする実行例

$ yb-voyager export schema --export-dir ~/ora2yugabytedb/oracle/ --source-db-type oracle --source-db-host XX.XX.XX.XX --source-db-name pdb1 --source-db-schema scott --source-db-user scott --source-db-password ********

スキーマの確認例

$ yb-voyager analyze-schema --export-dir ~/ora2yugabytedb/oracle/ --source-db-type oracle --source-db-host XX.XX.XX.XX --source-db-name pdb1 --source-db-schema scott --source-db-user scott --source-db-password ******** --output-format txt

$ cat oracle/reports/report.txt
+---------------------------+
| Database Migration Report |
+---------------------------+
Database Name   pdb1
Schema Name     SCOTT
DB Version      Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Objects:

Object:         TABLE
Total Count:    10
Valid Count:    10
Invalid Count:  0
Object Names:   t_char, test, test1, testtable, bonus, dept, emp, float_test, salgrade, testtable2

スキーマのインポート実行例

$ yb-voyager import schema --export-dir ~/ora2yugabytedb/oracle/ --target-db-host xxx.xxx.xxx.xxx --target-db-name yugabyte --target-db-schema public --target-db-user scott --target-db-password ********

データのインポート実行例

$ yb-voyager import data --export-dir ~/ora2yugabytedb/oracle/ --target-db-host xxx.xxx.xxx.xxx --target-db-name yugabyte --target-db-schema public --target-db-user scott --target-db-password ********

DBeaverで確認してみると、きちんとデータが入っていました。

今回、小さなデータセットの移行を試してみたのみですが、特にエラーも出ずに移行できました。

なお、気づいたところとしては、Ora2Pgの仕様ではありますが、number型は精度の設定状況により、numeric型でなくfloat型へ変換されるようです(オプション指定でnumeric型にすることも可能)。これは、OracleからPostgreSQLへの移行の一般的な話ですが、numeric型のパフォーマンスがよくないため、正確に固定小数点を扱いたい場合を除いては、doubleやfloatへの移行が一般的には推奨されるようです。SCTを使ったときはnumeric型に変換されていたので、このora2pgとの違いもいずれまとめてみたいところです。

Insight Database Testingで確認

では続いてInsight Database Testingで確認してみます。今回、OracleもYugabyteDBも、特にパフォーマンスを意識して環境を用意しているわけではないため、SQL実行時のパフォーマンス以外での挙動を評価できることを確認します。

実行したSQLは以下の3つ

select empno, ename, job, mgr, to_char(hiredate, 'YYYY-MM-DD') as hiredate, to_char(sal, '99999.99') as sal from emp;

select empno, ename, job, mgr, to_char(hiredate, 'YYYY-MM-DD') as hiredate, to_char(sal, '99999.99') as sal from emp order by empno;

select empno, ename, d.deptno, d.dname, job, mgr, to_char(hiredate, 'YYYY-MM-DD') as hiredate, to_char(sal, '99999.99') as sal from emp e left outer join dept d on e.deptno = d.deptno order by deptno, empno;

このSQLをOracleで実行すると、Insight Database Testingへ実行されたSQLが蓄積されます。

なお、Insight Database TestingからYugabyteDBへは、PostgreSQLとして問題なく接続できました。

アセスメント実行時には、ヘッダーの大文字/小文字を無視、実行時間比較時の1秒以内の差は無視、SELECT結果は順序も含めて比較(相違がある場合は順序を無視すれば正しいかも確認)などの比較オプションを設定しました。

アセスメントを実行すると、以下のように、ORDER BYがついているものは問題なく、ORDER BYがついてないものはエラーとなりました。ORDER BYがない場合は順序が不定なので当然でしょうか。なお、順序を無視すると問題ないことも確認できました。

このように、アプリケーション側から見ると、PostgreSQLとして接続しSQLを実行、簡単なSQLにおいてはOracleとの比較も問題ないことが確認できました。

おわりに

普通のPostgreSQLでなくYugabyteDBへ移行するモチベーションとしては、分散SQLとしての特徴を享受したいケースが多いと思います。一方、対障害性やスケール性能などは、Insight Database Testingでは評価しづらいため、これらは、別途確認いただく感じになるとは思います。

本ブログでは、YugabyteDBへの移行アセスメントにあたって、YugabyteDB Voyagerを使って環境を用意し、Oracleで実行したSQLをInsight Database Testingで収集し、YugabyteDBに対して評価実行し、移行アセスメントに利用可能であることを確認しました。対障害性やスケール性能が満足いくものでも、アプリケーションが期待通りに動作するかは、SQLが期待通りの挙動を示すかの確認が必須であり、Insight Database Testingをその確認に利用可能です。

Insight Database Testing をまだご利用いただいていない方で実際に試されたい場合は、製品の説明やデモ、トライアルなどについて
Insight Database Testingに関するお問い合わせ よりお問い合わせいただければと思います。

MySQL互換の分散SQLデータベース TiDB も同様に気になっているので、近いうちに試してみたいと思います。

次回もどうぞお楽しみに!

関連最新記事

TOP インサイトブログ Insight Database Testing YugabyteDBへの移行をInsight Database Testingで評価できるか試してみる

Recruit 採用情報

Contact お問い合わせ

  購入済みの製品サポートはこちら

製品サービス

自社開発製品群

データ統合

ディザスタリカバリ

プロフェッショナルサービス