Transcript と1 - IBM
SQLServerの日中バックアッ プとインスタント・リストア の適用 ~測定結果レポート 2009/07/29(水) Wikiをご覧になったお客様へのお断り 当資料は、筆者が2009/07に特定の環境下で実際に実施したテストの結果をまとめ たものです。皆様のキャパシティ・サイジングの際の「ご参考」になるかと考え、非公式に 公開させていただくものです。 従いまして、お客様の環境で同じ結果、同じパフォーマンスが出ることを保証するもの ではございません。 当資料はIBMの正式なレビューを受けておりません。IBMとしての正式な資料でもござ いません。 上記、ご了解の上ご高覧頂きますよう、お願い申し上げます。 1 中堅・中小企業様のDBサーバーの現状 1日1回の夜間バックアップ コールド・バックアップ テープ主体の運用 ログを絡めた復旧運用なし 2 目標・お客様にとっての利点 目標 中堅・中小企業様のデータベース・サーバーをFastbackでデータ保護したい お客様にとっての利点 3 1. 1日1回の夜間バックアップを日中毎時のオンライン増分バックアップにすればテープ運 用が不要になり、障害復旧時のデータ・ロスも最大1時間分に抑えることができる (RPOが改善) 2. 回復時にインスタント・リストアを利用すれば業務復旧までの時間を大幅に短縮でき る(RTOが改善) 3. C:\ドライブも一緒にとればOSも同時に保護できるので一石二鳥 目標・課題 検証ポイント 1. 日中1時間毎にバックアップした場合、本番業務への影響はどの程度か? (応答時間やシステムのリソース) 2. サーバー復旧時にインスタント・リストアは本当に使いものになるのか? (戻しは可能なものの遅くて使いものにならない、などの事態を招かないか?) 3. リポジトリーのクリーンアップの負荷はどの程度か? 4 検証実施の想定と実施内容(サマリー) 環境~中堅中小企業向けの小規模DBサーバーを想定 ► DBサーバー、Fastbackサーバーとも Dual Core×1、メモリー2GBの環境で測定 ► 日中はデータ・エントリー型の業務で、多くても1秒に1件程度の負荷(OLTP型)を想定 1. 増分バックアップが本番業務中へ与える影響 ► DB負荷ツール(JMETER)でアプリケーション負荷を再現 ► 上記ツール実行中に10GBの増分スナップショットを実行 ► 各々の単独実行時と同時実行時で様子を比較する 2. インスタント・リストア中のDB業務のレスポンス ► DBの存在するドライブを初期化してインスタント・リストアを実行 ► DB負荷ツール(JMETER)でアプリケーション負荷を再現 ► 上記を同時に実行してケース1.の単独実行時の結果と様子を比較する 3. リポジトリーのクリーンアップ ► 5 上記のテストで実行したスナップショットを削除してクリーンアップする 検証環境(サマリー) FastBackサーバー機 お客様のDB機(※1) 1GB LAN (※1) ① Fastback SQLServer ② DB負荷ツール 製品+DB+LOG 約200GB リポジトリー 1TB 事前の測定ではバックアップが 35~40MB/秒で採取できる環境 ※1….msconfigでDual Core×1相当に制限 ※2….msconfigで2GBに制限 6 2009/07/22(水),7/23(木) @ 渋谷SWCOCにて実施 検証環境(詳細) 1GB LAN マシン仕様 Fastbackサーバー(Fastback 5.5.4) マシン x3650q3 IP 172.22.128.13 モデル System x 3650(7979-P7D) CPU QuadCore Xeon x5460 3.16GHz 2way(※1) ディスク 300GB SAS HDD ×6(5本でraid-5) メモリ 16GB RAM(※2) ネットワーク ギガビット イーサ ディスク構成 #1 OS #2 #3 5本でRAID-5を構成 #4 #5 リポジトリー #6 ソフトウエア構成 Windows2003 standard 32bit Fastback 5.5.4 7 業務サーバー(SQLServer2005 Enterprise SP3 ) x3650q1 172.22.128.11 System x 3650(7979-P7D) QuadCore Xeon x5460 3.16GHz 2way(※1) 300GB SAS HDD ×6(5本でraid-5) 16GB RAM(※2) ギガビット イーサ OS 負荷サーバー(JMETER) x32501 172.22.128.125 System x 3250 QuadCore Xeon x3220 2.4GHz 1way 73GB SAS HDD ×2 (RAIDなし) 4GB ギガビット イーサ OS ワーク 5本でRAID-5 データベース Windows2003 standard 32bit Fastback 5.5.4 client SQLServer 2005 Enterprise SP3 32bit Windows2003 standard 32bit Apache JMETER 検証の結果・所見サマリー(1/2) 8 増分バックアップが本番のレスポンスやリソースに与える影響は、どうか? ► OLTP型の処理であれば業務レスポンスへの影響は限定的。 高負荷でもSQLは10-20msのオーダーで返っており「使用に耐えない」レベルではない。 ► 高負荷でもバックアップ時間は80%程度の悪化に抑えられる ► (今回の負荷はSMBのOLTP系データ・エントリー業務としては多目と思われる) インスタント・リストア中のDBは使用に耐えるか? ► リストア中でもSQLServerの起動は15Sで完了 ► 10多重の場合はSQLが平均40-50msで返っている。 無風状態の時は7msなので約7倍遅くなっているが、「使用に耐えない」レベルではない。 ► 50多重の場合はSQLが平均360msで返っている。 無風状態の時は7msなので約50倍遅くなっており、同等の負荷レベルの場合はユーザーが遅さ を体感する可能性がある。ただ、障害回復中であるのでユーザー数を絞って優先的に行うべき業 務のみを先行実施する、などの運用は可能と思われるし 「一切使えない」よりは明らかにマシと思 われる。 検証の結果・所見サマリー(2/2) 9 クリーンアップ中のリソースの使用状況は? ► クリーンアップ中のFBサーバーのCPU負荷は50%前後で一定(今回は「高優先度」で実行) ► クリーンアップはCPUを喰うしIOも多数発生するので、バックアップと競合する可能性がある 日中のスケジュールは望ましくない。 夜間利用しない業務であれば夜間、夜間もバッチ等が発生するならば週末、など バックアップやDRの実行と重ならない時間帯に実行するのが望ましい。 ► ざっくり言って150GB前後のDBのクリーンアップで増分が実データの2-3倍程度であれば、Dual Core×1のサーバーで1時間もあれば終わる、とも言える。 (もちろんDBの更新量によるのだが、実環境では今回ほどの更新量は発生しないのではないか? とも思われる) 1. 日中バックアップ 10 検証の方式 ①JMETERでSQLServerを10GB分更新する(増分バックアップのデータ生成) ②DB負荷ツールを使用してSQLServerに対して負荷をかける ③その状態でFastbackによりC:\ドライブ+ DB 10GBのバックアップを行う →レスポンスへの影響は? システムリソースの状況は? お客様のDB機 FastBackサーバー 機 1GB LAN ①&② Fastback リポジトリー 1TB ③ SQLServer 製品+DB+LOG 約200GB ※1….msconfigでDual Core×1相当に制限 ※2….msconfigで2GBに制限 11 DB負荷ツール テスト・ケース一覧 内容 12 1-(1) 無風状態で10GBのDB更新を行った直後にバック アップ(増分バックアップ量=約5GB) 1-(2) DBに対し軽めの負荷(10多重)をかける 1-(3) 1-(1)と1-(2)を同時に実行 1-(4) DBに対し重めの負荷(50多重)をかける 1-(5) 1-(1)と1-(4)を同時に実行 比較のポイント 1-(1),(2)の結果と比較 1-(1),(4)の結果と比較 増分バックアップが本番業務中へ与える影響~所見 13 影響は、どうか? ► OLTP型の処理であれば業務レスポンスへの影響は限定的。 高負荷でもSQLは10-20msのオーダーで返っており「使用に耐えない」レベルではない。 ► 高負荷でもバックアップ時間は80%程度の悪化に抑えられる ► (今回の負荷はSMBのOLTP系データ・エントリー業務としては多目と思われる) リソースは? ► バックアップ中のDBサーバーのCPU負荷は15-6%増。 ► バックアップ中のFBサーバーのCPU負荷は40-50%。 CPU的にはジョブ2多重が限界か.(但しネットワークのボトルネックがあるのでリニアに伸びない) ► Dual Core×1程度のマシンでも問題なし ► ボトルネックは主にネットワークとIOとなる ► メモリーは一定量で変化なし(DB機-1.8GB、FB機-500MB) リソースの状況 CPU - DBサーバー、FBサーバーとも余裕あり IO - 1-(3),(5)ともIO競合が発生すると100%を超える(※1) ネットワーク – 40MByte/秒でありギガビット・イーサネットの上限に達していると言える ※1..%DiskTimeはWindowsのパフォーマンス・モニターでデータ採取したため100%を超える場合あり。 従って厳密な数字ではありません。ケース間の比較に於いて見ていただくのがよろしいかと思います。 後で調査したら 100%-(Idle time)で見るべき、との情報がありましたが、データを採取していませんでしたので ご了承ください 14 バックアップ実行時間の変化 今回のバックアップ量は増分10GBで 実行時間は約5分 ► 1分で2GB相当。中堅中小企業の伝票 入力型アプリケーションでの日中1時間あた りのデータベース更新量としてはかなり多目 と言える。 当然ながら、アプリケーション稼動中に バックアップをとるとIOの競合によりバック アップ自体のパフォーマンスは低下する 今回のケースでは10多重の場合は殆ど 変化なし(若干向上しているが誤差の範 囲内と思われる) 50多重の場合は処理の効率が約80% に低下したが、実運用で問題になるよう な低下ではないものと考える 15 DB 10多重の場合の応答時間への影響 ケース比較 上=単独実行 下=バックアップと同時実行 結果 平均応答時間は7ms→9ms スループットは89.0→87.3 KB/secは562.1→551.5 評価・所見 この程度の負荷なら、バックアップ はアプリへの影響は殆ど影響なし 16 DB 50多重の場合の応答時間への影響 ケース比較 上=単独実行 下=バックアップと同時実行 結果 平均応答時間は9ms→15ms スループットは418.6→397.9 KB/secは2643.2→2514.3 評価・所見 平均応答時間が60%増となって いるが、平均15msであれば「遅く て使用できない」レベルとは思われ ない。(十分に早い) 17 資料) データベース(SQLServer)の構成 G:\ドライブ(300GB) 製品、システムDB、ログ、ユーザー DBすべてを同一のドライブに配置 (I/O分散的にはPoorな環境) 製品導入ディレクトリー 大きいテーブル×1 システム・カタログ類 (Master等) SQLServerログ 小さいテーブル×10 合計150GB テーブルのレイアウトは同一 Primary Keyあり dbo.Order1 (500万行=50GB) 1行=1K order2 order3 order4 order5 order6 order7 order8 order9 order 10 order 11 Order2~11 = 各100万行=10GB 18 資料) 負荷のパターン 1トランザクションの処理内容 •Order1~Order8までの8種類のテーブルから各々に対し結果セット10行取得(800行) •Order9~Order11までの3テーブルに対して1行更新 •→1Trx合計 select=8回 update=3回 •利用するキーはランダムに選択。 (=バッファーヒットは限定的) すべてプライマリ索引経由のアクセス(=テーブルの全スキャンなし) 19 多重度 説明 単独実行時の負荷目安 1 軽め 10 10台のPCから連続して上記のトラン ザクションが継続的に投入されている 環境 1秒あたり6-7TRX 2 重め 50 50台のPCから連続して上記のトラン ザクションが継続的に投入されている 環境 1秒あたり30-32TRX ※SMBのDBサーバーと してはかなり重い負荷 資料) JMETERの例 多重度 設定可能 止めるまで 永久にループ 500万件からランダム にキー選定 当該キーから10件分を SELECT 100ms待機 ここは結果セットの確認用 なので今は意味なし 20 2. インスタント・リストアの業務への影響 21 検証の方式 ①G:\ドライブをフォーマットし、その状態でFastbackによりインスタント・リストアを行う ②リストアの最中にDB負荷ツールを使用してSQLServerに対して負荷をかける →レスポンスはどのくらい? システムリソースの状況は? お客様のDB機 FastBackサーバー 機 1GB LAN ② Fastback リポジトリー 1TB ① SQLServer 製品+DB+LOG 約200GB ※1….msconfigでDual Core×1相当に制限 ※2….msconfigで2GBに制限 22 DB負荷ツール テスト・ケース一覧 23 内容 比較のポイント 2-(1) インスタント・リストア実行中にDBに対し軽めの負荷 (10多重)をかける 無風状態での状況(1-(2))と比 較 2-(2) インスタント・リストア実行中にDBに対し重めの負荷 (50多重)をかける 無風状態での状況(1-(4))と比 較 インスタント・リストア中の本番業務は使用に耐えるか?~所見 24 使用に耐えるか? ► リストア中でもSQLServerの起動は15Sで完了 ► 10多重の場合はSQLが平均40-50msで返っている。 無風状態の時は7msなので約7倍遅くなっているが、「使用に耐えない」レベルではない。 ► 50多重の場合はSQLが平均360msで返っている。 無風状態の時は7msなので約50倍遅くなっており、同等の負荷レベルの場合はユーザーが遅さ を体感する可能性がある。ただ、障害回復中であるのでユーザー数を絞って優先的に行うべき業 務のみを先行実施する、などの運用は可能と思われるし 「一切使えない」よりは明らかにマシと思 われる。 インスタント・リストア中の本番業務は使用に耐えるか?~所見 25 リソースは? ► リストア中のDBサーバーのCPU負荷は10-14%増。 ► バックアップ中のFBサーバーのCPU負荷は数%程度。これはDBの細かいIOを優先して処理して いるためと思われる。 ► JMETERを停止するとリストアのパフォーマンスが向上する動きが見られた。JMETERによるDBア クセス中はリストアは中断状態になるため、リストア自体の完了は長期化する可能性がある。 ただし、リストアが進めば進むほどディスク上にデータが見つかるので業務のパフォーマンスはよくなる はずであるし、業務的にDBが一定の応答時間で利用できている限り、インスタント・リストア自体 の全体完了時間が長期化しても何ら支障はないものと考える。 ► Dual Core×1程度のマシンでも問題なし ► メモリーは一定量で変化なし(DB機-1.8GB、FB機-500MB) リソース状況 26 DB 10多重の場合の応答時間への影響 ケース比較 上=単独実行 下=バックアップと同時実行 結果 平均応答時間は7ms→45ms スループットは89.0→65.1 KB/secは562.1→410.9 評価・所見 27 DB 50多重の場合の応答時間への影響 ケース比較 上=単独実行 下=バックアップと同時実行 結果 平均応答時間は9ms→360ms スループットは418.6→106.4 KB/secは2643.2→672.1 評価・所見 28 Lessons Learned DBの起動時間 ► インスタント・リストア開始直後にSQLServerを起動したが15sで起動した ► 同様にManagement Studioは30秒で起動した DB負荷をかけて必要なブロックを戻している間、元々のインスタント・リストアは中断してい るように見受けられる。(DBリクエストを優先しているので正しい処理) DBリクエストを停止するとリストアが再開され、リストアのパフォーマンスも急激に改善した。 左記はネットワークのパフォーマンス。 赤い矢印の時点でJMETERを停止して業務負荷をなくしたと ころ、本来の40MB/秒の転送に戻っている 29 3. クリーンアップ処理 30 検証の方式 検証作業の過程で採取したバックアップをクリーンアップし、リソース状況と所要時間を測定 FastBackサーバー 機 お客様のDB機 対象外 Fastback リポジトリー 1TB ※1….msconfigでDual Core×1相当に制限 ※2….msconfigで2GBに制限 31 1GB LAN クリーンアップの負荷は?~所見 32 リソースは? ► クリーンアップ中のFBサーバーのCPU負荷は50%前後で一定(今回は「高優先度」で実行) ► クリーンアップはCPUを喰うしIOも多数発生するので、バックアップと競合する可能性がある 日中のスケジュールは望ましくない。 夜間利用しない業務であれば夜間、夜間もバッチ等が発生するならば週末、など バックアップやDRの実行と重ならない時間帯に実行するのが望ましい。 ► メモリーは一定量で変化なし(FB機-500MB) ► 今回は40JOB,372GBの解放に42分かかった。今回はC:ドライブとG:ドライブを同一のポリシーに 含めて同時に実行している.(ゆえにジョブ数は各々20) 。ログによればC:ドライブのクリーンアップは 増分の累積 約20GBが2分で完了した。同様にG:ドライブの増分の累積 370GBが40分であり、 約20倍とほぼ比例関係にあるように見受けられる。ゆえに世代数、ジョブ数などはクリーンアップ実 行時間にあまり関係がなく、クリーンアップする(累積した)増分データ量が主要因と思われる。 ► 逆の表現をすれば、ざっくり言って150GB前後のDBのクリーンアップで増分が実データの2-3倍程 度であれば、Dual Core×1のサーバーで1時間もあれば終わる、とも言える。 (もちろんDBの更新量によるのだが、実環境では今回ほどの更新量は発生しないのではないか? とも思われる) クリーンアップ実行結果 [2009/07/23 20:15:36]-> FBSS1516I [2009/07/23 [2009/07/23 [2009/07/23 [2009/07/23 20:17:39]-> 20:17:44]-> 20:57:38]-> 20:57:44]-> FBSS1517I FBSS1516I FBSS1517I FBSS1520I ポリシー: ‘MSSQL’ ボリューム: C オン x3650q1 上でクリーンアップが開始されました。 ポリシー: ‘MSSQL’ ボリューム: C オン x3650q1 上でのクリーンアップが正常に終了しました。 ポリシー: ‘MSSQL’ ボリューム: G オン x3650q1 上でクリーンアップが開始されました。 ポリシー: ‘MSSQL’ ボリューム: G オン x3650q1 上でのクリーンアップが正常に終了しました。 クリーンアップが終了し、リポジトリーから [372,800] M バイトが解放されました。 Windowsの「イベント・モニター」に出力す るので監視&後から確認可能 33 実行前リポジトリー状況 20世代40JOB分 34 実行後リポジトリー状況 5世代10JOB分 35 Lessons Learned クリーンアップの途中でリポジトリーの使用率が上昇する動きがみられた ► お掃除のためのワークエリアを使っているため ► リポジトリーに余裕がない状況ではクリーンアップ自体ができなくなる可能性?-今回は未検証 ► リポジトリーの使用率のしきい値警告を若干低めに設定して、ワークの分の余裕が常に確保できる ようにする運用が望ましい 実行前 実行中 実行後 36 参考資料 37 マシンのディスク(ドライブ)構成 DBサーバー Fastbackサーバー 38 1-(1) 無風状態のバックアップ ~CPUとディスクIOの様子 CPU% % Disk Time ※1..%DiskTimeは Windowsのパフォーマン ス・モニターでデータ採取し たため100%を超える場合 あり。従って厳密な数字で はありません。ケース間の 比較に於いて見ていただく のがよろしいかと思います。 39 1-(1) DBサーバー 40 Fastbackサーバー 1-(2) 10多重のDB操作 ~CPUとディスクIOの様子 41 1-(2) DBサーバー 42 1-(3) バックアップ+10多重のDB操作を同時に実行 43 1-(3) DBサーバー 44 Fastbackサーバー 1-(4) 50多重のDB操作 ~CPUとディスクIOの様子 この1分間のCPU は異常値? 45 1-(4) DBサーバー 46 1-(5) バックアップ+50多重のDB操作を同時に実行 47 1-(5) DBサーバー 48 Fastbackサーバー 2-(1) インスタント・リストア中のDB10多重 49 2-(2) インスタント・リストア中のDB50多重 50 3-(1) クリーンアップ 51 ご参考) CPUやメモリーを絞る方法 - msconfig 当ツールで設定してリブートすれば マシンに上限を設定可能 X365 Quad Core×2way=8CPUのマシンが DualCore(2CPU)×1wayに見える (メモリーも同様に2GBと見えている) 52