Oracle 使いなら手元におきたい! - 書評 - 詳解Oracle アーキテクチャ

久々に図書館で借りた本ネタです。最近は図書館通いの頻度も減り、ネットで読みたい本を読む方向に変わってきました。まぁそのせいで普段読まないジャンルの本に出会う頻度は極端に減りましたけど。

さて今回読んだ本は詳解 Oracle アーキテクチャというオラクル本です。前々から気になってたけど図書館で借りられるとは思いもしていなかった。この手の本は一読してからじゃないとスペースの無駄になるだけって本が結構あるので一読してみたかった。

でいきなり結論。Oracle マスター GOLD 相当の参考書数冊を実務に必要な部分のみこの1冊に凝縮した感じ。逆に言うと Oracle マスターとるための参考書としては情報不足です。ただコレから Oracle を運用して行かなくちゃならないという人にとっては、いつも手元においておきたい一冊です。

- スポンサーリンク -

以下、個人的備忘録。この辺も覚えていたはずなのにどんどん忘れていく自分が悲しいです。

P40. SQLの実行アーキテクチャ

SQLの実行→領域確保→解析→記述→出力変数の定義→入力変数のバインド→パラレル実行の準備→実行→
フェッチ→領域解放

P41. 解析処理では以下の7つの処理が行われる。初めて実行されるSQLは下記の全てのフェーズが処理(ハード解析)され、過去に解析済みのSQLは(x)の部分は処理されない(ソフト解析)ため高速。

構文検査→解析結果存在確認→定義検査(x)→解析ロック取得(x)→権限検査→実行計画策定(x)→解析結果保存(x)

P56. PL/SQLのネイティブコンパイル

Oracle ではストアドプロシージャの実行においてインタプリタ型とネイティブコード型の2つのモードが存在する。create procedure/function 文の定義時に実行可能な形式でDBに登録される際に、前者はmコードと呼ばれる中間言語に変換される。後者はcコンパイラでマシン語にコンパイルされて変換される。したがって、当然の事ながら後者の方が圧倒的にパフォーマンスが良い。

インタープリタ型での実行フェーズ

PL/SQLコード→mコード→プラットホーム依存コード→実行

ネイティブコード型での実行フェーズ

PL/SQLコード→プラットホーム依存コード→実行

初期化パラメータにおけるネイティブコンパイルの設定

PLSQL_NATIVE_LIBRARY_DIR = "バイナリコードを格納するディレクトリ名"
PLSQL_NATIVE_LIBRARY_SUBDIR_COUNT = "サブディレクトリを作成してファイル検索の処理分散をする場合に、数値を設定。通常0のままでOK。"
PLSQL_CODE_TYPE = "NATIVE"

モードの確認方法

select PLSQL_CODE_TYPE from DBA_PLSQL_OBJECT_SETTING;

P90. ロックの種類

Oracle ではDML文やDDL文を実行したときに必要とされるロックが自動的に取得されます。またロックの粒度としてはテーブルロックと行ロックの2に種類が存在します。いつもコードの値とロック名称の対応を忘れてしまうのでメモ。

モード名称 略称コード コード 説明
行共有テーブルロック RS 2 for update句を含むselectによるロック
行排他テーブルロック RX 3 変更したレコードに対してcommit/rollbackされるまでの排他ロック
共有テーブルロック S 4 テーブルに対する共有可能なロック
共有行排他テーブルロック SRX 5 行共有テーブルロック以外のロックとは共有できないロック
排他テーブルロック X 6 テーブル単位での排他ロック
排他行ロック TX 6 追加・変更・削除されたレコードに対する排他ロック

またどんなDML文を発行した際にどんなロックがかかるかもふと忘れてしまうときがあるのでメモ。

DML文 行ロック テーブルロック
select - -
insert into TX RX
update TX RX
delete TX RX
select...for update TX RX
lock table...in row share mode - RS
lock table...in row exclusive mode - RX
lock table...in share mode - S
lock table...in share row exclusive mode - SRX
lock table...in exclusive mode - X

P134. PCTFREEとPTCUSEDの設定基準値

updateが頻繁に実行され、レコードサイズが大きくなりがちなテーブルの推奨値は

PCTFREE = 20; PCTUSED = 40;

insert / delete が頻繁に実行され、レコードサイズに変更がすくないupdateも実行されるテーブルの推奨値

PCTFREE = 5; PCTUSED = 60;

主に検索用途のselectが頻繁に実行されるテーブル

PCTFREE = 5; PCTUSED = 40;

ちょっと疲れてきたので、後は気になる目次とメモのみ

P159. 代表的バックグラウンドプロセスの種類

10g からは MMAN っていうメモリマネージャ・プロセスが存在する。
プロセス名称 略称 役割
データベースライター DBWn データベースキャッシュの内容をデータファイルに書き込む。
ログライター LGWR REDOログバッファからREDOログファイルへ書き込む。
チェックポイント CKPT チェックポイントが発生した際にデータファイルのヘッダへ更新情報を記録する。
システムモニター SMON インスタンスの起動時に必要に応じてリカバリを実行する、
プロセスモニター PMON データベースバッファキャッシュをクリーンナップしたり、ユーザプロセスが使用していたリソースを解放する。
リカバラ RECO 分散データベースで使用され、分散トランザクションに関連する障害を自動的に解決する。
メモリマネージャ MMAN 自動共有メモリチューニングを行うプロセス。その他データベース管理の内部的な処理を行う。
アーカイバ ARCn アーカイブログモードの際に動作するプロセス。ログスイッチ発生時にREDOログファイルの内容を指定の領域にアーカイブログファイルとしてコピーする。
プロセススポーンナー PSP0 オラクル関連プロセスの生成とクリーンナップの処理を行う。

P165. その他のバックグラウンドプロセスの種類

結構知らないプロセス名がたくさんある。ASM用とRMAN用は忘れてOKだな。

P258. オプティマイザヒント一覧

ここも結構知らないヒント句の情報が載っています。「最適化アプローチと目標のヒント」、「アクセスパスのヒント」、「問い合わせ変換のヒント」、「結合順序のヒント」、「結合操作のヒント」、「パラレル実行のヒント」、「その他のヒント」の全7分類のヒント句がある。

P310. 書くパーティション方式のメリットとデメリット

レンジパーティション

メリット:連続する値の範囲で分割するため、どの度のパーティションにどんなレコードが含まれるかが明確
デメリット:基本的に増加していく列値を基準に分割するため、定期的なパーティションのメンテナンス作業が発生する。

ハッシュパーティション

メリット:他の方式に比べてパーティション間のデータ量が偏らない。
デメリット:どのパーティションにどんなレコードが含まれるかが不明確・予測不能。

リストパーティション

メリット:離散的なコード値のグループで分割するため、どのパーティションにどのレコードが含まれるか明確。
デメリット:変動しやすいコード値で分割すると、頻繁にパーティションのメンテナンス作業が発生する。

と内容が非常に濃いぃーです。


Oracle アーキテクチャ目次

CHAPTER 1. Oracle概要
 1.1 - Oracleアーキテクチャの概要
  1.1.1 - Oralceの基本構造
  1.1.2 - データベースの論理領域管理
  1.1.3 - スキーマ
  1.1.4 - Oracleグリッド・コンピューティング
 1.2 - Oracle 10gの新機能
  1.2.1 - データベース・リソース・マネージャ
  1.2.2 - Data Guard
  1.2.3 - フラッシュバック機能
  1.2.4 - ファイングレイン監査
  1.2.5 - Virtual Private Database
  1.2.6 - Automatic Woakload Repository
  1.2.7 - Automatic Database Diagnostic Monitor
  1.2.8 - スケジューラ

CHAPTER 2. プログラム開発
 2.1 - SQLとPL/SQLの解析
  2.1.1 - SQLとPL/SQLの概要
  2.1.2 - SQL
  2.1.3 - PL/SQL
  2.1.4 - 再解析防止の極意
  2.1.5 - ハード解析防止の極意
  2.1.6 - ストアドプロシージャの活用方法
  2.1.7 - ストアドプロシージャの高速化
 2.2 - トランザクション管理
  2.2.1 - トランザクションとACID特性
  2.2.2 - トランザクションの操作方法
  2.2.3 - トランザクション制御
 2.3 - 分離レベル
  2.3.1 - 分離レベルの概要
  2.3.2 - 分離レベルの構成
  2.3.3 - Oracleの分離レベル
  2.3.4 - 「コミット読み取り」分離レベルの活用術
  2.3.5 - データベースの静止による究極の分離レベル
 2.4 - ロッキングシステム
  2.4.1 - ロックの概要
  2.4.2 - ロックの種類
  2.4.3 - ロック待ちのトラブル解消
  2.4.4 - デッドロックを防ぐ

CHAPTER 3. データベース管理
 3.1 - メモリ管理
  3.1.1 - メモリ管理機能の進化
  3.1.2 - 自動共有メモリ・チューニング機能
  3.1.3 - 自動PGA管理
  3.1.4 - メモリ管理パラメータ
  3.1.5 - メモリ監視
 3.2 - 領域管理
  3.2.1 - 領域管理の概要
  3.2.2 - オブジェクトの領域管理
  3.2.3 - 表領域の管理
 3.3 - インスタンス
  3.3.1 - SGAの構成要素
  3.3.2 - バックグラウンド・プロセスの構成要素
  3.3.3 - バックグラウンド・プロセスの詳細
  3.3.4 - メモリ領域と物理ファイルの連動
 3.4 - ネットワーク
  3.4.1 - ネットワークの概要
  3.4.2 - Oracleの通信アーキテクチャ
  3.4.3 - クライアントとOracleサーバ間の文字コード変換
 3.5 - バックアップ/リカバリ
  3.5.1 - バックアップ計画の立案
  3.5.2 - バックアップの取得方法
  3.5.3 - メディア・リカバリの実施方法
  3.5.4 - OSコマンド
  3.5.5 - Oracle Recovery Manager
  3.5.6 - フラッシュバック
 3.6 - 解析手法(ログ解析)
  3.6.1 - ログファイルの種類
  3.6.2 - アラートログファイル
  3.6.3 - バックグラウンド・トレースファイル
  3.6.4 - ユーザー・トレースファイル
  3.6.5 - リスナーログファイル
  3.6.6 - ログファイルを利用した障害原因の解析
CHAPTER 4. パフォーマンス・チューニング
 4.1 - オプティマイザ
  4.1.1 - オプティマイザとは
  4.1.2 - 最適な実行計画の生成
  4.1.3 - オプティマイザ統計の詳細
  4.1.4 - オプティマイザ動作の制御方法
 4.2 - アプリケーション・チューニング
  4.2.1 - SQLチューニングの手順
  4.2.2 - SQL標準化
  4.2.3 - AUTOTRACEの活用
  4.2.4 - オプティマイザヒントの活用
  4.2.5 - プログラム開発に置けるリソース再利用の考慮
  4.1.6 - オブジェクトのメンテナンス

CHAPTER 5. エンタープライズ・アーキテクチャ
 5.1 - クラスタリング・アーキテクチャ
  5.1.1 - クラスタリング概要
  5.1.2 - RACのアーキテクチャ
  5.1.3 - RACの機能
  5.1.4 - クラスタ運用
  5.1.5 - RACのパフォーマンス・チューニング
 5.2 - パーティショニング
  5.2.1 - パーティションとは
  5.2.2 - パーティションの分割方式
  5.2.3 - レンジパーティション
  5.2.4 - ハッシュパーティション
  5.2.5 - リストパーティション
  5.2.6 - 各パーティション方式のメリットとデメリット
  5.2.7 - 組み合わせパーティション
  5.2.8 - パーティション索引
  5.2.9 - パーティションのメンテナンス
  5.2.10 - パーティショニングとストレージ装置によるRAIDの組み合わせ
  5.2.11 - 既存テーブルのパーティショニング
 5.3 - マイグレーション
  5.3.1 - マイグレーションの概要
  5.3.2 - マイグレーションの計画
  5.3.3 - Export,Import(Data Pump)
  5.3.4 - Data Pumpのアーキテクチャとパフォーマンス
  5.3.5 - トランスポータブル表領域機能
  5.3.6 - SQL*Loader
  5.3.7 - SQL*Loaderのデータアクセス方法とパフォーマンス
  5.3.8 - Oracle以外のDBからのマイグレーションを簡略化するためのツール
  5.3.9 - Oracleアップグレード
 5.4 - セキュリティ
  5.4.1 - データベースにおける背きぃりてぃ対策
  5.4.2 - Oracleにおけるセキュリティ対策
  5.4.3 - セキュリティ対策のソリューション
  5.4.4 - セキュリティ対策の罠
  5.4.5 - セキュリティチェックリスト
 5.5 - データガード
  5.5.1 - Oracleのデータ保護ソリューション
  5.5.2 - データ保護ソリューションの使い分け
  5.5.3 - Data Guard
  5.5.4 - Data Guardの保護モード
  5.5.5 - データベースの役割の入れ替え
  5.5.6 - 耐障害のレプリケーション
- スポンサーリンク -