この章では、SQL DeveloperでのTimesTen問合せオプティマイザとの対話方法について説明します。内容は次のとおりです。
問合せオプティマイザは、TimesTenデータベースのシステム表に格納されている統計を使用して、文の最適な実行計画を決定します。TimesTenでは、表レベルの統計をSYS.TBL_STATS
表に格納します。列の最小値と最大値および一意の値の数など列レベルの統計は、SYS.COL_STATS
表に格納されています。
通常の表およびキャッシュ表で更新が発生した場合、表および列の統計は計算されません。かわりに、明示的なリクエストが発生した場合に統計が更新されます。
ユーザーが所有するすべての表またはユーザーが所有する特定の表の統計が更新できます。
すべての表の統計を更新するには、「表」ノードを右クリックして、「統計」→「更新」を選択します。
特定の表の統計を更新するには、「表」ノードの左側にある「+」をクリックします。表の名前を右クリックして、「統計」→「更新」を選択します。
表が見つからない場合は、「表の特性の表示」を参照してください。
「統計の更新」ダイアログの「プロンプト」タブで、「参照したコマンドの無効化」を選択して、統計が更新された表を参照する文の実行計画を無効化します。文の実行計画を無効化する場合は、次回の実行時にその文が再コンパイルまたは再準備されます。
「表統計の間隔タイプ」で、完全な間隔を選択して、表の行を2つ以上の間隔に区切り、各間隔で統計を計算するか、単一の間隔を選択して、一連の行全体を単一の間隔として統計を計算します。表でレンジ索引を定義して、完全な間隔の統計を計算する必要があります。
「適用」をクリックします。
表のオプティマイザの統計を表示するには、表の名前をクリックします。
検索している表が見つからない場合は、「TimesTenデータベース・オブジェクトの検索」を参照してください。
表のタブ内の「統計」タブの上部のセクションには、次のような表の統計が表示されます。
表内の行数
表の統計の最新の更新を示すタイムスタンプ
下部のセクションには、列統計が表示されます。各列に次の情報が表示されます。
列の名前。
統計を計算するためにデータを区切る間隔の数
NULL
値の合計数
NULL
値を許可しない一意の値の合計数
各間隔の行の合計数
SQL Developerにより、各列の各間隔の次の値が表示されます。
最も頻繁に発生する値以外の一意の値の数
最も頻繁に発生する値以外の値を含む行の数
最も頻繁に発生する値が含まれる行の数
最小値
最大値
最大頻度の値
問合せオプティマイザの統計の詳細は、『Oracle In-Memory Database Cache概要』の統計に関する説明、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の最適化を実行するタイミングに関する説明、または『Oracle TimesTen In-Memory Databaseリファレンス』のttOptUpdateStatsに関する説明を参照してください。
一連のSQL文を生成して、表の統計を現在の状態にリストアできます。SQL文は、単一の表用に、または、接続ユーザーがアクセス権限を持つ複数のユーザー表用に生成できます。表の統計を.sql
ファイルにエクスポートした後で、SQL Developerの.sql
ファイルを開き、スクリプト・ファイルを実行することによって、表の統計をインポートできます。
現在のTimesTen表の統計をエクスポートするには、SQL Developerのメイン・ページで作業する必要があります。
単一の表の統計を保存するには、表の名前を右クリックして、「統計」→「エクスポート」を選択します。すべてのユーザー表の統計を保存するには、「表」を右クリックして、「統計」→「エクスポート」を選択します。
「オプティマイザ統計のエクスポート」ダイアログが表示されます。ダイアログの右下にある「保存」ボタンを確認します。
「保存」をクリックします。
「オプティマイザ統計エクスポート・コマンドの保存」ダイアログが表示されます。
現行のTimesTen表の統計を保存するディレクトリを選択します。
「ファイル名」フィールドに、現行のTimesTen表の統計の名前を定義します。
現行のTimesTen表の統計のデフォルトのファイル名は、接続名がconnection_name
の場合は、connection_name
-exportstatistics-
YYYYMMDDMISS
.sql
です。YYYYMMDDHHMISS
は、推奨項目が作成された時点のタイムスタンプで、YYYY
は年、MM
は月、DD
は日、HH
は時、MI
は分、SS
は秒を表します。
「保存」をクリックします。
現行のTimesTen表の統計が保存されます。
文を実行する前に、準備またはコンパイルしておく必要があります。文を準備またはコンパイルすると、問合せオプティマイザによって、文の実行計画が生成されます。
文の実行計画を表示するには、SQLワークシートで文を作成します。接続でワークシートを開いていない場合は、接続名のノードを右クリックして、「SQLワークシートを開く」を選択します。図1-7「TimesTen接続の表示」を参照してください。
接続をオープンしていない場合は、「SQLワークシート」を選択して、接続を確立してから、その接続のワークシートを開きます。
「接続の選択」ダイアログが表示されます。「接続」フィールドで、接続の名前を選択します。「OK」をクリックします。
選択した接続名に関連付けられた接続が存在しない場合、TimesTenデータベースへの接続が確立されます。
「SQLワークシート」で文を構成する前に、文で参照されている表および表と列の統計が更新された表に適切な索引が作成されていることを確認します。統計の更新の詳細は、「問合せオプティマイザで使用される表および列の統計の更新」を参照してください。
「SQLワークシート」で文を作成します。次に、「実行計画」を選択して、文の実行計画を表示します。
実行計画は、「実行計画」ペインに表示され、階層形式で処理する順序とは逆の順序(ツリーの一番下の操作が最初に処理され、ツリーの一番上の操作が最後に処理される)で表示されます。操作ごとの計画では、操作を実行する表または索引、あるいは(適用可能な場合は)操作によって処理される文の述語の式が示されます。実行計画に表示される操作のタイプには、表または索引のスキャン(ロックの粒度が表示される)、結合、グループ化およびソートがあります。
実行計画の解釈について、『Oracle In-Memory Database Cache概要』のオプティマイザ計画に関する説明、または『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のSQL問合せ計画の表示に関する説明を参照してください。
問合せパフォーマンスのチューニングの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のSQL問合せ計画の表示に関する説明を参照してください。