目次
第1部 データベースの仕組みと操作の基本
第1章 データベースの基本とDB2の仕組み
1-1 データベースに求められる5つの機能
- 複数人で同時に使える ~隔離性
- データ操作が「全部成功」か「全部失敗」かになるようにする ~原始性
- 高速に処理する ~高速性
- 障害が起こってもデータを失わない仕組み ~耐久性
- 柔軟に問いあわせる(SQL)
1-2 DB2の内部構造を知る
- 「インスタンス」と「データベース」
- 基本的なSQL 処理とディスクアクセス機能
- コラム ローデバイスが利用されなくなった理由
- トランザクションログまわりの機能
- ユーザー認証と権限
第2章 DB2の基本的な操作と設定をマスターする
2-1 インスタンスを作成/起動する
- UNIXでインスタンスを作成するには
- Windowsでインスタンスを作成するには
- インスタンスを起動する
- サンプルデータベースのファイルを準備する
2-2 データベースと表を作成する
- データベースを作成する
- データベースに接続する
- 表を作成する
- 表にデータを入れる
- 制約やインデックスを作成する
- データを再編成し,統計情報を更新する
- データベースへの接続を解除する
2-3 DB2のコマンドを実行する
- 「システムコマンド」と「CLPコマンド」
- UNIX系OSでDB2のコマンドを実行するには
- Windows系OSでDB2のコマンドを実行するには
2-4 データベースを作成する前に考慮しておきたい4つのこと
- 文字コードを選択する
- 文字の並び順を選択する
- ページサイズを決める
- データベースパスとストレージパスを決める
2-5構成パラメータを設定する
- データベース構成パラメータ(DB CFG)
- データベースマネージャ構成パラメータ(DBM CFG)
- レジストリー変数
- SQLでパラメータを参照するには
2-6本番環境で使用するための最低限の設定
- ログを設定する
- 高速で表領域とは別のデバイスにログを置く
- ログの最大サイズを決定する
- 循環ロギングをアーカイブロギングに切り替える
- サーバとは別のマシンから接続するには
第2部 日々の運用のための基本ノウハウ
第3章 バックアップでデータを守る
3-1バックアップの基本をおさえる
- 「しない」がないのはバックアップだけ
- RAIDはバックアップではない
- バックアップを取得するには
- バックアップが進行中かどうかを確認するには
- バックアップの結果を確認するには
3-2 実際のバックアップ運用に求められるもの
- データベースを停止せずにバックアップする
- バックアップイメージのサイズを縮小する(差分バックアップ)
- バックアップイメージのサイズを縮小する(圧縮)
- バックアップイメージを検査するには
- 静止モードで作業する
- 元のデータをリストアするには
3-3バックアップ計画を立てる
- バックアップ計画が必要になる理由
- バックアップ計画を立てるのに必要な8つの情報
- BACKUPコマンドのオプションのトレードオフを把握する
- お仕事紹介システムを例にバックアップ計画を作成してみる
3-4 その他のバックアップ方法
- EXPORTコマンドでバックアップするには
- 高速コピー機能を使うには
- ハードウェア移行のためにバックアップイメージを使うには(物理設定が異なるサーバにリストアするには)
3-5小~中規模データベース向けのバックアップ運用
- バックアップイメージとアーカイブログを置くディスクを確保する
- データベースの設定を変える
第4章 表を再編成してパフォーマンスを維持する
4-1 表の再編成の基本
- なぜ表の再編成が必要か
- 何を基準に再編成するのが“最適”か
- 再編成はいつ実行すべきか
- 「今」再編成が必要かどうかを判断するには
- インプレースとシャドー・コピーの違いを理解する
4-2 効率的に表を再編成する
- 再編成の回数を減らす方法① PCTFREE
- 再編成の回数を減らす方法② クラスターインデックス
- 表の再編成を運用に組み込む際の目安は
第5章 統計情報を更新してアクセスプランの精度を上げる
5-1 アクセスプランと統計情報が必要になる理由
- SQLを実行するまでの流れとアクセスプランの役割
- 統計情報が必要になる理由
5-2 統計情報を更新するための基本
- 統計情報をシステムカタログ表に格納するには
- 統計情報の精度を上げるには
5-3 効率的に統計情報を更新するには
- いつ統計情報を更新すべきか?
- RUNSTATSの実行時間を短くするには
- 統計情報を更新するリスクと対処法
第6章 自動保守で管理を効率化する
6-1 自動保守の基本
- 自動保守を有効にするには
- パラメータの親子関係に注意する
- BACKUPの自動保守で指定できること
- REORGの自動保守で指定できること
- RUNSTATSの自動保守でできること
6-2 自動保守機能を利用する時の注意点
- 統計情報のリアルタイム更新とファブリケーション
- 自動保守はどこまで利用できるか
第3部 安定運用のための監視・問題判別のコツ
第7章 監視で事前に問題を発見する
7-1 何を,何のために監視するのか
- 監視は問題判別と地続き
- 問題を未然に防ぐ
- 重要なのは定常時の状態を把握しておくこと
- 何を監視すべきか
- ハードウェア層の監視で大事なこと
- OS 層の監視で大事なこと
- アプリケーション層(DB2)の監視で大事なこと
7-2DB2の「今の状態」を知る
- 今の状態を知るための2つの機能とモニターエレメント
- 表関数とは
- モニタービュー/スナップショット管理ビューとは
- スナップショットを取得するには
- モニター表関数/モニター・ビューの3つの分類
- 簡単にサマリー情報を得るには
- EXPORTでCSVファイルに出力する
7-3 DB2のリソースを監視する
- 監視しておくべき項目の目星をつける
- 監視するべき3つのリソース
- DB2のプロセスを監視する
- DB2が使用しているメモリの状況を把握する
- DB2が使用しているディスクの状況を把握する
7-4 DB2のパフォーマンスを監視する
- 項目1 トランザクション数
- 項目2 バッファープールヒット率
- 項目3 トランザクションあたりのディスク読み書き数
- 項目4 アプリケーションに戻された行数のうち,物理的に読み取った行数の比率
- 項目5 ソート(並べ替え)に費やされた時間
- 項目6 ロックウェイト時間の合計
- 項目7 デッドロック数とロック・タイムアウト数
- 項目8 ダーティースティールの回数
- 項目9 パッケージキャッシュ挿入数
- 項目10 トランザクションログがディスクにフラッシュされるのを待機した時間
第8章 トラブル解決のための問題判別の考え方
8-1 問題判別の4ステップ
- 問題判別はなぜ難しいのか
- Step1 落ち着いて,何か変えていないかを確認する
- コラム よくあるトラブル
- Step2 大きく切り分ける
- Step3 データベースサーバ(DB2)内部を切り分ける
- Step4 ログを確認し,OSコマンドで切り分ける
- db2diag.logを効率よく読むには
- db2diag.logを移動させておく
8-2 原因が特定しきれない場合の対処法
- 1 現状を観察する
- 2 仕掛けて待つ
8-3 イベントモニターの使い方
- 実行されているSQLステートメントを記録して,異常な動きのSQLやクライアントを識別する
- デッドロックの情報を取得する
8-4 DB2が異常終了した際の情報を取得する
- 異常終了時にdb2cosを自動的に実行させる
- 特定のエラーが発生した時にdb2cosを実行する
- 監視と問題判別のノウハウはパフォーマンスチューニングにも生きる
- コラム db2diag.logをSQLで検索するには
第4部 ひとつ上の性能を引き出す ~パフォーマンスチューニング
第9章 パフォーマンスチューニングの基本
9-1 パフォーマンスのチューニングの基本的な考え方
- パフォーマンスチューニングとは何か
- ハードウェアの増強は効果的。しかしなかなか行われない
- チューニングの範囲を決めるための2つの手段
- パフォーマンスチューニング 5つの心得
- 影響範囲から選択肢を考える
9-2 ベンチマークを行う
- 良いベンチマークとは
- 遅いSQLを発見するには
- コラム 実行済みSQLはどこに保存されるのか
- ベンチマークの2つのポイント
- DB2のベンチマークツール(db2batchコマンド)を使う
- コラム 動的SQLと静的SQL
- ベンチマークを通して「なぜ遅いのか?」を把握する
9-3 アクセスプラン(実行計画)を把握する
- アクセスプランとは?
- 表スキャンとインデックススキャンの違い
- 統計情報とアクセスプランはどのような関係にあるのか
- なぜアクセスプランを確認する必要があるのか
- EXPLAINコマンドでアクセスプランを確認する
- アクセスプランの読み方
- アクセスプランの善し悪しとフィルターファクター
- 見積りはズレるもの
- ジョインの演算子を把握する
- コラム アクセスプランをユーザが指定するには(最適化プロファイル)
第10章 パラメータを調整して高速化する
10-1 メモリ関連のパラメータを調整する
- パラメータ変更の大半はメモリに関するもの
- DB2のメモリ管理とパラメータ
- セルフチューニングメモリー管理(STMM)で自動的にチューニングする
10-2 更新処理を高速化する
- 更新処理に時間がかかる場合は(ログの速度がボトルネックの場合)
- 更新処理に時間がかかる場合は(ダーティースティールが多発している場合)
10-3 SQLを高速にする
- SQLの準備(PREPARE)に時間を消費している場合
- ソートオーバーフローが発生している場合
- ロックの問題に対処する(1) デッドロックが発生している場合
- ロックの問題に対処する(2) ロック用メモリが不足している場合
- ロックの問題に対処する(3) 更新ロックを待っている場合
- 接続にとても時間がかかるケース
第11章 物理設計を変更して高速化する
11-1 インデックスを調整する
- 最も重要なのは「インデックスの調整」
- インデックスが自動的に作成される2つのケース
- コラム ユニーク制約とユニークインデックスの違い
- 不要なインデックスを探す
- インデックスを作成する4つの目安
- 複合インデックスを作成する
- インデックス作成時のオプション
- DB2に最適なインデックスを試算させる
- 制約を付けてアクセスプランの精度を上げる
11-2 バッファープールとログを調整する
- バッファープールを分離して重要データ,重要インデックスへのアクセス速度を維持する
- 更新処理を速くする(ログの高速化)
11-3 表スペースをチューニングする
- 表スペースのアクセス速度が最終的なボトルネック
- 表スペースの種類を把握する
- 表スペースの構成:コンテナ/ページサイズ/エクステントサイズ
- 表スペースを作成するには
- 表スペースを指定して表を作成する
- 高速な表スペースを作成するには
- ローデバイスは使用すべきか?
- コンテナの追加/削除とデータのリバランス
11-4 自動ストレージで表スペースの管理を簡略化する
- 自動ストレージの仕組み
- 自動ストレージを使うには
- CREATE DATABASE時に表スペースの詳細を指定するには
- 自動ストレージ環境で表スペースを作成するには
- 後からストレージパスを追加するには
- ストレージパスを削除するには
11-5 DB2固有の機能を使って高速化する
- SELECTを高速にするために結果を事前に計算しておく(MQT:マテリアライズ照会表)
- インデックスが効きづらいSELECT 文を高速化するための2つの方法
- MDCを使ってデータの物理配置を変える
- パーティション表でデータの物理配置を変える
11-6 データを圧縮する
- 大量に格納されたNULLとデフォルト値を圧縮する
- 行の圧縮機能でディスクI/Oを削減する
- 圧縮の状況を確認するには
- 圧縮すべきか迷った場合は
- インデックスを圧縮するには
- 辞書方式のメリットとデメリット
- 全文検索を高速に実現するには
付録
1 DB2の概要と稼働条件
- 系統の違い
- エディションの違い
2 無料で使えるDB2 Express-Cと導入方法
3 開発言語と開発環境
- Java(JDBC/Java EE)
- PHP
- Ruby/Ruby on Rails
- Python/Django/SQLAlchemy
- Perl
- 接続可能なクライアントについて
4 参考文献と情報源
- 参考文献
- 情報源