ASSMに関する検証 その12

投稿日: 2007年6月13日

<ASSMに関する検証 その12>
ペンネーム: サマー・リーフ

▼はじめに

“ASSMに関する検証”と題しまして、11回連載を続けてきました。
今回は、復習と検証結果から確認できたことをまとめて最終回とします。

セグメントの領域管理とは、空きリスト、空きブロックの管理をするものでし
た。この管理方法には、”自動管理”、”手動管理”を選択することができました
ね。

・手動管理:FREELIST管理
・自動管理:自動セグメント領域管理(ASSM:Auto Segment Space Management)

▼”手動管理”、”自動管理”のセグメント管理方法

—————
手動管理とは?
—————

FREELIST管理を指し、セグメント作成時に Storage句でパラメータを”手動”
にて適切に指定しチューニングができます。

同一のセグメント(例えば、テーブル)に同時にINSERTが実行されると、空
きブロックの確保の為に空きリストへアクセス集中することがあります。
結果、空きリストで確保されるセグメントヘッダブロックや、INSERT対象の
ブロックに競合の待ちイベントとして現れ、さらに実行時間に影響を及ぼす
こともあります。
これを回避するために、セグメント(例えばテーブル)の Storage句のパラ
メータである pctfree,pctused,freelists,freelists_groups の値を調整し
て、
空きリストと空きブロックの制御を最適に近づけることができます。
しかし、テーブルのレコード長や、同時アクセス数、同時アクセスインスタ
ンス数などを把握して調整するのは、手間のかかる作業となります。

[Storage句のパラメータ]

・pctfree :使用済みブロックを空きリストのエントリから外す制
御を調整。
・pctused :空きとなったブロックを空きリストのエントリへ追加
する制御を調整
・freelists :同一のセグメントに対し、同時にアクセスする複数の
プロセス分の空きリスト数を調整。複数のプロセスに
よる、ブロックアクセスの競合を軽減する。
・freelist group:同一のセグメントに対し、同時にアクセスする複数の
インスタンス分の空きリストグループ数を調整。
複数のインスタンスによる、ブロックアクセスの競合
を軽減する。

9iR1以前、セグメントの領域管理は、上記で説明したFREELIST管理のみでし
た。

—————
自動管理とは?
—————

自動セグメント管理(ASSM)を指し セグメント(例えばテーブル)作成時
に Storage句のパラメータである pctused,freelists,freelists_groupsの
指定が不要となりました。つまり、パラメータを指定しなくとも空きリスト
や空きブロックを”自動”で管理します。

この機能は、OLTPなどの同時実行SQL(INSERT)のパフォーマンスを向上させ
るために 9i 以降の新機能として追加されました。

▼空きリストの競合やブロックの競合について

競合とは?

セグメントヘッダーに、セグメント(例えば、テーブル)の空きリスト(空
きブロック情報)を持つのは、今回の連載でご理解いただけたでしょうか?

このセグメントヘッダーブロックにアクセス(空きブロックの要求)する
INSERT、UPDATE が同時に実行されるとブロックのロック待ちが、待機イベ
ント(”buffer busy wait”など)に現れます。

また、V$WATSTAT からブロックタイプ別にブロックの競合を確認できます。
テーブル、インデックス等のブロックのデータブロック競合を示す”data block”
待機イベントや、空きリスト競合を示す “free list”待機イベントなどを
確認対象とします。

つまり、空きリストや、データブロックの競合が、待機イベントとして現れ
それがSQLの実行時間に影響を及ぼすことになります。

上記の影響を軽減するには、以下のような2つの方法を検討します。

(1)FREELIST管理の表領域の場合、各セグメントのStorage句の調整をする。
(2)自動セグメント領域管理(ASSM)の表領域の採用する。

▼本連載の検証のおさらい

本題としては、検証結果から各セグメント領域管理を比較して違いを見てい
くことでしたね。

おさらいも兼ねてまとめてみます。

●FREELIST管理の表領域

[メリット]

・Storage句でパラメータを調整すると、同時アクセスによって発生し
がちなブロック競合を抑えることができた。
適切に調整できれば、自動セグメント領域管理(ASSM)よりブロック
競合を抑えられる結果を得た。

[デメリット]

・同一セグメントに対して同時アクセスが実行されるシステムにおい
ては、Storage句でパラメータの調整をしないと顕著にブロック競合
が発生する。
・Storage句で調整するパラメータの最適値は、システムの負荷、構成
等を把握し十分に検討する必要がある。
また、セグメント単位で調査する必要があり、システム規模により
管理や運用面のコストが大きくなる。

●自動セグメント領域管理(ASSM)の表領域

[メリット]

・Storage句のパラメータを指定しなくても、同時アクセスによって発
生しがちなブロック競合を抑えることができる。
RAC(Real Apllication Cluster)環境でも、ブロック競合を抑えら
れる結果を得た。
・システム規模を問わず、セグメントの管理、運用面のコストが抑え
られる。

[デメリット]

・Storage句のパラメータを柔軟に指定することができないので、自動
調整任せとなってしまう。
・システム規模によって、セグメントのヘッダ情報が、多く確保され
るので領域の管理に気をつける必要ある。

▼最後に

最新のリリース 10g では、表領域を作成するとデフォルトで自動セグメント
領域管理(ASSM)が選択されます。

まだ、SYSTEM表領域や、一時表領域など、自動セグメント領域管理(ASSM)を選
択できない表領域があります。
もしかしたら、まだデータ領域以外が選択できないのには、なにか理由がある
のかもしれませんね。

11gのリリースも近いことですし、今後も掘り下げてご紹介していければと思
います。

次回からは、SSD(Solid state disk)の検証が連載されます。
ORACLEに実装して、ボトルネックを解消できるかぁ~

そもそもSSDってなんだ??

乞うご期待!!

本連載に、長いことお付き合いして頂きありがとうございました。
茅ヶ崎にて