2010/02/17 MySQLストレージエンジンの検証 【 OpenSource協議会 – IBM i 】 i to Open分科会 MySQLストレージエンジンの検証 1. ストレージエンジン(MySQL on IBM i、 DB2 for i)とは? 2. パフォーマンス測定方法 3. 測定結果 4. 考察 5. ストレージエンジンをどう使うべきか 6. 残された課題 ® MySQL on IBM i • Step 1: MySQL データベースをi5/OSでサポート – 2007年8月より利用可能 – MySQLベースのアプリケーションをi5/OS上で稼働させ ることを可能にした • Step 2: MySQLとDB2 for iを統合 – MySQLベースのアプリケーションがIBM iのDB2にデー タを格納できる – 2009年前半に利用可能 System iのお客様は使い慣れたDB2 for iのデータストアを使用しながら、数千もの新しい オープン・ソース・アプリケーションを使用することができる 2 © 2008 IBM Corporation ® MySQLストレージエンジンのアーキテクチャー • 2階層構造のデータベース・サーバー – 上位階層はSQLの構文解釈と最適化機能を含む – 下位階層は複数のストレージエンジンで構成される • SQL階層はストレージエンジンがテーブルの管理を行う部分からは独立 • クライアントはSQLステートメントの実行にどのエンジンが使用されるかを関 知する必要はない • DB2 for i はIBMDB2Iという名称でサポート MySQL データベース・エンジン 構文解釈 最適化 データへの アクセス CREATE TABLE ALTER TABLE で選択 Pluggable ストレージエンジン MyISAM InnoDB Memory MySQL Cluster Other* IBMDB2I (DB2 for i) 3 © 2008 IBM Corporation ® なぜIBMDB2Iか? 既存のRPG アプリケーション 既存のRPG アプリケーション 新規 アプリケーション Java/JDBC/ODBC DB2 Driver PHPのサポート DB2 for i DB2 for i PHPによる パッケージ etc. PHPによる パッケージ etc. MySQLのサポート 新規のRPG/DB2 アプリケーション MySQL MySQL IBMDB2Iの サポート IFS on IBM i 新規のPHP アプリケーション IBMDB2I DB2 for i 4 © 2008 IBM Corporation ® MySQL IBMDB2Iの概要 IBM i RPG/COBOL /CLP DB2 for i テーブル IBM i (DB2) インターフェース IBMDB2I PHP MySQL テーブル MySQLインターフェース MySQL on IBM i PASE • • IBMDB2IをストレージエンジンとしてMySQLでテーブルを作成すると、実体は DB2 for iのテーブル(物理ファイル)がIBM iネイティブ環境に作成される 作成されたDB2 for iのテーブルにはIBM iネイティブ・インターフェース(CLコマン ド、RPG、DB2のSQL)からアクセスが可能 5 © 2008 IBM Corporation ® IBMDB2Iの主な特徴と考慮点 MySQLインターフェースで作成されたテーブルおよび索引のみがIBMDB2Iで認 識される – DB2のCREATE TABLEステートメントやCLコマンドのCRTPFで作成した表/物理ファイル、索引/ 論理ファイルはMySQLから認識されない – 第二段階でこの機能の実装を予定 テーブルに関連づけられるストレージエンジンはいつでも変更することが可能 – ‘ALTER TABLE myisamtable ENGINE=ibmdb2i;’ のように容易に変更が可能 – 変更操作の間すべてのデータがコピーされる – 既存のMySQLによるWebアプリケーションのデータをDB2のデータに移行することが可能 MySQLインターフェースによる操作にはIBM iのユーザーは不要 – MySQLのユーザー認証および権限管理のしくみが使用される – MySQLインターフェースで作成された表や索引をIBM iのインターフェースでアクセスする場合は IBM iのユーザー認証/権限が必要 ダブルバイト文字は物理ファイル上ではユニコード(UTF-16)で格納される – MySQLインターフェースで指定する日本語可能のコードページはIBM iの物理ファイルではUTF16(CCSID1200)として定義される 6 © 2008 IBM Corporation MySQLストレージエンジンパフォーマンス測定 目的 1.ストレージエンジン IBMDB2iとInnoDBで テーブルアクセスのパフォーマンス性能の差を検証する 2.ストレージエンジン経由とNative経由 (RPG、SQLRPG)でのパフォーマンス性能の差を 検証する MySQLストレージエンジンパフォーマンス測定 測定方法 7種類のプログラム/データベース/ストレージエンジンを使い 4種類のデータ操作で処理速度を測定する データベース/ プログラム ストレージエンジン PHP(SQL) MySQL/IBMDB2i PHP(SQL) MySQL/InnnoDB PHP(SQL) DB2/400直アクセス RPG DB2/400直アクセス SQLRPG DB2/400直アクセス PHP(SQL) DB2/400直アクセス RPG DB2/400直アクセス INDEX/LF あり あり あり あり あり なし(JOINファイル) なし(JOINファイル) データ操作内容 INSERT UPDATE SELECT 1万件中 100件を抽出 1万件 レコード 作成 スペック OS:6.1 プロセッサ:#8327(3800CPW) メモリ:2G 1万件中 1万件中 100件を 100件を 更新 削除 なし データ操作はそれぞれ5回行い平均値を測定する ディスク:420G DELETE MySQLストレージエンジンパフォーマンス測定 SELECT測定結果 0.1 0.09 0.08 0.07 処 理 時 間 0.06 0.05 ( 秒 0.04 ) 0.03 0.02 0.01 0 PHP/IBMDB2i PHP/InnoDB PHP/DB2 400 RPG/DB2 400 SQLRPG/DB2 400 MySQLストレージエンジンパフォーマンス測定 SELECT測定結果(JOINファイル) 12 10 処 理 時 間 8 6 ( 秒 ) 4 2 0 PHP/DB2 400 RPG/DB2 400 MySQLストレージエンジンパフォーマンス測定 INSERT、UPDATE、DELETE 測定結果 0.2 0.18 0.16 0.14 処 理 時 間 0.12 0.1 ( 秒 0.08 ) 0.06 0.04 0.02 0 PHP(MySQL /IBMDB2i) INSERT UPDATE DELETE PHP(MySQL /InnoDB) PHP(DB2/400直アクセス) RPG(DB2/400直アクセス) ※INSERTのみ処理時間結果の100分の1で記載してあります。 SQLRPG(DB2/400直アクセス) MySQLストレージエンジンパフォーマンス測定 考察 1. MySQLのテーブルに直接アクセスするInnoDBの方が IBMDB2i経由でNative DBにアクセスするより パフォーマンスが良い 2. INSERTを除けばInnoDBはRPGと遜色のない パフォーマンスとなった 3. 1テーブルへのSELECTではPHPがRPGより約8倍処理時間が かかっていた。JOINテーブルへのSELECTでは約36倍となった (注)今回SQLのチューニングは行わなかった。 実施した場合、パフォーマンスは大きく変わってくる可能性がある ストレージエンジンをどう使うべきか 分科会のレコメンデーション 1. ストレージエンジンに向いた用途を考えて利用する 2. 既存のアプリで作成したDBを直接ストレージエンジンからアクセスできな いことに留意する 3. SQLでのアクセスする場合バッチ処理は避けた方が良い。( SQLのチューニ ング方法に十分精通している場合は別) 4. MySQLとNative DB の違いをよく理解したうえでマッピングを行う。 メンバーの概念がない ダブルバイトはUTF-16 (CCSID1200) 、項目属性は’G’となる 5. セキュリティ対策は万全に IFSへのウィルス感染 SQLを利用したデータ改ざん(アプリの脆弱性をついた攻撃) ストレージエンジンをどう使うべきか - 用途を考えて利用する IBMDB2iは既存のIBM iのDB資産を活かしながら、これと連動した Webアプリケーションを構築していくうえでの有力な手段である。 但しRPGでNative DBをアクセスするのと同じにPHPからのアクセスが できるわけではない。 想定される主な用途 1.MySQLのデータを既存アプリに取り込む 2.既存アプリのデータをMySQLに複製して使用する 3.情報系アプリケーションからのMySQLデータの利用 4.MySQLのデータをレコードレベルでレプリケーションする ストレージエンジンをどう使うべきか - 用途を考えて利用する 1.MySQLのデータを既存アプリに取り込む 例: ECサイトのPHPパッケージを導入し、発注のトランザクションデー タを既存の受注システムに取り込む ® MySQL IBMDB2Iの活用例 既存アプリケーションへの新規アプリケーション・データの取り込み IBM i(DB2 for i) IBM i ネイティブ 既存アプリケーション 既存アプ リ・データ バッチ処理 データ取り込み 処理 バックアップ MySQL 新規アプ リ・データ MySQL on IBM i MySQL 新規アプリケーション ジャーナル 管理 IBMDB2I MySQLを使用するPHPのパッケージなどで構築したアプリケーションから既存アプリケーショ ンに必要なデータを取り込む処理をDB2インターフェースで作成することができる 16 © 2008 IBM Corporation ストレージエンジンをどう使うべきか - 用途を考えて利用する 2.既存アプリのデータをMySQLに複製して使用する 例: ECサイトのPHPパッケージを導入し、既存システムでの入出庫処理 後の在庫マスターをパッケージのマスターにコピーする ® MySQL IBMDB2Iの活用例 既存データを利用する新規MySQLアプリケーションの構築 IBM i(DB2 for i) 既存アプ リ・データ IBM i ネイティブ 既存アプリケーション バッチ処理 複製機能 既存アプリ 複製データ MySQL on IBM i ジャーナル 管理 IBMDB2I MySQL 新規アプリケーション バックアップ IBMDB2I MySQL 新規アプ リ・データ MySQLを使用するPHPのパッケージなどで新規アプリケーションを構築する際に、マスター・ データなどの既存データの取り込みを容易に行うことができる 18 © 2008 IBM Corporation ストレージエンジンをどう使うべきか - 用途を考えて利用する 3.情報系アプリケーションからのMySQLデータの利用 例: 日次の売り上げ情報をWebのポータルからアクセスするPHPのアプ リケーションを作成し、全社員が共有する。PHP/MySQLのプログ ラミングスキルが社内に無い場合でも、参照されるDBさえ社内で用 意すれば表示するプログラムを外注するのは比較的容易。 ® MySQL IBMDB2Iの活用例 情報系アプリケーションからのMySQLデータの利用 IBM i(DB2 for i) 情報系アプリケーション IBM i ネイティブ 既存アプリケーション 既存アプ リ・データ データの加工 MySQL on IBM i MySQL 新規アプリケーション データの 抽出・蓄積 IBMDB2I MySQL 新規アプ リ・データ データの 参照・分析 既存または新規の情報系アプリケーションに既存データと同様にMySQLアプリケーションの データを加えることができる 20 © 2008 IBM Corporation ストレージエンジンをどう使うべきか - 用途を考えて利用する 4.MySQLのデータをレコードレベルでレプリケーションする MySQLのデータがIFSにある場合は、レコードレベルの変更をOSで 検知できない。 既存のアプリケーションとは独立したWebアプリケーションでもス トレージエンジンによってDB2に書き込んだ場合は、レコードレベ ルでのリプリケーションが可能になる。 例: PHPパッケージでMySQLに書き込まれた発注トランザクションデー タをリプリケーションしてディスク障害や災害に備える。 ® MySQL IBMDB2Iの活用例 HAソリューションへのMySQLデータの組み込み IBM i(DB2 for i) IBM i ネイティブ 既存アプリケーション 既存アプ リ・データ クロスサイト・ ミラーリング MySQL on IBM i MySQL 新規アプリケーション HABPソリューション (ORION,MIMIX.Data Mirror) IBMDB2I MySQL 新規アプ リ・データ 切り替え可能 IASP 既存のHAのしくみにMySQLアプリケーション・データを容易に加えることができる 22 © 2008 IBM Corporation 残された課題 今期の分科会活動でできなかった以下の点を今後検証していきたい。 1. ストレージエンジンを変更したときにデータはコピーされる? ⇒InnodeからIBMDB2i、の変更をALTER TABLEで試してみる。逆も行う。 2. MySQLインターフェースによる操作にはIBM iのユーザーは不要? ⇒ジャーナルから実行ユーザーやジョブを確認して、ユーザーの認証をどのように行う べきかを検証する。 3. 既存アプリケーションとのダブルバイトのデータ交換をどのように行うべきか? ⇒CCSID=5035、5026など多くのユーザーで使われている文字コード間のコ ピーは可能か試してみる。 ⇒項目属性は’G’をRPGでアクセスする場合の留意点 (SO/SIの処理をどうするか) を明らかにする。 4. SQLでアクセスする場合のパフォーマンスチューニングを試してみる。
© Copyright 2024 Paperzz