データ・モデルの検証
データ・モデルを検証する際、検証メッセージにより、データ・モデルの修正、問合せの最適化、スタック・スレッドの削減およびレポート・パフォーマンスの向上を図れます。
最新または前のリリースで作成されたデータ・モデルを作成または編集した後、「検証」をクリックすると、Publisherにより次の処理が実行されます:
-
データセット、LOVおよびバースティング定義に使用される問合せをチェックします。
-
SQL問合せの実行計画を生成します。
-
エラー・メッセージと警告メッセージのリストを表示します。
検証メッセージに基づいて必要なアクションを実行します。My Oracle SupportのドキュメントID 2800118.1およびMOSノートに添付されているパフォーマンス推奨ドキュメントを参照してください。
前のリリースからPublisherをアップグレードした場合、既存のデータ・モデルは未検証とマークされます。
データ・モデルの検証メッセージ
ここでは、リファレンス用にデータ・モデルの検証メッセージを示します。
メッセージ・タイプ
-
エラー – データ・モデルを使用してレポートを実行する場合、データ・モデルのエラーを解決する必要があります。
-
警告 – 警告メッセージで提案された修正を行います。警告を無視してレポートを実行する場合、レポートのパフォーマンスが影響を受けることがあります。
メッセージ・リファレンス
検証タイプ | メッセージ・タイプ | メッセージ | 処置 |
---|---|---|---|
問合せ | 警告 |
SQL問合せにSELECT *が含まれています。'*'の使用は制限されています。特定の列を選択してください。 |
問合せ内の列を指定します。 |
問合せ | 警告 |
データ・モデルにネストされたBI JDBC問合せが含まれています。論理問合せのリンクは制限されています。PublisherレポートのかわりにOTBIを使用するか、OBIEEデータセット間のリンクを削除します。 |
PublisherレポートのかわりにOracle Transactional Business Intelligenceレポートを使用するか、OBIEEデータセット間のリンクを削除します。 |
問合せ | 警告 |
SQL問合せの実行計画にマージ・デカルト結合が含まれています。SQL問合せの実行計画を生成し、マージ・デカルト結合を指定します。SQL問合せに必要なフィルタを追加してください。 |
SQL問合せの実行計画のマージ・デカルト結合を識別します。SQL問合せに必要なフィルタを追加してください。 |
ランタイム | 警告 |
パラメータ当たりのバインド値の数が制限{0}を超えると、パフォーマンスが低下します。バインド値の数を減らしてください。 |
パラメータごとのバインド値の数を減らしてください。 |
問合せ | 警告 |
SELECTの列数が制限{0}を超えています。必要な列のみを選択し、プルーニングを有効にしてください。 『Publisher Best Practices for SaaS Environments』(ドキュメントID 2145444.1)を参照してください。 |
必要な列のみを選択し、プルーニングを有効にしてください。 『Publisher Best Practices for SaaS Environments』(ドキュメントID 2145444.1)を参照してください。 |
問合せ | 警告 |
SQL問合せに非等価結合が含まれています。中間行が生成されると、パフォーマンスの問題が発生する可能性があります。非等価結合を等価結合または外部結合で置き換えてください。 |
非等価結合を等価結合または外部結合で置き換えてください。 |
問合せ | 警告 |
選択した列の名前の長さが、制限の{0}を超えています。列の名前の長さは、15文字を超えてはいけません。列名に短い別名を使用してください。 |
列名には、15文字未満の短い別名を使用します。 |
問合せ | 警告 |
インラインまたは副問合せの数が制限{0}を超えています。追加のインライン選択問合せを削除してください。 |
追加のインライン選択問合せを削除してください。 |
問合せ | 警告 |
SQL問合せにFROM DUAL句が含まれています。SQL問合せに含まれているDUAL表が多すぎます。FROM DUAL句を使用しないでください。 |
FROM DUAL句を使用しないでください。 |
問合せ | 警告 |
SELECTのLOB列数が制限{0}を超えています。必要な列のみを選択してください。 |
必要な列のみを選択してください。 |
問合せ | エラー |
問合せにDDLまたはDMLキーワードが含まれています。SQL問合せからDDLおよびDMLキーワードを削除してください。 |
SQL問合せからDDLおよびDMLキーワードを削除してください。 |
構造 | 警告 |
1つのデータセットでのグループ・ブレイク数が制限{0}を超えています。データセットから複数のグループを削除してください。 |
データセットから複数のグループを削除してください。 |
構造 | 警告 |
データ・モデルにグループ・フィルタが含まれています。SQL問合せでグループ・フィルタをWHERE句で置き換えてください。 |
SQL問合せでグループ・フィルタをWHERE句で置き換えてください。 |
ランタイム | エラー |
データ・モデル・プロパティが無効であるか、無効な値が含まれています。正しいデータ・モデル・プロパティを指定して、プロパティ値を確認してください。 |
問合せで正しいデータ・モデル・プロパティを指定し、プロパティ値を確認します。 |
問合せ | 警告 |
SQL問合せの実行計画に全表スキャンが含まれています。SQL問合せで索引付き列に必要なフィルタを指定してください。 |
SQL問合せで索引付き列に必要なフィルタを指定してください。 |
問合せ | 警告 |
SQL問合せの実行計画でのバッファ読取りが大量です。バッファ読取りが制限1GBを超えています。SQL問合せにフィルタを追加して、データのフェッチ量を減らしてください。 |
SQL問合せにフィルタを追加して、データのフェッチ量を減らしてください。 |
問合せ | 警告 |
SQL問合せの実行計画でのCPUサイクルが高いです。SQL問合せに必要なフィルタを追加して、データのフェッチ量を減らしてください。 |
SQL問合せに必要なフィルタを追加して、データのフェッチ量を減らしてください。 |
問合せ | 警告 |
SQL問合せ実行計画にフィルタ列での関数コールが含まれています。索引列でSQL関数コールを使用すると、パフォーマンスが低下します。フィルタ列の関数コールを削除してください。 |
フィルタ列の関数コールを削除してください。 |
問合せ | 警告 |
WHERE句の述語に関数コールが検出されました。 |
フィルタ式または結合式の列にSQLまたはPL/SQL関数を適用しないでください。 |
問合せ | 警告 |
SELECTリストにPL/SQL関数へのコールが検出されました。このようなコールはパフォーマンスに多大な影響を及ぼす場合があります。 |
SELECT句でカスタムPL/SQL関数を使用しないでください。 |
問合せ | 警告 |
スカラー副問合せが、SELECTリスト内の副問合せです。値は1つのみを返す必要があります。ROWNUMまたはDISTINCTを使用した出力の制限は、潜在的なパフォーマンスの問題があることを意味します。 |
DISTINCTまたはROWNUMキーワードでスカラー副問合せを使用しないでください。 |
問合せ | 警告 |
IN-LISTフィルタ内の値が多すぎると、オプティマイザでより効率的なプランを検出できなくなる可能性があります。 |
IN-LISTフィルタの値の数を減らしてください。 |
ランタイム | 警告 |
データ・セキュリティ述語(DSP)は副問合せ内にラップされ、不要なネストが生成されます。冗長副問合せでは、問合せの合計解析時間が長くなります。 |
副問合せの不要なネストは避けてください。 |
問合せ | 警告 |
サポートされていないSYS_OP_MAP_NONNULL関数を使用して、WITH副問合せ間でBIサーバーによって生成された結合が多すぎます。結合述語が多すぎると、それぞれの表の結合のカーディナリティの見積りが低くなる可能性があります。 |
副問合せ間で結合を多用しないようにしてください。 |
問合せ | 警告 |
SELECTリストに列がない問合せで外部結合表が見つかりました。これにより、オプティマイザが未使用の結合を排除できない可能性があるため、解析時および実行時に追加のパフォーマンス・オーバーヘッドが発生する可能性があります。VOプルーニングが発生している場合は、OTBIコードを確認してください。 |
未使用の外部結合表は避けてください。 |
問合せ | 警告 |
スカラー副問合せが、SELECTリスト内に存在します。スカラー副問合せ内のファクタリングされた副問合せは、最も内側の副問合せおよびその外側の親副問合せが、包含問合せによって生成されるすべての行に対して実行されるため、実行中にパフォーマンスが徐々に低下します。 |
スカラー副問合せでWITH句を使用しないでください。 |
問合せ | 警告 |
問合せにリストされ他の表に結合されているが、選択されることのない表は、潜在的に冗長である可能性があります。これにより、追加の結合オーバーヘッドのためにパフォーマンスが低下します。この表が、別の表の外部キー列に主キー列で結合されているかどうかを確認してください。 |
問合せで使用されていない表は結合しないでください。 |
問合せ | 警告 |
スカラー相関副問合せとして定義されている列が見つかりました。このような列が後でフィルタ式または結合式で使用されると、パフォーマンスが著しく低下する可能性があります。 |
SELECTリストにスカラー副問合せが含まれている冗長なインライン・ビューを避けます。 |
問合せ | 警告 |
バインド変数を非自明な方法で使用する述語(たとえば、:JCODE IS NULL OR mcd.JCODE LIKE :JCODE)は、お薦めしません。また、バインド値が渡されるかどうかに関係なく、選択的なフィルタ述語でのORの使用はお薦めしません。このようなケースを処理する適切な方法があるためです。 |
選択的なフィルタ述語ではORを使用しないでください。 |
問合せ | 警告 |
10を超える複雑な式を含むCASE式(WHEN ...THEN)は、特にWHERE句で使用される場合、CPU負荷が高くなります。 |
CASE式で、複雑なWHEN ... THEN式を多用しないでください。 |
問合せ | 警告 |
副問合せでリテラル定数として定義された列が、後でメイン問合せの他の場所にある結合述語で参照されました。メインのSQL問合せを実行する前に、このようなケースを処理するためのより優れた方法があります。 |
定数(リテラル)として定義されている列を結合しないでください。 |
問合せ | 警告 |
10を超えるUNION分岐を含む副問合せが見つかりました。UNIONの各分岐は個別に実行されるため、問合せの実行時間が大幅に増加します。ほとんどの場合、「共通分母」副問合せをファクタリングして、機能要件に従って再利用することで、UNIONが多い問合せをより単純な問合せに再処理できます。 |
副問合せのUNION分岐の数を減らしてください。 |
問合せ | 警告 |
不要な表参照を削除します。この表の列は別の表から取得できます。問合せに冗長な表が含まれている場合、データベース・オプティマイザは解析および最適化中にその表を削除できないことがあります。 |
不要な表参照を削除してください。 |
構造 | 警告 |
XMLTYPE関数を使用したCLOBからXMLへのデータの変換が遅い。XML文書をデータベースに格納するには、データ型XMLTYPEを使用します。 |
データをCLOBに格納してXMLに変換するかわりに、XMLTYPEデータ型を使用してXML文書をデータベースに格納します。 |
問合せ | 警告 |
FROM句が10を超える行ソース(表、ディクショナリ・ビューまたはインライン・ビュー)で見つかりました。行ソースが多すぎると、複数の理由で重大なパフォーマンスが低下する可能性があります。 |
FROM句の行ソース(表、ディクショナリ・ビューまたはインライン・ビュー)の数を減らします。 |
問合せ | 警告 |
インライン・ビューが、問合せの他の場所にある同じFROM句表に結合されています。これにより、冗長な参照が発生します(同じ表がディメンションと参照の両方として使用されます)。 |
インライン・ビューが、問合せ内の他の場所にある同じFROM句表に結合されていないことを確認します。 |
問合せ | 警告 |
参照表がディメンションとして使用され、問合せの他の場所でそれ自体に参照として結合されました。これにより、冗長な参照が発生します(同じ表がディメンションと参照の両方として使用されます)。 |
参照表が問合せ内の他の場所で同じFROM句表に結合されていないことを確認してください。 |
問合せ | 警告 |
参照表は、ディメンションとして使用されるそれ自体に結合されます。これにより、冗長な参照が発生します(同じ表がディメンションと参照の両方として使用されます)。 |
参照表が問合せ内の他の場所で同じFROM句表に結合されていないことを確認してください。 |
問合せ | 警告 |
最上位の問合せブロックの表の列を使用する副問合せが見つかりました。副問合せで冗長表を使用すると、解析時間と実行時間が長くなります。 |
親問合せとWHERE句を含む副問合せで、表の同じ列を使用しないでください。 |
問合せ | 警告 |
同じ条件(表およびWHERE句)が親問合せブロックに存在するため、SELECT副問合せブロックが冗長です。相関スカラー副問合せはマージ可能ではなく、それらを含む問合せによって生成された行ごとに1回実行する必要があるため、これはパフォーマンス上の問題となります。 |
副問合せで冗長なWHERE句条件を使用しないでください。 |
問合せ | 警告 |
SET操作(UNION、INTERSECTなど)で同一またはほぼ同一の問合せブロックを使用すると、コストが高く冗長な操作が多数発生する可能性があります。 |
UNIONおよびSET操作で同じ問合せを使用しないでください。 |
問合せ | 警告 |
問合せで結合が欠落すると、デカルト積が生成され、パフォーマンスに重大な問題が発生し、機能的なバグを示す場合があります。欠落している結合が多数の行を持つ表にある場合、パフォーマンスの結果が壊滅的になる可能性があります。 |
表間の結合を含めます。 |
問合せ | 警告 |
フィルタ(返される行数を制限する意味のあるWHERE句の条件)がないと、表のデータ量によってはパフォーマンスの問題が発生する可能性があります。複数の表をフィルタなしで結合すると、パフォーマンスが低下します。 |
問合せにフィルタを含めて、返される行を制限します。 |
問合せ | 警告 |
GROUP BY句が20を超える列で見つかりました。GROUP BY結果セットに多数の列があると、ソートおよびグループ化操作の実行にCPU時間がかかる場合があります。 |
GROUP BY句内の列数を減らします。 |
問合せ | 警告 |
表が結合されましたが、選択されていません。一方、問合せの残りの部分に少なくとも1つの結合条件が含まれています。この潜在的な問題により、問合せ内の結合の数が冗長な表のために増加すると、問合せランタイムが増加します。 |
問合せの冗長ブリッジ表を削除します。 |
問合せ | 警告 |
場合によっては、索引アクセス・パスの使用を容易にするために、SUBSTR関数(SUBSTR、SUBSTRB、SUBSTRC、SUBSTR2、SUBSTR4)の使用をLIKE条件に安全に置き換えることができます。 |
問合せのSUBSTRをLIKE条件に置き換えます。 |
問合せ | 警告 |
これは、LANGUAGEフィルタを適用する必要があるOracle Business Intelligenceの接尾辞表_TLに固有の潜在的な問題です。LANGUAGEフィルタがない場合、表は必要以上に多くの行を返します。 |
問合せの「言語」列にフィルタを含めてください。 |
問合せ | 警告 |
LIKE条件の先頭にワイルドカードを使用すると、データベースが索引パスを使用できないため、パフォーマンスが低下します。 |
LIKE条件の先頭にワイルドカードを使用しないでください。 |
問合せ | 警告 |
階層問合せは、再帰的な性質のため低速です。このような構造は、ブロックをマテリアライズすることによって最適化できます。 |
副問合せでの再帰問合せは避けてください。 |
問合せ | 警告 |
これは、名前に"_VL"という接尾辞が付いたOracle Fusionビューに固有の潜在的な問題です。これらのビューの表バージョンのほうがパフォーマンスが優れています。 |
_VLビューへの外部結合は避けてください。 |
問合せ | 警告 |
複数の物理表の列に対するORDER BY操作では、負荷の高いソートが発生し、CPU使用率が急増する可能性があります。 |
異なる表の列を使用したソートは避けてください。 |
問合せ | 警告 |
ほとんどの場合、分析インライン・ビューのほうが、同じロジックのWHEREブロック集計よりパフォーマンスが優れています。WHEREブロック副問合せを分析インライン・ビューに変換します。 |
副問合せの集計のかわりにインライン・ビュー内の分析を使用してください。 |
問合せ | 警告 |
問合せブロックで未使用の列を削除すると(SQL列プルーニング)、実行プロセス中の関連リソース・ニーズが排除されてパフォーマンスが向上します。プルーニングによって、SQLをより軽量化できます。 |
問合せから未使用の列および冗長属性を削除してください。 |
問合せ | 警告 |
スカラー副問合せの集計関数が実行されると、メイン問合せで返される行ごとに同じ関数が実行されます。各実行で、毎回、何度も同じ値が返されます。このような副問合せはリライトする必要があります。 |
スカラー副問合せでの集計関数の使用は避けてください。 |
問合せ | 警告 |
深くネストされたDECODE文によって、データベースによるカーディナリティの見積りが正しくなくなる可能性があります。パフォーマンスを向上させるには、DECODE文を簡素化するか、属性を事前に計算します。 |
問合せに深くネストされたデコード文の使用は避けてください。 |
問合せ | 警告 |
このチェックは、遅延フィルタの理由となる可能性がある属性を識別します。SQL構造の遅い時点でフィルタを適用すると、最適なフィルタリングが妨げられ、不要な処理オーバーヘッドが発生する可能性があります。より低いレベルでフィルタを適用すると、パフォーマンスが向上します。 |
問合せの初期レベルでフィルタを適用してください。 |
問合せ | 警告 |
結合条件は、複数のEXIST句およびIN句が使用されている場合、WHERE句の同じ側に記述する必要があります。 |
問合せで多数のEXIST句およびIN句を使用する場合、WHERE句の同じ側で結合条件を使用してください。 |
問合せ | 警告 |
特定の式をリライトすると、データベース・オプティマイザが同じ機能を維持しながら、より適切な計画を選択できるようになります。式に連結がある場合、データベースのバグが発生する可能性があります。回避策および解決策については、Technote 2800118.1の「実行計画における最適でない連結」を参照してください。 |
式をリライトして、データベース・オプティマイザがより適切な計画を選択できるようにしてください。 |
問合せ | 警告 |
OTBIレポートとBIPレポートでは、相互に関連するインライン・ビューに複雑なセミ結合(EXISTS条件)を追加することでユーザー・レベルのセキュリティを実装するFusion View Objects (VO)を使用します。セキュリティ句の構造が非常に複雑であるため、オプティマイザでは非効率的な結合方法が選択されることがあります。外部表との相関関係によって、このようなセキュリティ述語が複数回実行されることもあります。 |
副問合せでの複雑なEXISTS述語の使用は避けてください。 |
問合せ | 警告 |
相関副問合せは、結合先の外部表から抽出される行ごとに1回実行されるため、コストがかかります。相関副問合せ内の集計も、フィルタ処理がないか弱いと想定されるため、コストがかかります。 |
集計操作ではスカラー副問合せを避けてください。 |
問合せ | 警告 |
IN条件内にラップされた副問合せには、集計(DISTINCTまたはGROUP BY、あるいはその両方)演算子またはソート(ORDER BY)演算子が含まれます。これらの演算子はいずれもIN条件のセマンティクスに影響しません。ただし、コストがかかる操作が導入され、パフォーマンスに著しく影響する可能性があります。 |
副問合せのIN_CONDITIONからDISTINCT、GROUP BYまたはORDER BY句を削除してください。 |
問合せ | 警告 |
FROM句のほぼ同一の副問合せは避ける必要があります。このパターンによって、実表への複数の冗長アクセス、複数の冗長結合およびフィルタ操作が発生するためです。 |
問合せおよび副問合せに類似したコンテンツおよび構造を持つ副問合せの繰返しインスタンスを削除してください。 |
問合せ | 警告 |
個別値が少ない列に等価結合された2つの表では、非常に大きな中間行ソースが生成される可能性があります。 |
特定のデータにアクセスするには、問合せで適切なフィルタおよび条件を使用してください。 |
問合せ | 警告 |
表のフィルタ条件は非効率であり、多数の行が生成される可能性があります。 |
問合せで適切なフィルタを使用してください。 |