ASSMに関する検証 その7

投稿日: 2007年5月09日

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

大型連休明けの回です。
前回までの内容は、フラッシュされてしまっていませんか??

あと数回、本テーマについてお付き合い下さい。

▼前回のおさらい

セグメントを管理する2つの方法を比較して、どのように ハイウォーターマ
ークを保持しているかを見てきました。

前回までで、 セグメント領域管理とは? から始めてセグメントを管理する
2つの方法(自動セグメント領域管理、FREELIST管理)を比較して内部的に
セグメントのブロック情報をどう保持しているかをブロック・ダンプを覗き
ながら確認してきましたね。

先に、内部構造から入ってしまったので理解しづらかったかもしれません。

今回から、自動セグメント領域管理(ASSM)のメリットを検証を通じて確認
していきます。

■自動セグメント領域管理(ASSM)のメリット

・同時実行SQL(INSERT)の空きリスト競合の軽減
⇒パフォーマンスにメリット
・セグメントの領域管理パラメータの自動調整
⇒管理性にメリット

言い換えると、セグメントをFREELIST管理で管理する場合に弱かった部分を
改善する機能と言えますね。

↓詳細は、バックナンバーを参照してください。↓
<ASSMに関する検証 その1>
https://old.insight-tec.com/mailmagazine/ora3/vol331.html

■環境

OS:WindowsXP
DB:Oracle10g EE Release 10.2.0.3

■検証

複数セッションから同時に SQL(INSERT)を実行して、各セグメントの管
理方法をブロックの再利用や待機イベントに着目して比較してみましょう。

※準備としてテーブルに行データを格納した後、ランダムに行データを削除
して空きブロックを発生させて検証します。

▼ブロックの再利用

  < 自動セグメント領域管理(ASSM)>

    --検証前の使用ブロック

      Unformatted Blocks = 0
      0 - 25% free blocks= 0
      25- 50% free blocks= 4     ←空きブロック
      50- 75% free blocks= 5     ←空きブロック
      75-100% free blocks= 684   ←空きブロック
      Full Blocks        = 685   ←100%使用ブロック

      総使用ブロック数   ⇒ 約 1378 ブロック

      行データを格納した後に削除しているので、ブロックの使用率別に空き
      ブロックを確認できます。

    -- 3セッションから同時 INSERT後(各セッションから 5万件)

      Unformatted Blocks = 0
      0 - 25% free blocks= 1     ←空きブロック
      25- 50% free blocks= 0
      50- 75% free blocks= 0
      75-100% free blocks= 36    ←空きブロック(殆ど再利用)
      Full Blocks        = 1719  ←100%使用ブロック

      総使用ブロック数   ⇒ 約 1756 ブロック


      空きブロックが、効率よく再利用されている事がわかります。
  < 自動セグメント領域管理(ASSM)>

    --検証前の使用ブロック

      Unformatted Blocks = 0
      0 - 25% free blocks= 0
      25- 50% free blocks= 4     ←空きブロック
      50- 75% free blocks= 5     ←空きブロック
      75-100% free blocks= 684   ←空きブロック
      Full Blocks        = 685   ←100%使用ブロック

      総使用ブロック数   ⇒ 約 1378 ブロック

      行データを格納した後に削除しているので、ブロックの使用率別に空き
      ブロックを確認できます。

    -- 3セッションから同時 INSERT後(各セッションから 5万件)

      Unformatted Blocks = 0
      0 - 25% free blocks= 1     ←空きブロック
      25- 50% free blocks= 0
      50- 75% free blocks= 0
      75-100% free blocks= 36    ←空きブロック(殆ど再利用)
      Full Blocks        = 1719  ←100%使用ブロック

      総使用ブロック数   ⇒ 約 1756 ブロック


      空きブロックが、効率よく再利用されている事がわかります。

各セグメントの管理方法を比較すると、行データの総件数が同じなのに
FREELIST管理の方が、セグメントを構成する総ブロック数、未使用ブロ
ック数が共に若干多くなっています。

FREELIST管理では、行データ格納時に新規ブロックや空きブロックが、
若干多く割り当てられた結果と考えられます。

▼待機イベント(”data block”、”buffer busy waits” に着目します。)

以下の二つの待機イベントは、ブロック競合の発生を確認する待機イベン
トです。

“data block” 待機イベント
・・・同一ブロックへのアクセス競合が発生する際にカウントされ
ます。

“buffer busy waits” 待機イベント
・・・同一バッファキャッシュへのアクセス競合が発生する際にカ
ウントされます。

  < 自動セグメント領域管理(ASSM)>

    --検証前の "data block"、 "buffer busy waits" 待機イベント

      CLASS                   COUNT       TIME
      ------------------ ---------- ----------
      data block                  0          0

      EVENT              TOTAL_WAITS
      ------------------ -----------
      buffer busy waits            0

    -- 3セッションから同時 INSERT後(各セッションから 5万件)

      CLASS                   COUNT       TIME
      ------------------ ---------- ----------
      data block                 67         82

      EVENT              TOTAL_WAITS
      ------------------ -----------
      buffer busy waits           18

まずは、”data block”、”buffer busy waits”待機イベントの回数の増
え方を確認します。

  < FREELIST管理 >

    -検証前の "data block" 待機イベント

      CLASS                   COUNT       TIME
      ------------------ ---------- ----------
      data block                  1          4

      EVENT              TOTAL_WAITS
      ------------------ -----------
      buffer busy waits            0

    - 3セッションから同時 INSERT後(各セッションから 5万件)
      イベント

      CLASS                   COUNT       TIME
      ------------------ ---------- ----------
      data block                499        636

      EVENT              TOTAL_WAITS
      ------------------ -----------
      buffer busy waits           75

各セグメントの管理方法を比較すると、行データの総件数が同じなのに
FREELIST管理の方が、待機イベントの回数、時間の増え方が共に大きく
差がでる結果となりました。

FREELIST管理では、空きリストへの競合がブロック競合として表れた結
果と考えられます。

[まとめ]

淡々と結果を出して比較しましたが、使用ブロックに着目すると自動セグメ
ント領域管理(ASSM)の方が、効率よくブロックの再利用をしている結果と
なりました。

それから、FREELIST管理での発生しがちな空きリスト競合は、自動セグメン
ト領域管理(ASSM)を使用することで軽減する事を確認できました。

FREELIST管理の表領域に作成したセグメントは、デフォルト値で作成してい
るので、pctused、pctfree、freelists の値を変えることによりチューニン
グ可能かもしれません。
空きリストの競合が顕著に発生した場合、同時アクセス数、1ブロックに格
納する行データ、参照系なのか更新系等を把握して、セグメント作成時に
pctused、pctfree、freelists、freelist groups の値の調整が、必要でし
たからね。(これは、DBA の役目でした・・・)

自動セグメント領域管理(ASSM)では、セグメント作成時の
pctused、freelists、freelist groups の設定は不要になる為、 DBA への
負荷についても軽減されるでしょう。

※ pctfree に関しては、FREELIST管理と同様に 自動セグメント領域管理
(ASSM)でも調整可能です。

今回の検証では、自動セグメント領域管理(ASSM)に軍配が上がりました。

自動セグメント領域管理(ASSM)は、

⇒デフォルトで選択する?
⇒選択は、慎重にする??

の指標となるような情報を引き続き紹介していければと思います。

今日は、ここまで

連休明け、ポカポカ陽気になりました。
昼間は、じとーっと汗が出るようになりましたね。 茅ヶ崎にて