6 DBAのためのOracle Multimediaチューニングのヒント
この章では、Oracle DBAがOracle Multimediaを使用する場合に、マルチメディア・データをデータベースに効率的に格納して管理するための情報およびアドバイスについて説明します。
Oracle Multimediaアプリケーションの目的によって、リソース要件とそれらのリソースがどのように割り当てられるかが決まります。アプリケーション開発および設計上の決定事項はパフォーマンスに大きく影響するため、プロジェクトのシステム計画、設計および開発フェーズに標準的なチューニング方法を適用して、本番環境においてOracle Multimediaアプリケーションが最適の結果を得るようにしてください。
マルチメディア・データは、イメージ、オーディオ・クリップ、ビデオ・クリップ、線画など様々なメディア・タイプで構成されます。通常、これらのメディア・タイプはすべてLOBに格納されます。LOBには、内部BLOB(内部データベース表領域内に格納)またはBFILE(データベース表領域外のオペレーティング・システム・ファイル内の外部LOB)のどちらも使用できます。この章では、BLOBに格納されているオーディオ、イメージおよびビデオ・データの管理について説明します。
この章では、次の内容を説明します。
関連項目:
Oracle DatabaseでLOBを使用するときのパフォーマンス・チューニングの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください
6.1 Oracle Multimedia操作のパフォーマンス・プロファイルの理解
マルチメディア・データは、データに対して実行可能な操作も含めて、リレーショナル・データベースに一般的に格納されている従来のデータ型とかなり異なります。Oracle Multimedia操作のパフォーマンス・プロファイルに関する基本的な知識は、メディア・パフォーマンス用のデータベースをチューニングする際に、より良い決定を行うのに役立ちます。
この項の表に、一般的に実行される一連の操作の一般的なパフォーマンス・プロファイルをまとめます。各プロファイルには、2つの主要コンポーネントがあります。I/Oパターンは、プライマリ・タイプのI/Oアクセスの一般的な特性、および読取りまたは書込み操作を行うメディア・データ量の一般的な特性です。一部の操作では2つのメディア・オブジェクトを含むため、I/Oパターンをソースのメディア・オブジェクトおよび宛先のメディア・オブジェクトの両方について説明します。2つ目のコンポーネントは、操作のためのCPU使用率のレベルの一般的な特性です。
注意:
これらの表の内容は、一般的な特性およびI/Oパターンについて示します。そのため、CPU使用率は、メディアのフォーマットによって大幅に異なる場合があります。
次の表に、すべてのOracle Multimediaメディア・タイプに適用される、データのロードおよび取得のプロファイルを示します。
表6-1 すべてのマルチメディア・タイプ用のパフォーマンス・プロファイル
操作 | I/Oパターン(ソース) | I/Oパターン(宛先) | I/Oパターン(量) | CPU使用率 |
---|---|---|---|---|
新しいメディア・データをデータベースにロードする |
該当なし |
順次書込み |
すべて |
低 |
メディアをデータベースから取得する |
順次読取り |
該当なし |
すべて |
低 |
次の表に、一般的に使用されるORD_IMAGE PL/SQLパッケージのファンクションおよびプロシージャのプロファイルを示します。
表6-2 ORD_IMAGE PL/SQLパッケージのファンクションおよびプロシージャのパフォーマンス・プロファイル
パッケージ・プロシージャ | I/Oパターン(ソース) | I/Oパターン(宛先) | I/Oパターン(量) | CPU使用率 |
---|---|---|---|---|
getProperties( ) |
順次読取り |
該当なし |
メディア・ヘッダー |
低から中 |
getMetadata( ) |
順次読取り |
該当なし |
メディア・ヘッダー |
低から中 |
putMetadata( ) |
順次読取り |
順次書込み |
すべて |
低から中 |
process( ) |
順次読取り |
順次書込み |
すべて |
高 |
processCopy( ) |
順次読取り |
順次書込み |
すべて |
高 |
convert( ) |
順次読取り |
順次書込み |
すべて |
高 |
crop( ) |
順次読取り |
順次書込み |
すべて |
高 |
scale( ) |
順次読取り |
順次書込み |
すべて |
高 |
thumbnail( ) |
順次読取り |
順次書込み |
すべて |
高 |
次の表に、ORDImage型の一般的に使用されるメソッドのプロファイルを示します。
表6-3 ORDImageメソッドのパフォーマンス・プロファイル
オブジェクト・メソッド | I/Oパターン(ソース) | I/Oパターン(宛先) | I/Oパターン(量) | CPU使用率 |
---|---|---|---|---|
setProperties( ) |
順次読取り |
該当なし |
メディア・ヘッダー |
低から中 |
getMetadata( ) |
順次読取り |
該当なし |
メディア・ヘッダー |
低から中 |
putMetadata( ) |
順次読取り |
順次書込み |
すべて |
低から中 |
process( ) |
順次読取り |
順次書込み |
すべて |
高 |
processCopy( ) |
順次読取り |
順次書込み |
すべて |
高 |
次の表に、一般的に使用されるORD_DICOM PL/SQLパッケージのファンクションおよびプロシージャのプロファイルを示します。
表6-4 ORD_DICOM PL/SQLパッケージのファンクションおよびプロシージャのパフォーマンス・プロファイル
パッケージ・プロシージャ | I/Oパターン(ソース) | I/Oパターン(宛先) | I/Oパターン(量) | CPU使用率 |
---|---|---|---|---|
extractMetadata( ) |
順次読取り |
該当なし |
メディア・ヘッダー |
低から中 |
writeMetadata( ) |
順次読取り |
順次書込み |
すべて |
低から中 |
makeAnonymous( ) |
順次読取り |
順次書込み |
すべて |
低から中 |
process( ) |
順次読取り |
順次書込み |
すべて |
高 |
processCopy( ) |
順次読取り |
順次書込み |
すべて |
高 |
次の表に、ORDDicom型の一般的に使用されるメソッドのプロファイルを示します。
表6-5 ORDDicomメソッドのパフォーマンス・プロファイル
オブジェクト・メソッド | I/Oパターン(ソース) | I/Oパターン(宛先) | I/Oパターン(量) | CPU使用率 |
---|---|---|---|---|
setProperties( ) |
順次読取り |
該当なし |
メディア・ヘッダー |
低から中 |
extractMetadata( ) |
順次読取り |
該当なし |
メディア・ヘッダー |
低から中 |
writeMetadata( ) |
順次読取り |
順次書込み |
すべて |
低から中 |
makeAnonymous( ) |
順次読取り |
順次書込み |
すべて |
低から中 |
process( ) |
順次読取り |
順次書込み |
すべて |
高 |
processCopy( ) |
順次読取り |
順次書込み |
すべて |
高 |
次の表に、ORD_AUDIO、ORD_DOCおよびORD_VIDEO PL/SQLパッケージの一般的に使用されるプロシージャのプロファイルを示します。
表6-6 ORD_AUDIO、ORD_DOCおよびORD_VIDEO PL/SQLパッケージ・プロシージャのパフォーマンス・プロファイル
パッケージ・プロシージャ | I/Oパターン(ソース) | I/Oパターン(宛先) | I/Oパターン(量) | CPU使用率 |
---|---|---|---|---|
getProperties( ) |
順次読取り |
該当なし |
メディア・ヘッダー |
低 |
次の表に、ORDAudio型、ORDDoc型およびORDVideo型の一般的に使用されるメソッドのプロファイルを示します。
表6-7 ORDAudio、ORDDocおよびORDVideoメソッドのパフォーマンス・プロファイル
オブジェクト・メソッド | I/Oパターン(ソース) | I/Oパターン(宛先) | I/Oパターン(量) | CPU使用率 |
---|---|---|---|---|
setProperties( ) |
順次読取り |
該当なし |
メディア・ヘッダー |
低 |
getProperties( ) |
順次読取り |
該当なし |
メディア・ヘッダー |
低 |
6.2 マルチメディアLOBのLOB記憶域パラメータの選択
表の作成中にLOB記憶域属性を指定するための選択は、メディアのロード、取得および処理操作のパフォーマンスに大きな影響を与えます。
この項では、考慮すべき最も重要なオプションについて説明し、Oracle Multimedia操作のパフォーマンス・プロファイルがどのようにLOB記憶域パラメータの選択に影響するかを示します。
次の各項では、LOB記憶域パラメータについて説明し、それらの使用例を示します。
関連項目:
LOBの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください
6.2.1 SecureFiles LOB
SecureFiles LOBを使用してメディア・データを格納してください。
可能であれば、メディア・データを格納するためにSecureFiles LOBを使用することをお薦めします。SecureFiles LOBは、SQLパラメータのSECUREFILEを指定することで識別されます。
6.2.2 TABLESPACE
LOBを含む表に使用される表領域ではなく、異なる表領域でLOB記憶域を指定することによって、LOBの最適なパフォーマンスを実現できます。
多くの異なるLOBが頻繁にアクセスされる場合、デバイスでの競合を避けるために、各LOB列または属性に個別の表領域を指定することもできます。
6.2.3 CACHE、NOCACHEおよびCACHE READS
CACHEオプションは、STORE AS句の一部であり、LOBページがバッファ・キャッシュに格納されているかどうかを決定します。
キャッシュ・オプションで使用可能な値は、次のとおりです。
-
値
CACHE
の場合、複数のユーザー間で共有可能なバッファ・キャッシュにLOBページが格納されます。時間が経過し、LOBページがアクセスされなくなった場合、最終的にLOBページはバッファ・キャッシュから削除されます。 -
値
NOCACHE
の場合、LOBページはバッファ・キャッシュに格納されません。 -
値
CACHE READS
の場合、LOBページは読取り操作用のキャッシュにのみ格納されます。
アプリケーションがメディア・オブジェクトに対して複数の読取り操作を実行する場合(getProperties( )プロシージャまたはsetProperties( )メソッドを起動し、縮小イメージを生成する場合など)は、ソース・メディアLOBの読取りキャッシュを有効にしてください。
6.2.4 LOGGINGおよびNOLOGGING
ロギング・オプションは、STORE AS句の一部であり、LOBの更新時にREDOデータがログに記録されるかどうかを決定します。
NOLOGGING(またはLOGGING)句が省略されると、NOLOGGINGおよびLOGGINGが指定されず、表または表パーティションのロギング属性は、デフォルトで表または表パーティションが存在する表領域のロギング属性に設定されます。
CACHEオプションの指定方法によって異なる別のロギング属性があります。
-
CACHEが指定され、NOLOGGING(またはLOGGING)が省略されると、自動的にLOGGINGが付けられます(CACHE NOLOGGINGを指定できないため)。
-
CACHEが指定されず、NOLOGGING(またはLOGGING)が省略されると、NOLOGGING(またはLOGGING)値はLOBセグメントが存在する表領域から取得されます。
NOLOGGINGは、メディア・リカバリを必要としない場合にのみ指定します。ただし、ディスク、テープまたはストレージ・メディアに障害が発生した場合、変更は記録されないため、ログから変更をリカバリすることはできません。
NOLOGGINGは、メディア・データのバルク・ロードに役立ちます。たとえば、LOBにデータをロードするときに、REDO操作を必要とせず、ロードに失敗した場合にロードを簡単に再開できる場合は、LOBデータ・セグメントの記憶特性をNOCACHE NOLOGGINGに設定します。このオプションによって、データの初期ロードのパフォーマンスが向上します。
データのロードが完了すると、必要に応じて、ALTER TABLE文を使用して、LOBデータ・セグメントのLOB記憶特性を、通常のLOB操作(CACHE、NOCACHE LOGGINGなど)に変更できます。
注意:
Oracle Data Guard Redo Applyテクノロジでは、ロギングを使用してスタンバイ・データベースに移入します。このため、このData Guardテクノロジを使用する場合はNOLOGGINGを指定しないでください。
6.2.5 LOB記憶域オプションの設定例
この項では、Oracle Multimedia操作のパフォーマンス・プロファイルを使用したLOB記憶域オプションの使用方法を示す簡単な例について説明します。
この例では、Company Xがデジタル・イメージのアーカイブを作成します。アーカイブでは、元のイメージの最大解像度のコピーと、元のイメージのスケールが縮小されたWeb対応のJPEGフォーマット・バージョンが2つ(1つは元のサイズの50%、もう1つは元のサイズの25%)格納されます。データベース・チームは、SQL*Loaderユーティリティを使用してすべての初期イメージをバルク・ロードすることを計画します。さらに、PL/SQLプログラムを使用してイメージ・データを初期化します。初期化は、元のイメージのプロパティの設定およびスケール変更されたイメージの生成で構成されます。初期化後に、Webベースのユーザー用のイメージを取得するプライマリ・アプリケーション用の表が準備されます。
次に、イメージを格納するための表定義を示します。表では、表領域tbs2
のSecureFilesを使用して、バイナリ・イメージ・データが格納されます。他のすべての表データは、表領域tbs1
に格納されます。この例ではイメージの格納にORDImageオブジェクト型を使用しますが、概念はBLOB列に直接格納されるイメージにも適用されます。
create table images(id integer primary key, original ordsys.ordimage, scale50 ordsys.ordimage, scale25 ordsys.ordimage) tablespace tbs1 lob(original.source.localdata)store as secureFile (tablespace tbs2) lob(scale50.source.localdata)store as secureFile (tablespace tbs2) lob(scale25.source.localdata)store as secureFile (tablespace tbs2);
表が作成されると、イメージ・データをロードすることができます。イメージ・データをロードすると、順次書込みのパターンがLOBに生成されます。ロード操作中にアプリケーションはデータを読み込まないため、キャッシュする必要はありません。また、ロードされる列のロギングを無効にすることによって、ロード・パフォーマンスを向上させることもできます。次のコマンドでは、表を動的に変更して、ロードするために元のイメージ列LOBを準備します。
alter table images modify lob(original.source.localdata) (nocache nologging);
ロードした後、次に、original
列のイメージのプロパティを設定し、scale50
列およびscale25
列に格納されるスケール変更されたイメージ・データを生成します。この手順では、ソース・イメージを完全に2回読み込み、スケール変更されたイメージを生成します。生成されたスケール変更されたイメージは、書き込まれますが、読み込まれません。次のコマンドでは、表を動的に変更して、ソース・イメージの読込みキャッシュを有効にし、宛先イメージのキャッシュおよびロギングを無効にします。
alter table images modify lob(original.source.localdata) (cache reads); alter table images modify lob(scale50.source.localdata) (nocache nologging); alter table images modify lob(scale25.source.localdata) (nocache nologging);
original
イメージのプロパティを設定し、スケール変更されたイメージを生成するプログラムを実行した後、Webブラウザでイメージを表示するユーザーのためにイメージを取得する主要アプリケーション用にLOB記憶域属性を最適化できます。アーカイブには数百万のイメージが含まれているため、ユーザーが同時に同じイメージを表示するとは考えられません。このため、イメージ・データをキャッシュするメリットはほとんどありません。次のコマンドでは、LOBのロギングを再度有効にし、キャッシュを無効にします。
alter table images modify lob(original.source.localdata) (nocache logging); alter table images modify lob(scale50.source.localdata) (nocache logging); alter table images modify lob(scale25.source.localdata) (nocache logging);
6.3 データベース初期化パラメータの設定
列レベルでLOBデータのロギングを無効にし、REDOログへのI/Oの量を削減できます。ロギングを無効にできない場合、追加のデータベース・チューニングが必要になる場合があります。たとえば、ロード・プロセスが待機状態になることを防ぐために、REDOログ・バッファのサイズを増やす必要がある場合があります。
初期化パラメータLOG_BUFFERには、REDOエントリをREDOログ・ファイルにバッファリングするときに使用されるメモリー容量を、バイト単位で指定します。REDOログ・エントリには、データベース・ブロック・バッファに加えられた変更の記録が含まれています。REDOログ・エントリは、LGWRプロセスによってログ・バッファからREDOログ・ファイルに書き込まれます。
関連項目:
-
データベースREDOログ・バッファの構成の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください
-
データベース初期化パラメータの設定の包括的な情報は、『Oracle Databaseリファレンス』を参照してください
-
初期化パラメータの管理の詳細は、『Oracle Database管理者ガイド』を参照してください