Upload
kosuke-kida
View
353
Download
0
Embed Size (px)
Citation preview
1/22
OSC2016 Okinawa 2016.7.2(Sat)
商用データベースからPostgreSQLへの移行入門まず知っておいて欲しいまとめ
日本PostgreSQLユーザ会喜田 紘介
2/22
自己紹介
3/22
自己紹介
ブログはじめました!「kkida-galaxy postgres」で
検索してね☆
おススメ投稿はこちら(だってそれしか無いから・・・)
4/22
本日のテーマ異種DBからPostgreSQLへ
良い資料ある?
ポスグレどれぐらい使えるの?
なにが違うの?
移行時の大変なところ
まずやってみよう!
ポスグレどれぐらい使えるの?
なにが違うの?
5/22
ポスグレどれぐらい使えるの?軽量なトランザクションを捌く● 同時1000~程度のセッション
✔ シングルノードやHA構成で稼動するシステムとしては十分✔ H/WスペックではCPU 16~32core、メモリ数十GB程度はスケール可能
● 商用パッケージの大部分が置き換え可能?✔ 商用パッケージユーザの約9割がPostgreSQLで十分
– 弊社にPostgreSQL対応で相談いただいた商用パッケージ– 約9割のエンドユーザでは有償オプションを
あてにしない基本機能– 残る1割程度のエンドーユーザ環境で– 更新負荷分散・無停止を期待
6/22
商用DBの高速化オプションーーーーーーーーーーーーーー
・パーティショニング ・パラレルクエリ ・インメモリ ・カラムストア ・ビットマップインデックス ・MVIEWの差分更新
ポスグレどれぐらい使えるの?集計・分析を気軽に行いたい● 夜間バッチで集計、日中は結果を参照
✔ 大量データを検索、集計する機能は数年ここで大幅向上✔ ただし制限事項も多く、リアルタイム性の高い分析は実用的でない✔ データ量で数100GB~TB、集計の鮮度が1日単位ぐらい
● 期待を集めるパラレルクエリ、MVIEWの差分更新など✔ ビッグデータ対応が最近のキーワード✔ 今秋リリース予定のVer9.6~パラレルクエリが可能に?
ぽすぐれ開発中!
7/22
ポスグレどれぐらい使えるの?負荷分散・可用性● 参照負荷分散と高可用構成は可能
✔ マスター/スレーブ型、ログ転送方式によるレプリケーション✔ スレーブ側は参照のみ可能、複数スレーブで効果UP
✔ マスター障害時はスレーブに切り替え
8/22
何が似てるの?何が違うの?RDBMSとしての基本は備えている● ACIDを守る、標準SQLに準拠、メンテナンス性・・などなど
✔ A:原始性 C:一貫性 I:独立性 D:永続性✔ 標準SQLに準拠し、そのための追加要素も常時検討されている✔ メンテナンス性
豊富な管理ビュー
パラメータチューニングSQLチューニング
SQLクエリでがんばる
各種イベントのロギング
オブジェクトのメンテナンス
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ファイル
各種設定ファイル
システムカタログ
各種状態管理ファイル
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?
11/22
本日のテーマ異種DBからPostgreSQLへ
ポスグレどれぐらい使えるの?
なにが違うの?
良い資料ある?
まずやってみよう!
良い資料ある?
移行時の大変なところ移行時の大変なところ
12/22
PostgreSQLへの移行を考えるならPGEConsで移行をテーマに研究成果を発表● 3年にわたる成果が公開中
✔ 2012年度:異種DBからの移行ノウハウ・ツール等整理✔ 2013年度:移行元として対象にするDB製品を追加✔ 2014年度:DBを移行した場合にクリアしておくべき試験項目を整理✔ 2015年度:継続中。現在成果発表に向けて鋭意対応中
13/22
PostgreSQLへの移行を考えるならPGEConsで移行をテーマに研究成果を発表● 移行の行程を定義し、各工程での検討ポイントを調査
✔ 注目されがちなSQLやストアドの移行以外ももれなく調査
14/22
DB移行フレームワーク編後続の各ステップで収集する情報と、成果物を整理● 移行作業全体の工程を知る
15/22
構成検討・データ連携検討ここで決断が必要!決めるのは「あなた自身」ですよ!● PostgreSQLで本当に大丈夫なのか● ポイントは、本日冒頭の話
✔ OLTP系のシングル構成であれば、性能を実現できる(可能性が高い)✔ 複数台構成も可能、だが、サービスレベルの見直しは避けられない✔ DWH用途では、どこまで期待するか判断基準を誤らないこと
● データ連携の選択肢✔ 複数DBで連携しているものを一部だけPostgreSQLに置き換える?✔ 手段はいくつか提供されている
– 各種FDW(Foreign Data Wrapper:Database Link的な使い方)– OSSツール(トリガベースのテーブル単位レプリケーション)
16/22
定義移行、データ移行OSSツールOra2Pgが有用● 定義移行
✔ 使用できないオブジェクトの扱いが悩ましい✔ Ora2Pgの使い方に慣れ、それがハードルにならないように頑張る✔ PostgreSQLのほうがデータ型を細かく使い分ける(例:NUMBER → numeric?integer?real?)
● データ移行✔ Ora2Pgで中間ファイル生成✔ 文字コード変換を行う✔ 移行にかかる時間に縛りがある場合、ハードルが高いので注意
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
18/22
ストアド・プログラムの修正全面書き換えになるので覚悟が必要● PL/SQLのプロシージャ、ファンクション、パッケージ→すべてPL/pgSQLファンクションで書き換え✔ 実は公式のマニュアルに対応が書かれている✔ https://www.postgresql.jp/document/current/html/plpgsql-porting.html
プロシージャーーーーーートランザクション制御をアプリケーション側で実装し、PostgreSQLに担当させる部分はトランザクション制御を排除
プロシージャ内でのトランザクション制御が必須でなければそのままファンクション化
パッケージーーーーーーファンクションで代替し、スキーマでまとめるスキーマ名.ファンクション として、パッケージ名.サブプログラムと同じように呼び出すことができる。
パッケージ内で保持される定数・変数の考慮が必要 パッケージ定数:一時テーブルに格納 パッケージ変数:ファンクションで代替
19/22
本日のテーマ異種DBからPostgreSQLへ
ポスグレどれぐらい使えるの?
なにが違うの?
良い資料ある?
移行時の大変なところ
早急になんとかしたい!
まずやってみよう!
20/22
そんなDB移行、やってみませんか
ブログはじめました!「kkida-galaxy postgres」で
検索してね☆
おススメ投稿はこちら(だってそれしか無いから・・・)
今回用に投稿した二つの記事で、PostgreSQLを触った事の無い方が、とりあえず環境構築~移行のとっかかり的なステップまでを体験できます。 ・CentOS 7上でのPostgreSQL構築手順(RPM編) ・Ora2Pgでやってみよう!テーブル定義移行編
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 移行」などで検索
22/22
まとめ異種DBからPostgreSQLへ
ポスグレどれぐらい使えるの?
なにが違うの?
良い資料ある?
移行時の大変なところ
まずやってみよう!
OLTP系ならかなり広範囲に使えるリアルタイム集計は苦手だがゆくゆくは!アーキテクチャは似ているので理解しやすい
移行を本気で考えている方は、PGEConsの資料を読んでみましょう。どこが大変か、外せないところはどこか、明確にしておくことで失敗を回避しやすくなるのではないでしょうか。
PostgreSQLやOra2Pgの使い始め、それなりに情報が世に出ています。現時点の各最新版で試してみた記事を書きましたので、是非みなさまもトライしてみてください。