2014年5月24日土曜日

ASMストレージ設定とリバランス

OracleではストレージをASM(Automatic Storage Management)ディスクとして使用することが多いですが、
ASMでは、冗長性を保持してデータを持つことができます。ASMミラーですね。

冗長性レベルは3段階あります。
EXTERNAL 冗長なし…ストレージ機能で冗長性を担保
NORMAL  2重化
HIGH   3重化


ストレージを分割してディスク設定をすることができますが、同じストレージ内に2つデータを保持してしまうと、そのディスクが故障したときにデータをすべて失ってしまうので、気をつける必要があります。
そこで、ディスクグループ内で障害グループというものを設定します。
たとえば、NORMALの場合は障害グループを2つ以上用意する必要があり、それぞれの障害グループに対してディスクを割り当てます。



・SQL例
以下は、DISKAとDISKBを4つずつにわけて、障害グループを設定してディスクグループを作成する例です

CREATE DISKGROUP dgroup1 NORMAL REDUNDANCY
FAILGROUP controller1 DISK
'/devices/diska1' NAME diska1,
'/devices/diska2' NAME diska2,
'/devices/diska3' NAME diska3,
'/devices/diska4' NAME diska4
FAILGROUP controller2 DISK
'/devices/diskb1' NAME diskb1,
'/devices/diskb2' NAME diskb2,
'/devices/diskb3' NAME diskb3,
'/devices/diskb4' NAME diskb4
<Oracle Databaseストレージ管理者ガイドより>


ディスクが故障すると、ASMはリバランスで均等にデータを他のディスクに割分けてくれます。
ただ、ディスクが故障してもすぐ交換できるなら、リバランスでディスクに負荷がかかって欲しくないという事情もあります。
そこで、リバランスが発生するまでの猶予時間はデフォルトは3.6Hで設定されています。
変更したい場合は以下のコマンドを使用します。
ALTER DISKGROUP data SET ATTRIBUTE 'disk_repair_time' = '4.5h'

また、リバランスにはパラレル化の指定ができます。
ALTER DISKGROUP dgroup1 ADD DISK
      '/devices/diska*'
       REBALANCE POWER 5 WAIT;
<Oracle Databaseストレージ管理者ガイドより>

2014年5月10日土曜日

Smart ScanとStorage Index

Smart ScanとStorage Index

ExadataのSmart Scanでは、データをストレージ側で絞り込んでからDBサーバ側に送ることで、
ストレージのIOを減らすことができ、速く処理することができます。

では、どうやってストレージ側で絞り込みを行うのでしょうか?


Smart Scanによる絞り込みには、Storage Indexを使用します。
Storage Indexは、テーブルの各カラムごと、Regionと呼ばれるデータの区分けごとに
値の最低値と最高値、Nullの有無のデータを格納します。これは自動的に行われるもので、値を制御できるものではありません。

ランダムにデータが入っている場合、多くのRegionを見にいってデータを取って行きますが、
シーケンシャルにデータが入っている場合は、Regionを見に行く回数が少なくて済みます。
これらを念頭にチューニングする必要がありそうです。


AWRレポートでは、Smart Scan関連の2つのメトリックが確認できます。
Cell physical IO bytes saved by storage index
 -Storage Indexによって絞り込まれたIOバイト数
Cell physical IO interconnect bytes returned by smart scan
 -Smart Scanで返されたIOバイト数

上のメトリックと下のメトリックの値がかい離している場合は、storage indexが有効でないことが言えると思います。



ちなみに、Storage Indexを使用しないようにすることもできます。
_kcfis_storageidx_disabled という隠しパラメータを使用します。デフォルトはFalse(使用不可にしない)です。

 alter session set "_kcfis_storageidx_disabled"=true;