22
1/22 OSC2016 Okinawa 2016.7.2(Sat) 商用データベースからPostgreSQLへの移行入門 まず知っておいて欲しいまとめ 日本PostgreSQLユーザ会 喜田 紘介

[OSC2016沖縄]商用DBからPostgreSQLへの移行入門

Embed Size (px)

Citation preview

Page 1: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

1/22

OSC2016 Okinawa 2016.7.2(Sat)

商用データベースからPostgreSQLへの移行入門まず知っておいて欲しいまとめ

日本PostgreSQLユーザ会喜田 紘介

Page 2: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

2/22

自己紹介

Page 3: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

3/22

自己紹介

ブログはじめました!「kkida-galaxy postgres」で

検索してね☆

おススメ投稿はこちら(だってそれしか無いから・・・)

Page 4: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

4/22

本日のテーマ異種DBからPostgreSQLへ

良い資料ある?

ポスグレどれぐらい使えるの?

なにが違うの?

移行時の大変なところ

まずやってみよう!

ポスグレどれぐらい使えるの?

なにが違うの?

Page 5: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

5/22

ポスグレどれぐらい使えるの?軽量なトランザクションを捌く● 同時1000~程度のセッション

✔ シングルノードやHA構成で稼動するシステムとしては十分✔ H/WスペックではCPU 16~32core、メモリ数十GB程度はスケール可能

● 商用パッケージの大部分が置き換え可能?✔ 商用パッケージユーザの約9割がPostgreSQLで十分

– 弊社にPostgreSQL対応で相談いただいた商用パッケージ– 約9割のエンドユーザでは有償オプションを

あてにしない基本機能– 残る1割程度のエンドーユーザ環境で– 更新負荷分散・無停止を期待

Page 6: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

6/22

商用DBの高速化オプションーーーーーーーーーーーーーー

 ・パーティショニング ・パラレルクエリ ・インメモリ ・カラムストア ・ビットマップインデックス ・MVIEWの差分更新

ポスグレどれぐらい使えるの?集計・分析を気軽に行いたい● 夜間バッチで集計、日中は結果を参照

✔ 大量データを検索、集計する機能は数年ここで大幅向上✔ ただし制限事項も多く、リアルタイム性の高い分析は実用的でない✔ データ量で数100GB~TB、集計の鮮度が1日単位ぐらい

● 期待を集めるパラレルクエリ、MVIEWの差分更新など✔ ビッグデータ対応が最近のキーワード✔ 今秋リリース予定のVer9.6~パラレルクエリが可能に?

ぽすぐれ開発中!

Page 7: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

7/22

ポスグレどれぐらい使えるの?負荷分散・可用性● 参照負荷分散と高可用構成は可能

✔ マスター/スレーブ型、ログ転送方式によるレプリケーション✔ スレーブ側は参照のみ可能、複数スレーブで効果UP

✔ マスター障害時はスレーブに切り替え

Page 8: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

8/22

何が似てるの?何が違うの?RDBMSとしての基本は備えている● ACIDを守る、標準SQLに準拠、メンテナンス性・・などなど

✔ A:原始性 C:一貫性 I:独立性 D:永続性✔ 標準SQLに準拠し、そのための追加要素も常時検討されている✔ メンテナンス性

豊富な管理ビュー

パラメータチューニングSQLチューニング

SQLクエリでがんばる

各種イベントのロギング

オブジェクトのメンテナンス

Page 9: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

9/22

何が似てるの?何が違うの?全体のアーキテクチャ● 用語の違いはあるものの、ほぼ同じ図でイメージできる

Oracle Database

SGA

データベースバッファキャッシュ

共有プール

ログバッファ

LGWR

DBWR

CKPT

SMON

PMON

ARCH専用サーバプロセス

専用サーバプロセス

専用サーバプロセス

PGA

データベース

表領域

データファイル

データファイル

REDOログファイル

表 索引

各種設定ファイル

etc…

PostgreSQL

共有メモリ

共有バッファ WALバッファ

writer

wal writer

stats collector

archiver

logger

autovacuum launcher

バックエンドプロセス

バックエンドプロセス

バックエンドプロセス

デーモンプロセス

データベースクラスタ

データベース

表 索引

データベース

表 VM索引

FSM

WALファイル

各種設定ファイル

システムカタログ

各種状態管理ファイル

Page 10: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

10/22

何が似てるの?何が違うの?MVCCの実現● 異なるアーキテクチャでは、異なる運用課題もある

Oracle DatabasePostgreSQL

EMPNO=20 ENAME=TIGER

UNDOセグメント

EMPNO=10 ENAME=SCOTT

EMPNO=20 ENAME=NEW

EMPNO=30 ENAME=KING

EMPNO=40 ENAME=ALLEN

時間の流れ

変更前情報 表データ

EMPNO=10 ENAME=SCOTT

EMPNO=20 ENAME=TIGER

EMPNO=30 ENAME=KING

EMPNO=40 ENAME=ALLEN

EMPNO=20 ENAME=NEW

時間の流れ

変更前情報 表データ

変更前情報を必要とするSQL変更前情報を必要とするSQL

追記方式のため変更前の行は表に保持する

ORA-1555?VACUUM?

Page 11: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

11/22

本日のテーマ異種DBからPostgreSQLへ

ポスグレどれぐらい使えるの?

なにが違うの?

良い資料ある?

まずやってみよう!

良い資料ある?

移行時の大変なところ移行時の大変なところ

Page 12: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

12/22

PostgreSQLへの移行を考えるならPGEConsで移行をテーマに研究成果を発表● 3年にわたる成果が公開中

✔ 2012年度:異種DBからの移行ノウハウ・ツール等整理✔ 2013年度:移行元として対象にするDB製品を追加✔ 2014年度:DBを移行した場合にクリアしておくべき試験項目を整理✔ 2015年度:継続中。現在成果発表に向けて鋭意対応中

Page 13: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

13/22

PostgreSQLへの移行を考えるならPGEConsで移行をテーマに研究成果を発表● 移行の行程を定義し、各工程での検討ポイントを調査

✔ 注目されがちなSQLやストアドの移行以外ももれなく調査

Page 14: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

14/22

DB移行フレームワーク編後続の各ステップで収集する情報と、成果物を整理● 移行作業全体の工程を知る

Page 15: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

15/22

構成検討・データ連携検討ここで決断が必要!決めるのは「あなた自身」ですよ!● PostgreSQLで本当に大丈夫なのか● ポイントは、本日冒頭の話

✔ OLTP系のシングル構成であれば、性能を実現できる(可能性が高い)✔ 複数台構成も可能、だが、サービスレベルの見直しは避けられない✔ DWH用途では、どこまで期待するか判断基準を誤らないこと

● データ連携の選択肢✔ 複数DBで連携しているものを一部だけPostgreSQLに置き換える?✔ 手段はいくつか提供されている

– 各種FDW(Foreign Data Wrapper:Database Link的な使い方)– OSSツール(トリガベースのテーブル単位レプリケーション)

Page 16: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

16/22

定義移行、データ移行OSSツールOra2Pgが有用● 定義移行

✔ 使用できないオブジェクトの扱いが悩ましい✔ Ora2Pgの使い方に慣れ、それがハードルにならないように頑張る✔ PostgreSQLのほうがデータ型を細かく使い分ける(例:NUMBER → numeric?integer?real?)

● データ移行✔ Ora2Pgで中間ファイル生成✔ 文字コード変換を行う✔ 移行にかかる時間に縛りがある場合、ハードルが高いので注意

Page 17: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

17/22

SQL修正OSSツールdb_syntaxdiffを利用● 修正箇所を確認

✔ 数が多いことがほとんどなので、なるべくツールでカバー✔ ただし、修正箇所のピックアップ精度は高くない

● SQL修正✔ 対応が決まっているものがほとんど、でも人手が必要

Oracleの独自構文 PostgreSQLでの対応

・外部結合演算子(+)・ROWNUM・集合演算子 minus・FROM句内サブクエリの別名不要・MERGE

・NULLを検索するクエリ (NULLと空文字を考える)・トランザクションの違い

・外部結合OUTER JOIN・Window関数 row_number()・集合演算子 except・FROM句内サブクエリの別名必須・INSERT ・・・ON CONFRICT

Page 18: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

18/22

ストアド・プログラムの修正全面書き換えになるので覚悟が必要● PL/SQLのプロシージャ、ファンクション、パッケージ→すべてPL/pgSQLファンクションで書き換え✔ 実は公式のマニュアルに対応が書かれている✔ https://www.postgresql.jp/document/current/html/plpgsql-porting.html

プロシージャーーーーーートランザクション制御をアプリケーション側で実装し、PostgreSQLに担当させる部分はトランザクション制御を排除

プロシージャ内でのトランザクション制御が必須でなければそのままファンクション化

パッケージーーーーーーファンクションで代替し、スキーマでまとめるスキーマ名.ファンクション として、パッケージ名.サブプログラムと同じように呼び出すことができる。

パッケージ内で保持される定数・変数の考慮が必要 パッケージ定数:一時テーブルに格納 パッケージ変数:ファンクションで代替

Page 19: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

19/22

本日のテーマ異種DBからPostgreSQLへ

ポスグレどれぐらい使えるの?

なにが違うの?

良い資料ある?

移行時の大変なところ

早急になんとかしたい!

まずやってみよう!

Page 20: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

20/22

そんなDB移行、やってみませんか

ブログはじめました!「kkida-galaxy postgres」で

検索してね☆

おススメ投稿はこちら(だってそれしか無いから・・・)

今回用に投稿した二つの記事で、PostgreSQLを触った事の無い方が、とりあえず環境構築~移行のとっかかり的なステップまでを体験できます。  ・CentOS 7上でのPostgreSQL構築手順(RPM編)   ・Ora2Pgでやってみよう!テーブル定義移行編

Page 21: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

21/22

困った時はPostgreSQL周辺幅広くなら、今だとSlackが活発● コミュニティ

✔ postgresql-jp.slack.com– 2015年頃から アクティブな人数も結構増えてきて、いろいろなバック

グラウンドの方が発言してくれます。✔ 日本PostgreSQLユーザ会 メーリングリスト

– PostgreSQLの直接的な質問は、昔ながらのMLでもかなり詳細なやりとりが行われていることがあります。

● サービス提供企業✔ サポート提供社は10社前後あると思われる

– http://lets.postgresql.jp/documents/tutorial/UserSurvey/Postgresql_Usage_Report_2#commercial-support

✔ データベース移行サービス– 「Postgres Oracle 移行」などで検索

Page 22: [OSC2016沖縄]商用DBからPostgreSQLへの移行入門

22/22

まとめ異種DBからPostgreSQLへ

ポスグレどれぐらい使えるの?

なにが違うの?

良い資料ある?

移行時の大変なところ

まずやってみよう!

OLTP系ならかなり広範囲に使えるリアルタイム集計は苦手だがゆくゆくは!アーキテクチャは似ているので理解しやすい

移行を本気で考えている方は、PGEConsの資料を読んでみましょう。どこが大変か、外せないところはどこか、明確にしておくことで失敗を回避しやすくなるのではないでしょうか。

PostgreSQLやOra2Pgの使い始め、それなりに情報が世に出ています。現時点の各最新版で試してみた記事を書きましたので、是非みなさまもトライしてみてください。