第1章 パフォーマンスを最優先したSQLの書き方とチューニング
SECTION 1 SQLの実行計画から読み取る索引の効果的な使い方
SQLを処理する流れ
実行計画の取得方法
SQL統計情報の基本的な見方
実行計画の基本的な見方
索引の適切な作成とは
結合と索引
ソートと索引
まとめ
SECTION 2 アクセスブロック数を最小化するSQLチューニングの定石
ハッシュ結合を使う
アンチジョインを使う
何でも1つにまとめない
UNION ALLの削除
副問い合わせの妙
分析関数を知っておこう
型に気を付けよう
関数に気を付けよう
マテリアライズドビューの使用を検討する
性能情報を見る上での注意点
とても長い実行計画と向き合うには
まとめ
第2章 体験的・現場のトラブルシューティング 緊急対応編
SECTION 1 処理の遅延とパフォーマンスに関するトラブルシューティング
はじめに
トラブル 1 システムのどこが遅いのか分からない
トラブル 2 待機イベントが多い
トラブル 3 ロック待ち(enqueue)が発生
トラブル 4 ディスクスペースが足りない:log file switch(archiving needed)待ち
トラブル 5 ディスク性能が足りない:I/Oの遅延
トラブル 6 I/O回数が多くてSQLが遅い
トラブル 7 CPUを多量に消費している
トラブル 8 実行計画が変わってしまう
トラブル 9 CPU使用率などのグラフがおかしい
SECTION 2 DBのダウン時やエラー発生時のトラブルシューティング
トラブル 1 インスタンスが落ちてしまった
トラブル 2 Oracleに接続されていませんというエラーが発生
トラブル 3 データベースに接続できない
トラブル 4 SQLの実行でORA-1555が発生
トラブル 5 TEMP表領域が足りないというエラーが発生
トラブル 6 表領域が足りないというエラーが発生
SECTION 3 DBの破壊や誤ったデータ削除に関するトラブルシューティング
トラブル 1 データを消してしまった
トラブル 2 データベースが立ち上がらない(完全にリカバリする)
トラブル 3 データベースが立ち上がらない(不完全にリカバリする)
トラブル 4 ノーアーカイブログモードのリカバリ
SECTION 4 すべてのトラブルにおいて共通する対応のコツ
トラブル確認のコツと基本的な対応手順
暫定対応と恒久対応
TAR(技術問い合わせ)のコツ
ログやマニュアルの見方
まとめ
第3章 体験的・現場のトラブルシューティング 見える化編
SECTION 1 一時的な処理遅延が発生するトラブル
トラブル 1 CPU使用率は高くないが一時的な処理遅延が発生
トラブル 2 ハングに近いスローダウンが起きた
システム運用の現場で役立つ「見える化」
SECTION 2 Oracleのアーキテクチャと「DBの見える化」に関する基礎知識
OracleのアーキテクチャとDBを見える化するための情報
SECTION 3 V$SESSIONで取得したデータを活用して解決する
トラブル 3 一時的に処理ができなくなったがV$SESSIONとV$SYSSTATを記録済み
トラブル 4 どこかで処理が止まっているがalert.logにはメッセージが出ていない
トラブル 5 夜間バッチの速度が毎日変動する
トラブル 6・7 停止している業務処理をリアルタイムに調査/対処する
おわりに
第4章 Oracleの文字化け徹底対策
SECTION 1 典型的なトラブル事例に見る文字化けの仕組み
DBAに任命!
文字化けが発生!
どうして化けているのか特定しろ!
キャラクタセットの変更だ! しかし・・・
移行失敗だ!
どこで失敗しているかを探せ!
手順を修正し移行を再実行!
文字化けはしなくなったが・・・
SECTION 2 迅速で適切な対策のために文字コード体系の歴史を知る
体系的な知識の大切さ
文字セットとエンコーディングの違い
世界初の文字コード「ASCII」
メインフレームで利用される「EBCDIC」
各言語圏でASCIIを拡張した「ISO 646」
多言語文字の混在表現を実現した「ISO 2022」
漢字とかなを表現する「JIS X 0208」
電子メールで日本語を表現する「ISO-2022-JP」
UNIX上で日本語を表現する「EUC-JP」
標準の日本語文字コード「Shift-JIS」
機種依存文字/外字
文字コードの世界標準「Unicode」
まとめ
SECTION 3 Oracle+Java+Webアプリの文字化け対策
Oracleのデータベースキャラクタセット
OracleとJavaの文字コードの違い
3層構造Webアプリの文字コード変換
どのキャラクタセットを選択すべきか?
文字コードを確認するには
データベースキャラクタセットに関するQ&A
まとめ
第5章 快適!コストベースオプティマイザ操縦術
SECTION 1 オプティマイザの概要と歴史
RBOとCBOの違い
オプティマイザの操作
オプティマイザの歴史
まとめ
SECTION 2 システム規模別の統計情報運用術
3タイプのシステム例
統計情報の運用(自動統計収集)
コスト重視タイプ
バランス重視タイプ
リスク回避重視タイプ
まとめ
SECTION 3 CBOにさらに効率的な実行計画を生成させるワザ
動的サンプリングを使用した対処方法
システムタイプ別動的サンプリング活用方法
初期化パラメーターの運用
SQLの運用で重要なバインド変数とバインドピーク
まとめ
第6章 DBMSから見たストレージ技術の基礎と活用
SECTION 1 アーキテクチャから学ぶストレージの基本と使い方
ディスクのアーキテクチャ
ストレージのインターフェイス
SANとNASはどこがどう違うのか
複数のディスクを組み合わせて信頼性を高めるRAID
ストレージの仮想化が進み物理的な複雑さを隠蔽
ストレージにはどんな障害があるのか
同期I/Oと非同期I/O
書き込みI/Oと同期書き込み(書き込みの保証)
ライトキャッシュが効果的なアプリケーションとは
ファイルシステムとrawデバイス
RDBMSのI/O周りのアーキテクチャ
これからストレージはどうなっていくのか
その他の注目すべき機能など
まとめ
SECTION 2 ディスクを考慮した設計とパフォーマンス分析
キャッシュの存在
スループット(I/O数)重視で考える
ディスクのI/Oネックを避ける設計
表とインデックスの物理ディスクは分けるべきか
ディスクの設計方針「S.A.M.E.」
DBシステムの耐障害性について
ディスクを含めたDBシステムのパフォーマンスについて
DBMS側でしか行なえない性能分析とOracleの待機の分析方法
まとめ
第7章 Oracleの正しいアップグレード指南
SECTION 1 アップグレードの基礎知識
はじめに
アップグレード時に必要な事前確認
SECTION 2 6つのアップグレード手法
(1)アップグレードスクリプトによるアップグレード
(2)Export/Importユーティリティによるアップグレード
(3)データアンロードツール+SQL*Loaderによるアップグレード
(4)トランスポータブル表領域によるアップグレード
(5)DB Link接続によるアップグレード
(6)Pro*Cの移行アプリによるアップグレード
SECTION 3 アップグレード手法の選択基準
アップグレード元DBのバージョン制限
データ量とダウンタイム
索引の再作成時間と統計情報の再収集時間
追加のディスク領域
データベース構成の変更
各手法のまとめ
おわりに