• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:BLOBやCLOBのパフォーマンスを改善したい)

BLOBやCLOBのパフォーマンスを改善したい

このQ&Aのポイント
  • Oracle 10g R2 を使用し、開発を行っていますが、パフォーマンス改善という壁にぶつかっております。要求定義の段階で、可変長のバイナリデータを扱う必要があり、テーブル内には BLOB フィールドを用意しております。
  • 現状としてプログラムの中でボトルネックとなっているのは、BLOB データを Fetch するタイミングなんです。開発環境は、C#.NET+ODP.NET なんですけど、ミドルウェアは、oo4o を使った場合でも、Microsoft の Oracle のドライバを使用したときでも同じ部分でボトルネックになっていました。
  • そもそも、この BLOB フィールドや CLOB フィールドのデータを Fetch する速度を向上させること、というのは可能なのでしょうか?ちなみに、Oracle サーバ側の設定は一切行っておりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • MZ-80B
  • ベストアンサー率56% (46/81)
回答No.3

1冊のマニュアルになるボリュームがあって色々書かれているので 開発者ガイドを見てください。 「アプリケーション開発者ガイド- ラージ・オブジェクト」です 個人的には設計段階でLOBは使用しないように最大限粘っていると思います。

参考URL:
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/appdev.102/B19247-01/toc.htm
SUPER-NEO
質問者

お礼

> MZ-80B さん OTNのドキュメント、拝見しました。 LOB は使わない、ということですか。 格納するデータに制限をつければ確かに遅い LOB を使わずに、 高速なカーソル操作が実現できそうですね。 ちょっと設計を見直してみることにします。

その他の回答 (2)

  • MZ-80B
  • ベストアンサー率56% (46/81)
回答No.2

下位互換といわれているのは LONG RAW の事ではないでしょうか。 RAW はこれからも残っていくデータ型だったと思います。 RAW型の最大サイズは2000バイトなのでBASE64のVARCHAR2(4000)と比べると 1カラムでの容量では負けてしまいますね。

SUPER-NEO
質問者

お礼

> MZ-80B さん 度々回答していただき、ありがとうございます。 RAW 型について勘違いをしておりました。 大変、申し訳ございませんでした。 今の開発環境が、.NET Framework である、ということもあって、 GZIP による圧縮を仮に想定したとして、どれだけ圧縮されるのか、 これを十分に考慮してテーブル設計をやりなおさなければ、と思います。 今のところ、登録するバイナリデータの制限が無いことがあり、 RAW フィールドを、いくつテーブルに用意すればよいのか、 という点での問題が残ります。 もしかするとRAWフィールドを設ける方法が使えない、という場合も考えられます。 提供いただいた参考サイトを拝見しますと、そもそも Oracle という データベースにおいて BLOB のアクセスが遅い、というような表現が 見受けられましたが、やはり BLOB というものを MySQL 並みとは言わなくても、それに近づけるような速くする チューニングテクニックというのは存在しないものなのでしょうか。 Oracle の製品で提供されている機能なんかを見てみると、 BLOB で出力しているパッケージ・ファンクションなんかが見つかります。 BLOB が遅いということになると、こういった関数の部分のパフォーマンスも 大きく劣ってしまう、ということだと思うんです。

  • MZ-80B
  • ベストアンサー率56% (46/81)
回答No.1

LOBのデータサイズによってパフォーマンスは変わるので ひとつの例として参考にしてください。 小さなLOBについて検証しているケースなので似た状況かも。 あとバイナリを扱うなら文字にエンコードするとサイズが倍増しますから RAW型を使ったほうがよいです。

参考URL:
http://www.drk7.jp/MT/archives/001196.html
SUPER-NEO
質問者

お礼

> MZ-80B さん 回答ありがとうございます。 バイナリデータの圧縮、気づきませんでした! 確かにデータが小さければ小さいほど読み込むデータ量も 小さくできるので快適になることが期待されますね。 試してみます。 あと、確認なんですが、RAW型を使ったほうが良い、 ということが回答中にありますが、何故 RAW 型とされたのでしょうか? OTNのドキュメントを拝見しておりますと、Oracle 10g では、 下位互換のために用意されている型とあります。 そういうわけで、RAW 型ではなく LOB 型を使ってほしい、 ということが書かれています。 RAW 型の変わりに LOB 型を使っても良いものなのでしょうか?

関連するQ&A