4 ExadataでのOracle Databaseの管理
4.1 SQL処理のオフロードの管理
表スキャンおよび索引スキャンを実行する問合せのパフォーマンスを最適化するために、データベースではデータ検索および取得処理をExadataストレージ・サーバーにオフロードできます。この機能は、データベース初期化パラメータによって制御されます。
- CELL_OFFLOAD_PROCESSING
CELL_OFFLOAD_PROCESSING初期化パラメータでは、SQL処理をOracle Exadata Storage Serverにオフロードできます。 - CELL_OFFLOAD_PLAN_DISPLAY
データベース・パラメータのCELL_OFFLOAD_PLAN_DISPLAY
では、Oracle Exadata System Softwareで評価可能な条件を、SQLコマンドのSTORAGE
条件としてSQLEXPLAIN PLAN
コマンドで表示するかどうかを指定します。 - CELL_OFFLOAD_DECRYPTION
親トピック: ExadataでのOracle Databaseの管理
4.1.1 CELL_OFFLOAD_PROCESSING
CELL_OFFLOAD_PROCESSING初期化パラメータでは、SQL処理をOracle Exadata Storage Serverにオフロードできます。
パラメータの値をTRUE
に設定すると、条件評価をセルにオフロードできます。このパラメータのデフォルト値はTRUE
です。セッション・レベルまたはシステム・レベルでパラメータの値をFALSE
に設定すると、データベースでは、ブロックを使用するセルですべての条件評価が実行されます。SQLのALTER SYSTEM
コマンドまたはALTER SESSION
コマンドを使用すると、CELL_OFFLOAD_PROCESSINGを動的に設定できます。次に例を示します。
SQL> ALTER SESSION SET CELL_OFFLOAD_PROCESSING = TRUE;
OPT_PARAM
オプティマイザ・ヒントを使用してCELL_OFFLOAD_PROCESSINGパラメータを設定することもできます。これにより、特定のSQLコマンドで条件のフィルタ処理の有効/無効を切り替えることができます。
-
SQLコマンドのCELL_OFFLOAD_PROCESSINGを無効にするには:
SELECT /*+ OPT_PARAM('cell_offload_processing' 'false') */ COUNT(*) FROM EMPLOYEES;
-
SQLコマンドのCELL_OFFLOAD_PROCESSINGを有効にするには:
SELECT /*+ OPT_PARAM('cell_offload_processing' 'true') */ COUNT(*) FROM EMPLOYEES;
ノート:
CELL_OFFLOAD_PROCESSING初期化パラメータを使用して、Oracle Exadata Storage Serverと従来型のストレージのパフォーマンスを比較することはできません。CELL_OFFLOAD_PROCESSINGをFALSE
に設定した場合でも、Oracle Exadata Storage Serverには従来型のストレージよりも多くの利点があります。Oracle Exadata Storage Serverは、サイズの大きい問合せを高速に処理できるように最適化されています。セル内にコントローラまたはその他のレベルのボトルネックが発生することはありません。Oracle Exadata System Softwareでは、最新のスケールアウト・アーキテクチャと、従来型のストレージ・ネットワークよりも非常に高いスループットを可能にするInfiniBandネットワークを使用しています。Oracle Exadata System SoftwareはOracle Databaseと密接に統合されており、設定、実行、監視、診断、リソース管理および破損防止のための独自の機能が用意されています。
親トピック: SQL処理のオフロードの管理
4.1.2 CELL_OFFLOAD_PLAN_DISPLAY
データベース・パラメータのCELL_OFFLOAD_PLAN_DISPLAY
では、Oracle Exadata System Softwareで評価可能な条件を、SQLコマンドのSTORAGE
条件としてSQL EXPLAIN PLAN
コマンドで表示するかどうかを指定します。
CELL_OFFLOAD_PLAN_DISPLAY
パラメータの値は、AUTO
、ALWAYS
、NEVER
です。デフォルト値はAUTO
です。
-
AUTO
では、SQLEXPLAIN PLAN
コマンドに、STORAGE
として評価できる条件を表示するように指示します(セルが存在する場合で、そのセルに表がある場合のみ)。 -
ALWAYS
は、Oracle Exadata System Softwareが存在するか、または表がセル上にあるかどうかとは関係なく、Oracle Exadata System Softwareに基づいてSQLEXPLAIN PLAN
コマンドに対する変更を作成します。この設定を使用して、Oracle Exadata Storage Serverに移行する前にOracle Exadata Storage Serverにオフロード可能な内容を確認できます。 -
NEVER
では、Oracle Exadata System Softwareに関してSQLEXPLAIN PLAN
コマンドは変更されません。
SQLのALTER SYSTEM
コマンドまたはALTER SESSION
コマンドを使用すると、CELL_OFFLOAD_PLAN_DISPLAY
パラメータを動的に設定できます。次に例を示します。
SQL> ALTER SESSION SET cell_offload_plan_display = ALWAYS;
親トピック: SQL処理のオフロードの管理
4.1.3 CELL_OFFLOAD_DECRYPTION
CELL_OFFLOAD_DECRYPTION初期化パラメータでは、復号化をOracle Exadata Storage Serverにオフロードできます。この復号化は、暗号化された表領域と列の両方に適用されます。パラメータの値をTRUE
に設定すると、復号化をセルにオフロードできます。このパラメータのデフォルト値はTRUE
です。システム・レベルでパラメータの値をFALSE
に設定すると、データベースでは、ブロックを使用するセルですべての復号化が実行されます。SQL ALTER SYSTEM
コマンドを使用すると、CELL_OFFLOAD_DECRYPTIONを動的に設定できます。次に例を示します。
SQL> ALTER SYSTEM SET CELL_OFFLOAD_DECRYPTION = FALSE;
親トピック: SQL処理のオフロードの管理
4.2 デフォルトのキャッシュ・ポリシーのオーバーライド
通常は必要ありませんが、CELL_FLASH_CACHE
セグメント記憶域オプションを使用して、Exadataスマート・フラッシュ・キャッシュの自動キャッシング・ポリシーをオーバーライドできます。
CELL_FLASH_CACHE
オプションは、次の設定をサポートしています。
NONE
: この値により、Exadataスマート・フラッシュ・キャッシュは対応するセグメントをキャッシュしなくなります。周辺のデータベース・セグメントでこの設定を使用すると、より重要でアクセス頻度の高いデータベース・セグメントで、より多くのキャッシュ領域を使用できます。DEFAULT
: この値を指定すると、データベース・セグメントは、Exadataスマート・フラッシュ・キャッシュのデフォルトのLRU (最低使用頻度)アルゴリズムを使用してキャッシュされます。この値は、CELL_FLASH_CACHE
のデフォルト設定です。KEEP
: この値は、Exadataスマート・フラッシュ・キャッシュのセグメント優先度を高くします。この設定を使用すると、キャッシュ内の対応するセグメントのデータが保持される可能性を高めることができます。
例4-1 CELL_FLASH_CACHEと組み合せたCREATE TABLEの使用
STORAGE句は、表または他のオブジェクトに対するCREATE
およびALTER
コマンドの実行時に指定できます。この例は、STORAGE句でCELL_FLASH_CACHE
を使用するCREATE TABLE
コマンドの例を示しています。
CREATE TABLE ptable (c1 number, c2 clob) TABLESPACE TBS_1
PARTITION BY RANGE(c1) ( PARTITION p1 VALUES LESS THAN (100)
TABLESPACE TBS_2 STORAGE (CELL_FLASH_CACHE DEFAULT),
PARTITION p2 VALUES LESS THAN (200) TABLESPACE TBS_3
STORAGE (CELL_FLASH_CACHE KEEP));
CREATE TABLE tkbcsrbc (c1 number, l1 clob)
lob (l1) STORE AS securefile
(cache nologging STORAGE (CELL_FLASH_CACHE NONE))
PCTFREE 0 TABLESPACE tbs_93 STORAGE
(initial 128K next 128K pctincrease 0);
例4-2 CELL_FLASH_CACHEと組み合せたALTER TABLEの使用
STORAGE句の変更が許可されるオブジェクトの場合、この例に示すように、CELL_FLASH_CACHE
と組み合せてALTER
コマンドを使用できます。
ALTER TABLE tkbcsrbc STORAGE( CELL_FLASH_CACHE DEFAULT);
ALTER TABLE tkbcsrbc MODIFY LOB (l1) (STORAGE (CELL_FLASH_CACHE KEEP));
例4-3 ビューを使用したCELL_FLASH_CACHE STORAGE句の問合せ
CELL_FLASH_CACHE
STORAGE句属性は、関連するオブジェクトに基づいたデータベース・ビューを使用して問い合せることができます。
SELECT TABLESPACE_NAME, TABLE_NAME, CELL_FLASH_CACHE FROM user_tables WHERE table_name='TKBCSRBC';
SELECT CELL_FLASH_CACHE FROM ALL_INDEXES WHERE index_name='TKBCIDX';
親トピック: ExadataでのOracle Databaseの管理
4.3 インメモリー列指向キャッシングの管理
列キャッシュは、データを列形式で格納するExadataスマート・フラッシュ・キャッシュのセクションです。Oracle Databaseから指示された場合、Exadataは列キャッシュの一部を自動的に使用して、Oracle Database In-Memory形式でデータを保持します。この拡張機能を使用するためにExadataで必要な構成は何もありません。
この機能は、Oracle Database In-Memoryオプションのライセンスを所有している場合に使用可能です。この機能を有効にするには、次のいずれかのデータベース・インスタンス・パラメータを使用します。
-
INMEMORY_SIZE
データベース・インスタンス・パラメータをゼロより大きい値に設定します。 -
Oracle Databaseバージョン19.8.0.0.200714以降、
INMEMORY_FORCE=cellmemory_level
を設定できます。このオプションを使用すると、データベース・インスタンスで専用のインメモリー・キャッシュを使用せずに、Exadataスマート・フラッシュ・キャッシュでインメモリー列指向キャッシングを使用できます。
CELLMEMORY
セグメント・オプションを使用して、Exadataスマート・フラッシュ・キャッシュのインメモリー列指向キャッシングのデフォルトの動作をオーバーライドできます。
SQL> ALTER TABLE table_name [ [ NO ] CELLMEMORY [ MEMCOMPRESS FOR [ QUERY | CAPACITY ] [ LOW | HIGH ] ]
オプションおよび句 | 使用方法の説明 |
---|---|
NO CELLMEMORY |
表が12.1.0.2の列指向のフラッシュ・キャッシュ形式から12.2のDatabase In-Memory形式への書換え対象外であることを示します。 |
CELLMEMORY およびCELLMEMORY MEMCOMPRESS FOR CAPACITY |
表をデフォルトのOracle Database 12.2 In-Memoryの形式でキャッシュできます。以前に指定したNO CELLMEMORY 文を取り消すか、指定した圧縮レベルを変更する場合のみ、この句を使用する必要があります。
|
CELLMEMORY MEMCOMPRESS FOR QUERY |
このオプションは、MEMCOMPRESS FOR CAPACITY が指定された場合、インメモリー列ストアのデータをそれを下回るように圧縮する必要があることを示します。このオプションにより、問合せ時のパフォーマンスが向上しますが、約2倍のフラッシュ領域が必要です。
|
LOW およびHIGH |
現時点では実装されていません。 |
例4-4 同じ表でのCELLMEMORYおよびINMEMORYオプションの使用
INMEMORY
とCELLMEMORY
の両方を同じ表で使用できます。次に例を示します。
CREATE TABLE t (c1 NUMBER) INMEMORY CELLMEMORY MEMCOMPRESS FOR QUERY;
メモリーにロードされそうにない、優先順位の低い表がある場合に、これら2つのオプションを指定すると便利です。また、CELLMEMORY
を指定することでも、列指向の性能を得られます。
親トピック: ExadataでのOracle Databaseの管理
4.4 Exadataハイブリッド列圧縮の管理
次の手順を使用して、Exadataハイブリッド列圧縮を使用するOracle Databaseオブジェクトを管理します。
- 表が圧縮されているかどうかの確認
表またはパーティションが圧縮されているかどうかを確認するには、*_TABLES
または*_TAB_PARTITIONS
データ・ディクショナリ・ビューを問い合せます。 - 圧縮されている行の確認
Exadataハイブリッド列圧縮表が更新されると、行はより低いレベルの圧縮に変更されます。 - 圧縮レベルの変更
パーティション、表または表領域の圧縮レベルは変更できます。 - Exadataハイブリッド列圧縮表のインポートおよびエクスポート
impdp
およびexpdp
コマンドを使用して、Exadataハイブリッド列圧縮表をインポートおよびエクスポートできます。 - Exadataハイブリッド列圧縮表のリストア
圧縮表バックアップはExadataハイブリッド列圧縮をサポートしているシステム、またはExadataハイブリッド列圧縮をサポートしていないシステムにリストアできます。
親トピック: ExadataでのOracle Databaseの管理
4.4.1 表が圧縮されているかどうかの確認
表またはパーティションが圧縮されているかどうかを確認するには、*_TABLES
または*_TAB_PARTITIONS
データ・ディクショナリ・ビューを問い合せます。
親トピック: Exadataハイブリッド列圧縮の管理
4.4.2 圧縮されている行の確認
Exadataハイブリッド列圧縮表が更新されると、行は下位レベルの圧縮に変更されます。
たとえば、圧縮レベルがCOMP_FOR_QUERY_HIGH
からCOMP_FOR_OLTP
またはCOMP_NOCOMPRESS
に変更される場合があります。
表の行をサンプリングすることで、高レベルの圧縮ではなくなった行の割合を確認できます。
ALTER TABLE
またはMOVE PARTITION
を使用すると、行をより高い圧縮レベルに設定できます。たとえば、行の10%が最高の圧縮レベルでなくなった場合、それらの行をより高い圧縮レベルに変更または移行できます。
親トピック: Exadataハイブリッド列圧縮の管理
4.4.3 圧縮レベルの変更
パーティション、表または表領域の圧縮レベルは変更できます。
次の例では、圧縮レベルを変更する場合のシナリオについて説明します。
ある企業では、その売上データにウェアハウス圧縮を使用していますが、6か月より古い売上データにはめったにアクセスしません。売上データがその経過時間に基づいてパーティション化された表に格納されている場合、古いデータの圧縮レベルをアーカイブ圧縮に変更して、ディスク領域を解放できます。
-
パーティション表の圧縮レベルを変更するには、
DBMS_REDEFINITION
パッケージを使用します。このパッケージでは、表の再定義をオンラインで実行するために、再定義中に表のデータを保持する一時コピーを作成します。再定義される表は、再定義中でも引き続き問合せやDML文に対応できます。オンラインでの表の再定義に使用される空き領域の容量は、既存の表と新しい表の相対的な圧縮レベルに応じて変化します。
DBMS_REDEFINITION
パッケージを使用する前に、システム上に十分なハード・ディスク領域が存在することを確認してください。 -
パーティション表の単一パーティションの圧縮レベルを変更するには、
ALTER TABLE ... MODIFY PARTITION
コマンドを使用します。 -
非パーティション表の圧縮レベルを変更するには、
COMPRESS FOR
句を指定してALTER TABLE ... MOVE
コマンドを使用します。ALTER TABLE ... MOVE
コマンドの実行中に表に対してDML文を実行するには、ONLINE
句も追加する必要があります。 -
表領域の圧縮レベルを変更するには、
ALTER TABLESPACE
コマンドを使用します。これにより、表領域に作成される新規オブジェクトのデフォルトが定義されます。既存のオブジェクトは変更も移動も行われません。
-
自動データ最適化(ADO)を使用して、圧縮レベルを自動的に調整するポリシーを作成できます。
4.4.4 Exadataハイブリッド列圧縮表のインポートおよびエクスポート
impdp
およびexpdp
コマンドを使用して、Exadataハイブリッド列圧縮表をインポートおよびエクスポートできます。
Exadataハイブリッド列圧縮表は、データ・ポンプのインポート・ユーティリティのimpdp
コマンドを使用してインポートできます。デフォルトでは、impdp
コマンドは表プロパティを保存し、インポートされた表はExadataハイブリッド列圧縮表となります。表はexpdp
コマンドでエクスポートすることもできます。
Exadataハイブリッド列圧縮をサポートしていない表領域では、impdp
コマンドは失敗し、次のエラーが表示されます。
ORA-64307: Exadata Hybrid Columnar Compression is not supported for tablespaces on this storage type
Exadataハイブリッド列圧縮表は、impdp
コマンドのTRANSFORM:SEGMENT_ATTRIBUTES=n
オプション句を使用して、非圧縮表としてインポートできます。
非圧縮表またはOLTP圧縮表は、インポート中にExadataハイブリッド列圧縮形式に変換できます。Exadata以外のハイブリッド列圧縮表をExadataハイブリッド列圧縮表に変換するには、次のようにします。
ALTER TABLESPACE ... SET DEFAULT COMPRESS
コマンドを使用して、表領域のデフォルト圧縮を指定します。- インポート中にインポートされた表の
SEGMENT_ATTRIBUTES
オプションを上書きします。
親トピック: Exadataハイブリッド列圧縮の管理
4.4.5 Exadataハイブリッド列圧縮表のリストア
圧縮表バックアップはExadataハイブリッド列圧縮をサポートしているシステム、またはExadataハイブリッド列圧縮をサポートしていないシステムにリストアできます。
-
Exadataハイブリッド列圧縮が含まれる表をExadataハイブリッド列圧縮をサポートしているシステムにリストアする場合は、通常どおり、Oracle Recovery Manager (RMAN)を使用してファイルをリストアします。
-
Exadataハイブリッド列圧縮表がExadataハイブリッド列圧縮をサポートしていないシステムにリストアされる場合は、表をExadataハイブリッド列圧縮から非圧縮形式に変換する必要があります。
次のステップを使用して、Exadataハイブリッド列圧縮表を非圧縮形式に変換します。
表を非圧縮形式に変換した後、OLTP圧縮やOracle Database In-Memory圧縮などの別の形式の圧縮をオプションで使用できます。
4.5 ExadataでのOracle Database機能の管理
Oracle Exadata Database Machineと組み合せて次のOracle Database機能を使用および管理するには、これらのガイドラインを使用します。
- Exadataでの索引の使用
以前は、適切なパフォーマンスを得るにはデータベースに索引が必要でした。しかし、Oracle Exadata Database Machineでは、索引を使用せずに優れたスキャン率を実現できます。 - ExadataでのSQLチューニング・アドバイザの使用
SQLチューニング・アドバイザでは、1つ以上のSQL文を入力として使用し、自動チューニング・オプティマイザを使用してSQL文のチューニングを実行します。 - ExadataでのSQL計画管理の使用
SQL計画管理は、長期間にわたってSQL文の実行計画を記録し評価することで、SQL文の実行計画の突然の変更によってパフォーマンスが低下するのを防止します。
親トピック: ExadataでのOracle Databaseの管理
4.5.1 Exadataでの索引の使用
以前は、適切なパフォーマンスを得るにはデータベースに索引が必要でした。しかし、Oracle Exadata Database Machineでは、索引を使用せずに優れたスキャン率を実現できます。
Exadataスマート・スキャンのオフロードを使用して実行計画が高速になるかどうかを判断するには、索引を使用するアプリケーションの実行計画を確認します。索引がなくてもスキャンが高速になるかどうかを判断するには、オプティマイザで索引を認識できないようにします。認識されない索引はDML操作によって管理されますが、オプティマイザでは使用されません。
索引が認識されないようにするには、次のコマンドを使用し、index_nameのかわりに索引名を使用します。
SQL> ALTER INDEX index_name INVISIBLE;
4.5.2 ExadataでのSQLチューニング・アドバイザの使用
SQLチューニング・アドバイザでは、1つ以上のSQL文を入力として使用し、自動チューニング・オプティマイザを使用してSQL文のチューニングを実行します。
SQLチューニング・アドバイザの実行結果は、アドバイスまたは推奨事項の形式で出力され、推奨事項ごとに論理的根拠および予想される利点が示されます。SQLチューニング・アドバイザでは、次の情報が提供されます。
-
データ不足の統計や古い統計
-
最適な実行計画
-
最適なアクセス・パスおよびオブジェクト
-
最適なSQL文
システム統計によってCPUと記憶域のパフォーマンスが測定され、オプティマイザでプランを評価する際にこれらの入力を使用できます。データベースでは、インスタンスが最初に起動したときに非作業負荷統計と呼ばれるデフォルトのシステム統計が自動的に収集されます。システム統計により、Oracle Exadata Database Machineのパフォーマンスがオプティマイザで認識されるようになります。
Oracle Exadata固有の統計を収集しているかどうかを確認するには、次のSQLコマンドを使用します。
SELECT pname, PVAL1 FROM aux_stats$ WHERE pname='MBRC';
PVAL1
がNULLまたは未設定の場合は、システム統計が手動で収集されておらず、デフォルトのシステム統計が使用されています。
すべてのExadata環境でシステム統計をExadataモードで収集することはお薦めしません。ほとんどの場合、デフォルトのシステム統計を使用することをお薦めします。現在の実行プランで許容可能なパフォーマンスが得られる場合は、Exadataモードでシステム統計を収集しないでください。実行プランのカーディナリティの見積りは正確だが、全体スキャンの方が効率的な状況でオプティマイザが全表スキャンのコストを過大に見積る場合は、システム統計をExadataモードで収集する必要があります。影響が最初から評価され、問題が発生しても簡単に対処できる新しいアプリケーションやデプロイメントの場合は、システム統計をExadataモードで収集できます。
次のSQLコマンドは、Exadataモードでシステム統計を収集します。
exec dbms_stats.gather_system_stats('EXADATA');
新しいアプリケーションまたは新しいデプロイメントのテストで、デフォルトのシステム統計が手動で収集されたシステム統計と同じかそれ以上に効率的であることが明らかになった場合は、DBMS_STATS.DELETE_SYSTEM_STATS
プロシージャを使用してシステム統計をデフォルト値にリセットできます。このプロシージャを実行した後、データベースを停止してから再度開いてください。
ノート:
Oracle Exadata System Softwareが最新のパッチ・バンドルを使用している必要があります。
4.5.3 ExadataでのSQL計画管理の使用
SQL計画管理は、長期間にわたってSQL文の実行計画を記録し評価することで、SQL文の実行計画の突然の変更によってパフォーマンスが低下するのを防止します。
SQL計画管理を使用して、効果的であることが判明している既存の計画セットで構成されるSQL計画ベースラインを作成します。次にSQL計画ベースラインを使用して、システムで発生する変更(ソフトウェアのアップグレードや新しいアプリケーション・モジュールのデプロイなど)とは無関係に、対応するSQL文のパフォーマンスを保持します。
SQL計画管理を使用して、新しいオプティマイザ統計や索引などの変更に適切に適応させることもできます。パフォーマンスを向上させる計画変更のみを検証して受け入れることができます。SQL計画の展開は、オプティマイザが新しい計画を検証して既存のSQL計画ベースラインに追加するためのプロセスです。
SQLプロファイルとSQL計画ベースラインのどちらも、オプティマイザで最適な計画のみが使用されるようにすることによりSQL文のパフォーマンスを向上させます。通常、SQL計画ベースラインは重大なパフォーマンスの問題が発生する前に作成します。SQL計画ベースラインは、オプティマイザが最適ではない計画を将来的に使用することを防ぎます。SQLプロファイルは、SQLチューニング・アドバイザを起動するとデータベースにより作成されます。通常、チューニング・アドバイザは、SQL文により高負荷の兆候が示された後にのみ起動します。SQLプロファイルは主に、最適ではない計画につながったオプティマイザのミスを継続的に解決するために使用できます。
DBMS_SPM
パッケージは、様々なSQL文に対して保持される、計画履歴およびSQL計画ベースラインに対する制御された操作を実行するためのインタフェースをユーザーに提供することによって、SQL計画管理機能をサポートします。DBMS_SPM
パッケージは、計画の展開で使用できるプロシージャとファンクションを提供します。
Oracle Exadata System Softwareリリース19.1以降では、DBMS_SPM.CONFIGURE
に新しいパラメータAUTO_SPM_EVOLVE_TASK
が用意されており、これはExadata Database MachineオンプレミスおよびOracle Cloudデプロイメントのみで使用できます。AUTO_SPM_EVOLVE_TASK
パラメータには、次の3つの値のいずれかを指定できます。
ON
: この機能が有効になります。SPM展開アドバイザにより、SQL計画履歴を定期的に管理するタスクが作成されます。このタスクでは、代替の有無を確認し、SQL実行計画を展開して受け入れる必要があるかどうかを判断します。このタスクは、高頻度統計収集と同様の方法で、通常のメンテナンス・ウィンドウの外部で実行されます。OFF
: この機能は無効になります。これはデフォルト値です。AUTO
: Oracle Databaseがこの機能を使用するタイミングを決定します。
関連項目