JaSST’13 Tokyo セッション D3-1

コンサルタントが語るDBシステムのテストの現場
日本オラクル株式会社
テクノロジーソリューションコンサルティング統括本部
マネージングプリンシパルコンサルタント
大塚 信男
2013/01/30

Agenda

2

1.

講師紹介

2.

オラクルコンサルティングサービス紹介

3.

企業システムにおけるDBの位置付け

4.

DBレイヤにおけるテストの目的

5.

性能テストの落とし⽳

6.

よくあるDBテストの失敗例

7.

性能テストをさらに有用なものにするには

8.

適切な性能テストのための課題

9.

DBシステム安定稼働に向けて

10.

オラクル社テスト製品のご紹介

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

講師紹介 大塚信男– 96年日本オラクル新卒⼊社。Oracle Applicationsマーケティング技術担当として配属。Sunプ

ラットフォームでのサイジングテスト、ベンチマークテストなどを担当– 99年サポートサービス本部へ異動。社内向けデータベース内部動作解説トレーニングコースの開発および講師を担当。

– 02年コンサルティングサービス本部へ異動。DBコンサルタントとしてサービスデリバリを担当。
 主なプロジェクト：– 某自治体税務システム– 某証券取引所情報系システム
 その他、性能改善プロジェクト、運用状況アセスメント等多数– 08年よりDBコンサルティングチームのマネージャを務める– 著書（共著）：
 「門外不出のOracle現場ワザ」（翔泳社）
 「新・門外不出のOracle現場ワザ〜エキスパートが明かす運用・管理の極意」（翔泳社）
3

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

オラクルコンサルティングサービス紹介

4

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

企業システムにおけるDBの位置付け
Webサーバ（UI）
APサーバ（Logic）
DBサーバ（Data）

 DB(RDBMS)– データの永続化– 同時処理要求に対する⽭盾の無いデータの保存と取出– 大規模データへの高速アクセス– 障害発生時には、DBを共有する複数業務が停止– 設計／サイジングによっては、システム全体における重大な性能ボトルネックとなりうる 低速なHDD（RAMと比較して）への書込み／読込みによる性能ペナルティ メモリ上の排他制御機構による競合発生
 不適切な索引設計など、SQLチューニング不⾜によるSQL

ストレージ

処理遅延

※このセッションでは、このようなDBを使用するシステムのことを『DBシステム』と呼んでいます。

5

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

DBレイヤにおけるテストの目的

6

テスト種類

目的・内容

方式検討テスト

理論値ではなく実測値による比較や実現可能性の実証が必要な場合。

基盤テスト

インストールとセットアップの妥当性評価。業務開発側へ環境をリリースする前の最低限のテスト。起動・停止、接続確認テストなど。

障害テスト

可用性が重視されるDBに特徴的なテスト。各種コンポーネントに疑似障害を発生させ、自動復旧やアプリケーションへの影響を確認。フェイルオー
バー構成の場合は、系切換時の停止時間や処理性能の縮退率などを確認。
リストア・リカバリの所要時間測定など。

性能テスト

応答性能、スループット性能が要件を満たしていることを確認する。単体応答性能、負荷性能、限界負荷性能、⻑期⾛⾏テストなど。

運用テスト

バックアップ手順とリストア・リカバリ手順確認。各種定期メンテナンス（ログ・ローテーション、断⽚化解消処理など）手順確認。各種監視デー
タの正常取得状況確認。

移⾏テスト

データ移⾏手順および移⾏処理性能の確認。

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

特にノウハウが必要とされる

性能テストの不備がもたらすトラブル例
 DB性能テストを実施していたとしても、システムのサービスイン直後、またはしばらく経ってから、下記のようなトラブルに⾒舞われることがあります サービスイン直後、多数のユーザーが同時に使用し始めると、全ての画面応答が著しく遅くなり、業務にならない リソース不⾜エラーが度々発生し、ユーザーにエラーが返されたり画面がフリーズするため、業務が不安定になる

 サーバがダウンしたり、ハング状態になり、全ての業務が停止する
 負荷ピーク日に、バッチ処理がオンライン時間帯に突き抜け、オンライン開放時間（業務開始時間）が遅れる

 ピーク日でもないのに、ある日突然、特定のSQLが性能劣化し、特定の画面のレスポンスが遅延する。場合によっては、これが原因でサーバのリソース枯渇を引き起こし、システム全体でスローダウンが起こる問題を事前に把握するためには、適切な性能テストが不可⽋
7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

各種性能テストによる確認事項
 単体テスト– 単体応答性能要件への適合性

 負荷テスト– 同時実⾏性要件、スループット要件、サーバのキャパシティ状況の要件への適合性の確認

 限界負荷テスト– ユーザ数やデータ量を増幅し、どこまで耐えられるか– システムの最大キャパシティと、限界状態で何が起こるかを事前に把握 ⻑期⾛⾏テスト– 負荷テストを⻑時間（運用上定義されたサーバの定期停止間隔など）実⾏し、稼働状況の安定性（性能の安定性、リソース使用量の安定性）を確認

8

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

性能テストの落とし⽳
 テスト方法の不備
 テストをしないことのリスク テストの限界– サービスイン前のテストのみによる性能保証の限界– サービスイン後の性能管理

9

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

よくあるDB性能テストの失敗例
テスト方法の不備

 負荷試験の失敗①– データアクセスが局所化されたテストシナリオ
 たとえば、「ユーザーAが、自分の発注明細100件を参照する」という処理を単純増幅（秒間100回など）して投⼊する試験を⾏っている

テスト時

アクセスするデータが全てキャッシュヒットするため、高性能本番稼動後アクセスされるデータが広範囲にわたり、ディスクへのアクセスが増大。I/Oボトルネックが発生してスローダウン

10

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

アクセスする共有メモリ上のページが少量アクセスされるデータが広範囲にわたり、共有メモリ上の多くのページを参照。それにともない、プロセス毎のPTE(Page Table Entry)メモリが肥大化して、OSメモリ枯渇が発生。クラスタウェア
によって異常と判断され、最終的にサーバ停止。

よくあるDB性能テストの失敗例
テスト方法の不備

 負荷試験の失敗②– 精度の低い疑似データ
 たとえば、負荷試験用のテスト・データを、少量の疑似データを単純増幅することで準備している

テスト時増幅された疑似データの値の分布に最適化されたSQL実⾏計画で処理される

本番稼動後

本番データの値の種類や分布がテストデータとは異なっているため、異なるSQL実⾏計画が選択される。一部のSQLが本番データに対して最適な実⾏計画が選ばれず、大幅な性能劣化が発生。

11

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

※データの量や分布といった条件により、OracleのSQL実⾏計画が変化することに対する認識が低いケース。
テストデータでは、表の列Aの索引を使用したアクセスが高速でも、本番データでは、列Bを使うべきで、その列には索引が作られていなかったため、表のフルスキャンが起きる、といった問題が起きる。

よくあるDB性能テストの失敗例
テスト方法の不備

 負荷試験の失敗③– スループット目標達成のためのテストを、シリアル実⾏でテストしていた たとえば、「秒間200件の注⽂⼊⼒」という要件を、シリアルに投⼊（単一スレッドによる逐次実⾏）

テスト時

本番稼動後

121件あたり5ms未満の応答時間で処理され、要件を達成

複数スレッドが同時に注⽂⼊⼒処理を実⾏したとき、表の⾏値を使用した採番の実装が原因で⾏ロック待ちが発生。また、単調増加する値のINSERTが原因で、Right-growing Indexの状態となり、ブロック競合が激化。平均応答時間が大幅遅延。

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

※同時実⾏性による影響を評価する、という本来の負荷試験の目的を理解せずにテストが実⾏されているケース

よくあるDB性能テストの失敗例
テスト方法の不備 ⻑期⾛⾏試験の失敗– 運用上定義された連続運転時間と同等の⻑期⾛⾏試験を⾏っていなかった
 たとえば、「週次再起動」の運用要件であったが、48時間程度の⻑期⾛⾏試験を実施

テスト時

本番稼動後

13

試験期間を通し、性能要件は満たしていた。
リソース消費量の推移には注目していなかった。
Oracleが使用する共有メモリの領域の一部が、徐々に肥大化し、72時間程度経過したところで上限値に達し、メモリ割当てエラーが発生。さらにメモリ再利用のための内部処理のオーバーヘッドが増加し、内部ロック競合による大幅な応答遅延が発生。

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

※運用要件と全く同等の期間のテストではな
くても、⻑期⾛⾏試験時のリソース消費量の推移を分析することで、潜在的なリスクを検出することができます。

よくあるDB性能テストの失敗例

テストをしないことのリスク：あらゆる変更はリスクである
 一⾒、影響がないと思われる変更が引き起こした障害例：– CPUネックのシステムにCPUを追加したら余計にCPU使用率が高騰し、バッチ処理が大幅遅延
 複数のCPUキャッシュ間のデータ整合性維持のオーバーヘッド。CPU数が多い方が、一度あたりのオーバーヘッドが大きくなる

 同じ表にアクセスする同時セッションが多数ある場合、Oracleが頻繁にアクセスするメモリ領域があることが原因（現在は修正済みの製品不具合）– 表データの⼊替え処理の高速化のため、データロード処理をパラレル化したら、表アクセスが大幅遅延

 設計上、パラレルロードを使用する予定だったが、実装時に有効化するためのコマンドが⾜らず、シリアルロードされていた

 コマンドを追加し、パラレルロードを有効にしたところ、当該表にアクセスする問合せの一部が大幅遅延
 表のHWMまでデータをスキャンするFull Table Scan処理が遅延した
 データのロード前にDELETEでデータを消す運用をしていたが、DELETEの場合、表データを空にしてもHWMを引き下げない。シリアルロードはHWMより下にデータをロードするが、パラレルロードはHWMより上にデータをロードするため、データの⼊れ替えの度に表が肥大化していっていた14

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

サービスイン前のテストのみによる性能保証の限界
 テストで「想定外の問題が無いこと」を保証はできない（テストの一般原則）– 想定したシナリオの範囲内で問題がないことを確認できるのみ

 一般的に企業システムは、サービスイン後に変化し続ける– データ量、データ特性、ユーザー数、ユーザーの利用特性（よく利用する機能、1日当たりのトランザクション数など）– サービス改善や追加のためのAP修正、新規APリリース– ワークロードが変化すれば、それまでの性能テストによる確認は保証にならない 変化する状態に適応する機能– 自動最適化機能（SQLオプティマイザ、自動メモリ管理、など）が『常に』変化に対して最適なアウトプットを出せるかどうかを、テストで確認することはできない（全数テストは不可能）

テストで確認すべきことと、その後の運⽤管理の中でマネジメントしていくことを、分けて考える必要がある
15

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

サービスイン後の性能管理
 継続的なモニタリングと分析（キャパシティ管理）– 予兆を捉え、対策を事前に実施– Oracle Databaseは、予兆を捉えるための稼働統計情報を豊富に提供している– どの統計をどのような閾値で監視するか、また、複数の統計から、DB内で起きていることを推測し、適切な対応を取るにはノウハウが必要

 Oracle Enterprise Manager自動診断機能によるレポーティング
 コンサルティングサービス

 定期メンテナンスの実施– 断⽚化解消（時間の経過にともなう性能劣化の解消）– オプティマイザ統計収集（時間の経過にともなう性能劣化の解消、変化への対応）– 計画的なパッチ適用（今起きていない問題が、今後も起きないとは限らない）

16

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

性能テストをさらに有⽤なものにするには
Input
負荷（ワークロード）•同時ユーザ数•トランザクション・ミックス•アクセスデータ範囲

Process
DBシステムOutput
性能指標•レスポンス•スループット※負荷テストのモデル

 テストのアウトプットである性能指標の目標達成状況を確認するだけでは、テスト自体の誤りや、本番環境で起こり得る問題の予兆を⾒落とす可能性がある プロセスをブラックボックスとせず、その中で起こっていること（テスト時のDB稼働状況）を適切に分析することが重要

17

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

テスト時のDB稼働状況分析•リソースを大量消費しているのはどの処理か？原因は？
•応答性能が問題になりそうな処理はどれか？

•処理時間の制約（ボトルネック）となっている要因は何か？
•待機要因と競合の構造は？
•リソースキャパシティには余裕があるのか？

18

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

•もう少し負荷が増えたらどんなことが起こりそう？
•継続して監視が必要な項目と監視
閾値は？
•稼働状況が健全すぎるのは、テス
ト方法のミスではないか？

適切な性能テストのための課題
 システムの性能に対して楽観的すぎる姿勢– 「だろう運転」：現実を自分に都合よく解釈してリスクに目を向けない– プロジェクトの短納期／低予算の要望が背景– 動くシステム（機能要件を満たす）を作ることで精一杯。性能は運任せ、もしくはユーザーに内緒で先送り インフラ・アーキテクチャ（SW/HWの構成や内部構造）に対する知識不⾜、テストの詳細設計のスキル不⾜、テスト結果の妥当性を評価するスキルの不⾜、DBの稼働状況の健全性を評価するスキルの不⾜

19

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

性能とテストの原則
 性能は設計してシステムに作りこむもの
 必要な性能のシステムが都合よく自然にできあがったりはしない– HWの進歩や低価格化、およびそれをうまく利用するSW技術の進歩（Oracle Exadataなど）により、今までボトルネックとなっていたものが、大幅に緩和されてきているのは事実– しかしながら、これらのアドバンテージを利用して、複数システムを統合したり、Big Dataを活用するサービスの開発など、さらに大規模で複雑なシステムが作られるようになり、新しいボトルネックが生まれている
性能は設計してシステムに実装し、テストによって確認する、という原則は変わらない

20

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

DBシステム安定稼働に向けて インテグレーションベンダー– 必要なテストの内容と重要性をユーザーに訴求し、十分なテスト計画をプロジェクトに盛り込むべき– テストした範囲と残ったリスクをユーザーに正しく説明し、合意を得るべき– テスト結果をアウトプットのみで評価するのではなく、内部の稼働状況を評価することで、テストの品質を向上し、テストからより多くの知⾒を引き出すべき ユーザー（発注者）– 性能に関するリスクを認識し、性能品質を得るには投資が必要であることを認識す

べき– ベンダーのテスト計画を精査し、サービスイン直前に、負荷テスト期間を1週間だけ置くようなプロジェクト計画を提出してきたベンダーは、信用できないと思うべき。性能管理がまるで分かっていないか、予算縮⼩のための辻褄合わせであり、サービスイン間際、もしくはサービスイン後に地獄を⾒るのは明らか

21

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

Oracle Application Testing Suite• ユーザー視点のテストを簡単かつ迅速に実現– Oracle Functional Testing• 機能/回帰テストやデータ投⼊を自動化– Oracle Load Testing• 負荷テストによる性能検証– Oracle Test Manager• テスト⼯程の管理• Oracle製品群に対応– Oracle E-Business Suite– Siebel CRM, PeopleSoft, JD Edwards, Hyperion, …
– Oracle Application Development Framework

22

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

Oracle Load Testing
負荷テストのレポート

コンテンツの表示•テスト中に発生したエラーのコンテンツもリアルタイムに確認

レポート•テスト実施中もリアルタイムでテスト状況を確認

23

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

Oracle Load Testing

Oracle Enterprise Manager との連携

24

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

Oracle Real Application TestingOracle Database 11g からの新機能
Enterprise Edition （EE） のオプション機能
テスト品質の向上や⼯数削減、運用管理コストの削減を実現
以下の機能より構成
ワークロード SQL Performance Analyzer（SPA）
 Database Replay （DB Replay）のキャプチャ

テスト環境の構築

より高度な分析には、オプションとして以下の Pack を併用
 Diagnostic Pack for DB Replay
 Tuning Pack for SPA

25

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

ワークロードのリプレイ

リプレイ・クライアントのデプロイ

26

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

27

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.