Direct path read/write(lob)

基本情報

 

LOB列を生成する際にNOCACHEオプションを使用すると、LOBセグメントの読み書き操作は、direct path I/ Oを使用して、この場合、direct path read(lob)、direct path write(lob)イベントを待機することになります。CACHEオプションを使用してLOB列を作成すると、バッファキャッシュを経由することになりますので、通常のデータと同じメカニズムに従うことになります。

 

LOBを作成する際にCACHEとNOCACHEのどちらのオプションを使用するかは、システムの特性とデータの特性に応じて異なります。もしSGAのサイズに余裕がない場合、またはLOBデータのサイズが大きい場合は、NOCACHEを使用することが有利となります。LOBデータが大きくなく、頻繁にアクセスされる範囲が決まっている場合はCACHEオプションを使用することにより、パフォーマンスの改善効果を得ることができます。

 

Parameter&Wait Time

Wait Parameters

 

direct path read/ write(lob)待機イベントの待機パラメータは以下の通りです。

 

・ P1:Absolute File#
・ P2:Starting Block#
・ P3:ブロック数

 

Wait Time

 

I/O関連のイベントなので、タイムアウトが発生せず、I/Oが完了するまでにかかった時間を示します。

 

Troubleshooting

LOB作成時の注意事項

 

 

LOBは、データの属性上、他のデータタイプにはない様々なオプションが存在します。不用意に使用した場合、多くのパフォーマンスの問題が発生することになります。LOBの作成時には、以下のような点に注意しなければなりません。

 

1. enable storage in rowオプションを使用している場合、4000 bytesよりも小さいLOBデータは、
   Rowのようなブロックに格納されます。したがってRow chainingを誘発する可能性が高くなります。
  4000 bytesより大きなLOBデータは、disable storage in rowオプションを使用したのと同じ効果があります。
  LOBデータのサイズを考慮して、もしRow chainingが発生する可能性が高いと判断されると、
  disable storage in rowオプションを使用することが得策となります。Rowのようなブロックに格納されている
   LOBデータはIn-line LOBと呼ばれ、LOBセグメントに格納されている場合には、Out-of-line LOBと呼ばれます。

2. disable storage in rowオプションを使用している場合、LOBデータは、別のLOBセグメントに格納され、
  Rowには20 bytesのLOB Locator情報のみ保存される。この場合、UNDOデータはLOB Locatorにのみ生成されます。
  LOBデータの実際のUNDO情報は、UNDO表領域に格納されず、同じLOBセグメント内に保存されることに注意しなければ
   なりません。 LOBセグメントのUNDOは、PCTVERSIONオプションによって制御されますが、仮にPCTVERSIONが50であれば
  LOB Segmentの空間の中で、50%が、UNDO情報を格納するために使用されます。したがってPCTVERSIONを低くする場合、
  予期しないORA-01555:snapshot too oldエラーが起こることがあります。 LOBセグメントのUNDO領域不足による
   snapshot too oldエラーの場合rollback segment nameが空白で出力されます。 PCTVERSIONが小さすぎると、
  ORA-01555エラーが発生する確率が高くなり、PCTVERSIONが高すぎるとスペースの無駄が多くなります。
  この問題を解決する方法は、一般的なロールバック・セグメントでのORA-01555エラーの場合と同様です。
  PCTVERSIONを適切に維持し、不要なコミットを減らします。 LOBセグメントの拡張スペースを適切に確保してくれることも
  重要となります。

3. CACHE / NOCACHE、LOGGING / NOLOGGING:もしLOBデータのサイズが大きく、頻繁にアクセスされたり、ランダムに
  アクセスされる場合、NOCACHEオプションを使用することが望ましくなります。 NOCACHEオプションを使用する場合は、
  REDOを生成するかどうかを指定することができます。もし必ず回復される必要がないデータであれば、Nologging
  オプションを使用することにより、パフォーマンスの改善効果を得ることができます。 CACHEオプションを使用している
   場合は、必ずLogging属性を持つようになります。 NOCACHEオプションを使用する場合は、バッファキャッシュを経由
   しないため、direct path read(lob)、direct path write(lob)イベントを待機することになります。しかし、
   CACHEオプションを使用する場合には、バッファキャッシュを経由するため、db file sequential readとlatch:
  cache buffers chains待機を引き起こすことになります。

4. チャンク(chunk)のサイズ:Out-of-line LOBの場合はチャンク単位でLOBデータを格納することになります。
  大きなチャンクサイズの問題は、スペースが無駄になる可能性が高くなります。もしチャンクが8Kになっているところに、
  1KサイズのLOBデータが挿入されれば、残りの7Kの領域は使用できなくなります。したがってチャンクサイズを決定する際、
  対象となるLOBデータのサイズを考慮して決定しなければなりません。チャンクのサイズの単位は、基本的には、
   ブロックサイズの倍数にします。もしブロックサイズが8Kの場合、チャンクのサイズを5000 bytesにした場合、
   Oracleは暗黙的に8192 bytesに変換します。チャンクのサイズを過度に小さくした場合には、連続的にチャンクを
   割り当て受ける過程でオーバーヘッドが発生することになります。