Oracle® Fusion Middleware Oracle Business Intelligence Discoverer管理者ガイド 11gリリース1 (11.1.1) E51906-01 |
|
前 |
次 |
この章では、Discoverer Administratorでのクエリー予測の使用方法について説明します。この章の内容は次のとおりです。
Discovererには、Discovererクエリーによる情報の取得に必要な時間を予測する機能が備わっています。クエリーの開始前にクエリー予測が表示されるため、Discovererユーザーはクエリーを実行するかどうかを判断できます。この強力な機能により、Discovererユーザーはサイズの大きいレポートの待機に必要な時間を制御できます。
クエリー予測では、Oracle RDBMSでコストベースのオプティマイザ(CBO)が使用されます。このため、ルールベースのオプティマイザ(RBO)を使用して実行するデータベースに対して実行されているときは、クエリー予測を使用できません。
Discovererエンド・ユーザーは、クエリーが設定した時間を超えると予測される場合にそのことを通知するように指定できます。ダイアログに、クエリー予測の詳細とクエリーをキャンセルするオプションが表示されます。
クエリーを取り消す場合、ユーザーはそのクエリーが後で(深夜などに)実行されるようにワークブックをスケジュールできます。深夜に実行すると、翌朝にワークシートを開くことができます(Discoverer Plusでのワークブックのスケジュール方法の詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Discoverer Plusユーザーズ・ガイド』を参照)。Discoverer Administratorを使用したエンド・ユーザーによるワークブックのスケジュールを可能にする方法の詳細は、第8章「ワークブックのスケジュール」を参照してください。
Discovererエンド・ユーザーが、ワークシートの実行時にクエリー予測を使用できない場合があります。この理由を参照するには、Discoverer Administratorで「ヘルプ」→「データベース情報」を選択して、「データベース情報」ダイアログを表示します。クエリー予測が使用できなくなる理由は次のとおりです。
理由 | 解決策 |
---|---|
クエリー予測をサポートしていないデータベース(Oracle 7.1.xなど)に接続している。 | データベースをアップグレードしてください。 |
クエリー予測に必要なビューが使用できない。 | 「クエリー予測に必要なデータベース・ビューを使用できるようにする方法」を参照してください。 |
init<sid>.oraのtimed_statisticsパラメータがFALSE (デフォルト値)に設定されている。 | 「クエリー予測のためのtimed_statisticsパラメータの確認および変更方法」を参照してください。 |
データ・テーブルが分析されていない。 | 「データ・テーブルの分析方法」を参照してください。 |
init<sid>.oraのoptimizer_modeパラメータがCHOOSEではなくRULEに設定されている。 | 「クエリー予測のためのoptimizer_modeパラメータの確認および変更方法」を参照してください。 |
クエリー予測の速度と精度に信頼性がある場合、ユーザーは実行に時間がかかるクエリーを後で実行するようにスケジュールする傾向があります。クエリー予測が正確であれば、一般にサーバーへの負荷が軽減されるため、すべてのユーザーにとってクエリーのパフォーマンスが向上します。
クエリー予測を効果的に実装する手順は次のとおりです。
ANALYZE TABLEコマンドを使用して、ユーザーがクエリーを行うテーブルを分析します。EULデータ定義ワークブックの「ビジネスエリアおよびフォルダ」ワークシートを使用して、EULのフォルダがいつ分析されたかを表示します。データ・テーブルの分析方法の詳細は、「データ・テーブルの分析方法」を参照してください。
システム・ビューV_$SQLへのアクセス権をユーザーに付与します(詳細は、「Secure Viewsでクエリー予測を使用する方法」を参照)。
Discovererでクエリー予測を有効にする前に、様々なデータベース・ビューでパブリック・ユーザーにSELECT権限を付与する必要があります。詳細は、Oracle10gデータベースのドキュメントを参照してください。
クエリー予測に必要なビューを使用できるようにする手順は次のとおりです(9.2.0.7以降のOracleデータベースの場合)。
SQL*Plusを起動し(まだ実行されていない場合)、SYSユーザーあるいはSYSDBA権限を付与されたユーザーとして接続します。
SQL*Plusがすでに実行されている場合は、コマンド・プロンプトで次のように入力します。
SQL> CONNECT sys/sys_pw@database AS SYSDBA;
sysはSYSユーザー、sys_pwはSYSユーザーのパスワードです。
コマンド・プロンプトで次のように入力して、クエリー予測に必要なビューでのSELECTアクセス権限を付与します。
SQL> grant select on v_$session to public; SQL> grant select on v_$sesstat to public; SQL> grant select on v_$parameter to public;
注意: SELECT ON v_$parameterを付与するには、SYSユーザーとしてログインする必要があります。SYSユーザーとしてログインできない場合、またはSYSのユーザー名とパスワードが不明な場合は、データベース管理者に問い合せてください。
Discovererでクエリー予測を有効にするには、データベース・ビューv_$parameterにあるtimed_statisticsパラメータをTRUEに設定する必要があります。
timed_statisticsがTRUEに設定されていることを確認する手順は次のとおりです。
SQL*Plusを起動し(まだ実行されていない場合)、データベース管理者として接続します。
SQL*Plusがすでに実行されている場合は、コマンド・プロンプトで次のように入力します。
SQL> CONNECT dba_user/dba_pw@database;
dba_userはデータベース管理者、dba_pwはデータベース管理者のパスワードです。
コマンド・プロンプトで次のように入力します。
SQL> select value from v$parameter where name = 'timed_statistics';
クエリーにより値TRUEが返された場合、timed_statisticsパラメータはクエリー予測が使用できるように正しく設定されています。値FALSEが返された場合、init<sid>.oraファイルのtimed_statisticsパラメータの値を変更するまでクエリー予測を使用できません。
注意: v$parameterは、ビューv_$parameterのシノニム(ポインタ)です。
init<sid>.oraファイルを編集する手順は次のとおりです。
INIT<SID>.ORAファイルを検索します。
INIT<SID>.ORAファイルは、<ORACLE_HOME>\databaseにあります。このファイルのデフォルト名はINITORCL.ORAです。ORCLは<SID>名を表します。
次の行が含まれるようにファイルを編集します。
timed_statistics = TRUE
変更を有効にするには、データベースをシャットダウンしてから再起動します。
Discovererでは、クエリー予測にデータ・テーブルの分析結果が使用されます。データ・テーブル分析により、データベース・テーブルに関する情報(テーブルのサイズなど)が生成されます。詳細は、Oracle10gデータベースのドキュメントを参照してください。
データ・テーブルを分析する手順は次のとおりです。
SQL*Plusを起動し(まだ実行されていない場合)、分析するデータ・テーブルの所有者として接続します。
SQL*Plusがすでに実行されている場合は、コマンド・プロンプトで次のように入力します。
SQL> connect tab_owner/tab_pw@database;
tab_ownerはデータ・テーブルの所有者のユーザー名、tab_pwはそのパスワードです。
次のクエリーを入力します。
SQL> analyze table <tabowner.tablename> compute statistics for all columns;
注意
時間の経過に伴ってテーブルの内容が大幅に変更されると予想される場合は、データ・テーブルを定期的に分析してください。
クエリー予測に時間がかかる(10秒を超える)場合は、テーブルが分析されていません。たとえば、Discovererでのクエリー予測の表示に25秒程度かかっても、クエリーが2秒未満で実行される場合などがあります。
optimizer_modeパラメータがCHOOSEに設定されていることを確認する手順は次のとおりです。
SQL*Plusを起動し(まだ実行されていない場合)、データベース管理者として接続します。
SQL*Plusがすでに実行されている場合は、コマンド・プロンプトで次のように入力します。
SQL> CONNECT dba_user/dba_pw@database;
dba_userはデータベース管理者、dba_pwはデータベース管理者のパスワードです。
コマンド・プロンプトで次のように入力します。
SQL> select value from v$parameter where name = 'optimizer_mode';
注意: v$parameterは、ビューv_$parameterのシノニム(ポインタ)です。
クエリーにより値CHOOSEが返された場合、optimizer_modeパラメータはクエリー予測が使用できるように正しく設定されています。テーブルが分析されている場合はシステムでコストベースのオプティマイザが使用され、テーブルが分析されていない場合はルールベースのオプティマイザが使用されます。
クエリーにより値FIRSTROWSまたはALLROWSが返された場合も、optimizer_modeパラメータはクエリー予測が使用できるように正しく設定されています。
テーブルが分析されていない場合でも、FIRSTROWSおよびALLROWSの両方が返されると、コストベースのオプティマイザが使用されます。
値RULEが返された場合、init<sid>.oraファイルのoptimizer_modeパラメータの値を変更するまでクエリー予測を使用できません。
init<sid>.oraファイルを編集する手順は次のとおりです。
INIT<SID>.ORAを検索します。
INIT<SID>.ORAファイルは、<ORACLE_HOME>\databaseにあります。このファイルのデフォルト名はINITORCL.ORAです。ORCLは<SID>名を表します。
次の行が含まれるようにファイルを編集します。
optimizer_mode = CHOOSE
変更を有効にするには、データベースをシャットダウンしてから再起動します。
クエリー予測の処理にかかる時間は短縮できます。
Discovererでは、クエリー予測の処理中にコストベースのオプティマイザが使用されます。コストベースのオプティマイザではクエリー文のみが解析され、クエリーの実行は通常、サーバーのデフォルト・オプティマイザ・モードで管理されることに注意してください。
スキーマが大きい環境(Oracle Applicationsなど)では、コストベースのオプティマイザを使用したデータベースによる文の解析に時間がかかることがあります。この場合、クエリー予測処理が完了するまで数分かかることがあります。
クエリー予測の処理が完了するまでユーザーが長い時間待機する必要がある場合は、次の解決策を検討してください。
Discovererの適切なレジストリ設定を使用して、クエリー予測を無効にできます。次に例を示します。
Discoverer Desktopの場合
Windowsレジストリで、HKEY_CURRENT_USER\Software\Oracle\Discoverer 10\Database\QPPEnable
レジストリ・キーのDWORD値を0 (ゼロ)に設定します。
クエリー予測を再度有効にする場合は、このレジストリ・キーを削除するか、値を1に設定します。
Windowsレジストリに格納されているDiscovererのレジストリ設定の詳細は、「Discoverer AdministratorおよびDiscoverer Desktopのレジストリ設定」を参照してください。
Discoverer PlusおよびDiscoverer Viewerの場合
pref.txtファイルのQPPEnableレジストリ設定の値を変更します。変更を有効にするには、プリファレンスを適用する必要があります。プリファレンスを適用すると、新しい値がreg_key.dcファイルに書き込まれます(プリファレンスの設定方法の詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Discoverer構成ガイド』を参照)。QPPEnableを1に設定すると、クエリー予測が有効になります。クエリー予測を無効にするには、QPPEnableを0に設定します。
.reg_key.dc
ファイルに格納されているDiscovererレジストリ設定の詳細は、「Discoverer PlusおよびDiscoverer Viewerのレジストリ設定」を参照してください。
Discovererの適切なレジストリ設定を使用して、クエリー予測でコストベースのオプティマイザが強制的に使用されないようにできます。次に例を示します。
Discoverer Desktopの場合
Windowsレジストリで、HKEY_CURRENT_USER\Software\Oracle\Discoverer 10\Database\QPPCBOEnforced
レジストリ・キーのDWORD値を0 (ゼロ)に設定します。
このレジストリ・キーを0に設定すると、コストベースのオプティマイザ(CBO)が強制的に使用されず、データベース・サーバーの通常のルールが適用されます。
クエリー予測で再度コストベースのオプティマイザが強制的に使用されるようにする場合は、このレジストリ・キーを削除するか、値を1に設定します。
Windowsレジストリに格納されているDiscovererのレジストリ設定の詳細は、「Discoverer AdministratorおよびDiscoverer Desktopのレジストリ設定」を参照してください。
Discoverer PlusおよびDiscoverer Viewerの場合
pref.txtファイルのQPPCBOEnforcedレジストリ設定の値を変更します。変更を有効にするには、プリファレンスを適用する必要があります。プリファレンスを適用すると、新しい値がreg_key.dcファイルに書き込まれます(プリファレンスの設定方法の詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Discoverer構成ガイド』を参照)。QPPCBOEnforcedを1に設定すると、クエリー予測でコストベースのオプティマイザが強制的に使用されます。クエリー予測でデフォルトのオプティマイザを使用するように指定するには、QPPCBOEnforcedを0に設定します。
.reg_key.dc
ファイルに格納されているDiscovererレジストリ設定の詳細は、「Discoverer PlusおよびDiscoverer Viewerのレジストリ設定」を参照してください。
コストベースのオプティマイザにおける索引の使用方法を調整できます。たとえば、次のデータベース・パラメータを調整できます。
optimizer_index_cost_adj
optimizer_index_caching
データベース・パラメータの詳細は、Oracle11gデータベースのドキュメントを参照してください。
統計テーブルから既存の統計を削除できます。
詳細は、「古いクエリー予測統計の削除方法」を参照してください。
Discovererのクエリー予測機能では、EXPLAIN PLAN文を使用してクエリーが分析されます。ただし、EXPLAIN PLAN文ではSecure Viewsに対するクエリーの分析ができません。このため、Secure Viewsに対するクエリーを行う場合はクエリー予測が正常に機能できなくなります。この制限を回避するには、システム・ビューV_$SQLへのアクセス権限をユーザーに付与してください。
システム・ビューV_$SQLへのアクセス権限をユーザーに付与する手順は次のとおりです(リリース9.2.0.7以降のOracleデータベースの場合)。
SQL*Plusを起動し(まだ実行されていない場合)、SYSユーザーあるいはSYSDBA権限を付与されたユーザーとして接続します。
SQL*Plusがすでに実行されている場合は、コマンド・プロンプトで次のように入力します。
SQL> CONNECT sys/sys_pw@database AS SYSDBA;
sysはSYSユーザー、sys_pwはSYSユーザーのパスワードです。
コマンド・プロンプトで次のように入力して、クエリー予測に必要なビューでのSELECTアクセス権限を付与します。
SQL> grant select on v_$sql to public;
注意
SELECT ON V_$SQLを付与するには、SYSユーザーとしてログインする必要があります。SYSユーザーとしてログインできない場合、またはSYSのユーザー名とパスワードが不明な場合は、データベース管理者に問い合せてください。
SQL*Plusで次のスクリプトを実行しても、システム・ビューV_$SQLへのアクセス権限をユーザーに付与できます。
<ORACLE_HOME>\discoverer\util\eulsuqpp.sql
このスクリプトを使用するには、SYSTEMパスワードを知っている必要があります。
様々な理由により、クエリー予測統計が不要になる場合があります。指定した日付より前に作成されたクエリー予測統計をすべて削除できます。
データベースから古いクエリー予測を削除する手順は次のとおりです。
SQL*Plusを起動し(まだ実行されていない場合)、EUL所有者として接続します。
SQL*Plusがすでに実行されている場合は、コマンド・プロンプトで次のように入力します。
SQL> connect jchan/tiger@database;
jchanとtigerはそれぞれEUL所有者のユーザー名とパスワードです。
SQLファイルeulstdel.sqlを実行します。
たとえば、コマンド・プロンプトで次のように入力します。
SQL> start <ORACLE_ HOME>\discoverer\util\eulstdel.sql
<ORACLE_HOME>はDiscoverer Administratorがインストールされている場所です。
データベースに格納されているクエリー統計のサマリーが表示されます。指定した日数を超える期間が経過したクエリー統計を削除するオプションがあります。
(オプション)何日後にクエリー統計を削除するかを入力します(統計を削除しない場合は空白のままにしておきます)。
日数を指定しない場合、クエリー統計は削除されません。