topimg.jpg


スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

Oracleのデータ構造について


データ構成


●テーブルスペース(表領域)
・複数のセグメントから構成される
・OS側では1つ以上の物理ファイルで構成される
・代表的な表領域として、下記①~⑤が挙げられる。
 ①システム表領域(SYSTEM)
 ⇒データディクショナリ表が格納される
  →データディクショナリには、オブジェクトの管理情報や
   ストアドサブプログラムのコンパイル済みコード等が格納される
 ②システム補助表領域(SYSAUX)
 ⇒OEM等のOracleコンポーネント製品で利用される表が格納される
 ③UNDO表領域(UNDOTBS1等)
 ⇒1つ以上のUNDOセグメントが格納される
 ④一時表領域(TEMP等)
 ⇒PGAのソート領域が足りなかった場合、この領域にもソート処理に必要な情報が格納される
 ⑤ユーザ表領域
 ⇒アプリケーションで使用される表や索引を格納するユーザ用の表領域
・表領域の管理方法には以下の2種類がある
 ①ローカル管理
 ⇒データファイルのヘッダにエクステント管理情報を格納する
  →データディクショナリ表へのIOが発生しないため、若干性能がいい
  →表領域のエクステントサイズの変更ができない
  →更新処理のほとんどがダイレクトパスインサートである等、特殊な事情
   がない限り、ローカル管理方式を採用することがメジャー
 ②ディクショナリ管理
 ⇒データディクショナリにエクステント管理情報を格納する
  →データディクショナリ表へのIOが発生するため、若干性能が悪い
  →表領域のエクステントサイズの変更ができる
  →大量のエクステントを解放する処理が行われた場合(TRUNCATEやコアレス等)、
   STエンキュー(領域管理トランザクションのキュー取り出し処理)が大量に発生し、
   一時的に大幅な性能劣化を招く
  

●セグメント
・複数のエクステントから構成される
・表や索引のオブジェクト=セグメント
・ソート用やUNDO用のようなOracleが自動的に管理するセグメントもある
・セグメントの空きエクステントがなくなった場合、表領域から新たにエクステントが割り当てられる
・代表的なセグメントとして、下記①~⑨が挙げられる。
 ①表
 ②表パーティション
 ③索引
 ④索引パーティション
 ⑤UNDOセグメント
 ⑥一時セグメント
 ⑦LOB
 ⑧LOBパーティション
 ⑨クラスタ表(異なる表で共通の列があった場合、複数の表間で同じデータブロック共有する)
ハイウィータマーク(HWM)によって、セグメント内でどこまでのブロックが使用済みになっているかを認識している。あるセグメントに新しいトランザクションによって新規に行が挿入されるとき、HWMより下に十分な容量の未使用ブロックが存在していなかった場合、新しいエクステントがそのセグメントに割り当てられる。
 ⇒HWMより上のブロック(新しく割り当てられるエクステント)
  →未フォーマットかつ未使用
 ⇒HWMより下のブロック(現在まで獲得しているエクステント)
  →割り当て済みだが未フォーマットかつ未使用
  →フォーマット済みかつデータが格納されている
  →フォーマット済みだがデータが削除されたため未使用
  のいずれか
  

●エクステント
・複数のブロックから構成される
・表や索引を作成する際、エクステントサイズを指定できる。
・エクステントの数が多すぎるとパフォーマンスが低下する可能性もある
 ⇒目安としては100以上のエクステント数を持つセグメントが多数あれば、パフォーマンスに
  悪影響を与えることがあります。特に索引のエクステントが多いと、RangeScanで検索する
  SQL処理でのパフォーマンスが低下します。

  引用
  表領域とディスクI/Oの要注意ポイント
  http://www.atmarkit.co.jp/fdb/rensai/oraobstacle08/oraobstacle08_1.html
・エクステントの数とサイズは記憶域パラメータでセグメントごとに設定される。優先順位は下記①~③において、①>②>③の順。
 ①セグメントのSTORAGE句
 ②表領域のSTORAGE句
 ③Oracle Databaseのデフォルト
 

●Oraleブロック
・Oracleが扱うデータの最小単位
・1つ以上のOSブロックで構成される
・ブロックサイズは表領域作成時に指定でき、2KB、4KB、8KB、16KB、32KBのいずれかを指定できる
・ブロックの構成として、下記①~③で主に構成される
 ①オーバーヘッド
  ⇒下記3つの情報が格納される
   →ブロックヘッダ
    データブロックのディスクアドレスやセグメントタイプ、トランザクション履歴情報等など、
    一般的な情報が格納される。また、トランザクションエントリ用の領域も確保される。
   →表ディレクトリ
    このブロックに行を持つ表についての情報が格納される
   →行ディレクトリ 
    このブロックの行データの中に実際に存在する各行個別の情報(アドレス情報等)が格納される
  ⇒オーバーヘッドは上から順に書き込まれていく
 ②空き領域
 ⇒オーバーヘッドと行データを格納するために、事前に確保している
 ⇒下記2つのパラメータによって、ブロック内の空き領域は調整される
   →PCTFREE
   空き領域をブロック内でどれだけ確保するかの閾値。PCTFREE=10だと、ブロック内
   の90%まではオーバーヘッドと行データで使用でき、90%を超えると新規行データを
   追加できなくなる。残りの10%は既存行データ更新のために空き領域にしておく。
   →PCTUSED
   PCTFREEで指定した限界使用量に一度達したブロックが、次に新規行データを使用
   できるようになるまでの閾値。PCTFREE=10、PCTUSED=40だと、オーバーヘッド
   と行データの使用量が一度90%以上になったブロックに対して、再び新規行データ
   を追加できるようになるには、使用量が40%未満に下がらなくてはならない。
 ③行データ
  ⇒表データまたは索引データが格納される
  ⇒レコード長が長い場合は、1レコードが複数のブロックに渡って格納される場合もある。
   また、LOB型のデータ(大きなサイズのデータ型)をカラムに持つレコードは、
   ロケータ( LOB の格納先のポインタを格納する構造体)を利用してLOB専用の領域に
   実データが格納される。
  ⇒ブロックの下から順に書き込まれていく






参考
Oracle Database概要 11gリリース2(11.2)
12 論理記憶域構造
http://download.oracle.com/docs/cd/E16338_01/server.112/b56306/logical.htm
システム表領域
http://www.shift-the-oracle.com/tablespace/system-tablespace.html
ローカル管理表領域
http://www.shift-the-oracle.com/tablespace/local-management-tablespace.html
ディクショナリ管理表領域
http://www.shift-the-oracle.com/tablespace/dictionary-management-tablespace.html
ブロック、エクステント、セグメント
http://www.shift-the-oracle.com/oracle/datablock-extent-segment.html
ORACLE MASTER Silver DBAポイント解説
第4回 Oracleの表領域の管理
http://jibun.atmarkit.co.jp/lskill01/rensai/omsdb04/omsdb01.html
ORACLE MASTER Silver DBAポイント解説
第5回 記憶領域構造とUNDOデータの管理
http://jibun.atmarkit.co.jp/lskill01/rensai/omsdb05/omsdb01.html
LOB 型の格納方式
http://www.shift-the-oracle.com/table/lob-storage.html
スポンサーサイト
  1. 2010/03/20(土) 03:43:30|
  2. oracle
  3. | トラックバック:0
  4. | コメント:0
<<トランザクションエントリ(ITL)について | ホーム | Oracleのキャッシュ構成>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://192168111.blog71.fc2.com/tb.php/36-00c681af
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。