データベース
 Computer >> コンピューター >  >> プログラミング >> データベース

Oracle Database 12cリリース12.1.0.0の新しいパフォーマンス調整機能:パート2

TriCoreが最初に公開したもの:2017年4月12日

この2部構成のブログ投稿シリーズでは、Oracle®データベースの新しいパフォーマンス調整機能について説明します。 Part1では、OracleDatabaseバージョン12.1.0.1について説明しました。このフォローアップ投稿はバージョン12.1.0.2をカバーしています。

インメモリ列ストアの概要

インメモリ列ストア(IM列ストア)は、SystemGlobal Area(SGA)のオプションの領域であり、テーブル、パーティション、およびその他のデータベースオブジェクトのコピーを、高速スキャン用に最適化された列形式で格納します。 IM列ストアは、分析、データウェアハウジング、およびオンライントランザクション処理(OLTP)アプリケーションのデータベースパフォーマンスを高速化します。

IM列ストアの仕組み

IM列ストアは、データベースオブジェクトのコピーをSGAに格納します。データベースのバッファキャッシュを置き換えません。両方のメモリ領域は、同じデータを異なる形式で保存できます。 IM列ストアに格納された行は、列形式の大きなメモリ領域に分割されます。列は、各領域内のメモリの連続した領域に別々に存在します。

次のデータベースオブジェクトのいずれかに対してIM列ストアを有効にできます。

  • テーブル
  • マテリアライズドビュー
  • パーティション
  • テーブルスペース

テーブルのすべての列をIM列ストアに格納することも、それらのサブセットのみを格納することもできます。同様に、パーティション化されたテーブルの場合、テーブルのすべてのパーティションを格納することも、それらのサブセットのみを格納することもできます。表領域レベルでIMcolumnストアを有効にすると、Oracle Databaseは、IM列ストアの表領域内のすべての表とマテリアライズド・ビューを自動的に有効にします。

IM列ストアを使用することによるパフォーマンス上の利点

データベース・オブジェクトをディスクではなくメモリに格納すると、OracleDatabaseはスキャン、クエリ、結合、および集計をはるかに高速に実行できます。 IMcolumnストアは、次のタスクを実行するときにパフォーマンスを向上させることができます。

  • 多数の行をスキャンしてフィルターを使用する
  • 多数の列セットの小さなサブセットのクエリ
  • 特に結合条件がほとんどの行をフィルタリングする場合に、小さなテーブルを大きなテーブルに結合する
  • クエリでのデータの集計

IM列ストアは、データ操作言語(DML)ステートメントのパフォーマンスも向上させます。 OLTPシステムでは通常、一般的にアクセスされる列に多くのインデックスを作成する必要があります。これらのインデックスは、DMLステートメントのパフォーマンスに悪影響を与える可能性があります。データベースオブジェクトをIM列ストアに格納すると、スキャンの実行速度が大幅に向上するため、これらのインデックスは不要になります。不要なインデックスを削除すると、更新する必要のあるインデックスが少なくなるため、DMLステートメントのパフォーマンスが向上します。

Oracle Database 12cリリース12.1.0.0の新しいパフォーマンス調整機能:パート2

画像ソース :Oracle Learning Library YouTubeビデオ:Oracle Database 12cdemos:インメモリ列ストアアーキテクチャの概要

IM列ストアの必要なサイズの見積もり

IM列ストアは、次の圧縮方法をサポートしています。

圧縮方法 メモリ内データの圧縮順序 インメモリデータの圧縮の比較
MEMCOMPRESSなし 1 NIL
DMLのMEMCOMPRESS 2(最小圧縮) B<すべて
MEMCOMPRESS FOR QUERY LOW 3 B
MEMCOMPRESS FOR QUERY HIGH 4 C
容量が少ないMEMCOMPRESS 5 D
MEMCOMPRESS FOR CAPACITY HIGH 6(高圧縮) すべて


次の例は、oe.product_informationを有効にする方法を示しています。 IM列ストアのテーブルであり、圧縮方法を指定しますMEMCOMPRESS FOR CAPACITY HIGH

SQL>ALTER TABLE oe.product_information INMEMORY MEMCOMPRESS FOR CAPACITY HIGH;

IM列ストアのサイズ設定

データベースオブジェクトをIMcolumnストアに格納するために必要なメモリを決定したら、INMEMORY_SIZEを使用してそのサイズを設定できます。 初期化パラメータ。

次の手順を使用して、IM列ストアのサイズを設定します。

  1. INMEMORY_SIZEを設定します 必要なサイズの初期化パラメータ。

    このパラメータのデフォルト値は0です。 、これは、IM列ストアが使用されないことを意味します。 IM列ストアを有効にするには、このパラメーターを非ゼロ値に設定します。

    マルチテナント環境では、PDBごとにこのパラメーターを設定することで、各プラガブルデータベース(PDB)のIM列ストアのサイズを指定できます。PDBの値の合計は、コンテナーデータベース(CDB)の値と同じである必要はありません。それよりも大きい場合があります。

  2. IM列ストアのサイズを設定したら、データベースインスタンスを再起動して、データベースオブジェクトを格納できるようにする必要があります。

    次の例は、IM列ストアのサイズを100GBに設定する方法を示しています。

     ALTER SYSTEM SET INMEMORY_SIZE = 100G;
    

IM列ストアの管理性のサポート

SQLモニターレポート、アクティブセッション履歴(ASH)レポート、および自動ワークロードリポジトリ(AWR)レポートに、さまざまなメモリ内操作の統計が表示されるようになりました。

データベースキャッシュモード

2つのデータベースキャッシュモードがあります:

  • 以前のバージョンのOracleDatabaseが使用していたデフォルトのデータベースキャッシュモード
  • Oracle Database 12cRelease 1(12.1.0.2)の新機能である強制フルデータベースキャッシュモード
デフォルトのデータベースキャッシュモード

デフォルトでは、Oracle Databaseは、全表スキャンを実行するときにデフォルトのデータベース・キャッシング・モードを使用します。

Oracle Databaseインスタンスが、データベース全体をバッファキャッシュにキャッシュするのに十分なスペースがあり、そうすることが有益であると判断した場合、インスタンスはデータベース全体をバッファキャッシュに自動的にキャッシュします。

インスタンスが、データベース全体をバッファキャッシュにキャッシュするのに十分なスペースがないと判断した場合、次のアクションを実行します。

  • バッファキャッシュサイズの2%未満の小さいテーブル :これらのテーブルをメモリにロードします。
  • 中型のテーブル :最後のテーブルスキャンとバッファキャッシュのエージングタイムスタンプの間の間隔を分析します。前回のテーブルスキャンで再利用されたテーブルのサイズが残りのバッファキャッシュサイズよりも大きい場合、テーブルをキャッシュします。
  • 大きなテーブルKEEPのテーブルを明示的に宣言しない限り、これらをメモリにロードしません バッファプール。
データベースのフルキャッシュモードを強制する

全データベースキャッシュモードを強制すると、データベース全体をメモリ内にキャッシュできます。これにより、全表スキャンを実行したり、ラージオブジェクト(LOB)にアクセスしたりするときにパフォーマンスが大幅に向上する可能性があります。

デフォルトのキャッシュ・モードでは、ユーザーが大きなテーブルにクエリを実行したときに、OracleDatabaseが常に基礎となるデータをキャッシュするとは限りません。フルデータベースキャッシュモードでは、Oracle Databaseは、バッファキャッシュがデータベース全体をキャッシュするのに十分な大きさであると想定し、クエリがアクセスするすべてのブロックをキャッシュしようとします。データベースのサイズがデータベースのバッファキャッシュサイズよりも小さい場合に成功します。

Oracle Databaseは、NOCACHELOBおよびOracleDatabase SecureFilesを使用するLOBを含め、すべてのデータファイルがアクセスされるときにバッファキャッシュにロードします。

Oracle Database 12cリリース12.1.0.0の新しいパフォーマンス調整機能:パート2

画像ソース :フルDBインメモリキャッシング。

強制フルデータベースキャッシングモードを使用する場合

次の状況では、データベースの強制キャッシュモードの使用を検討してください。

  • 論理データベースのサイズ(または実際に使用されている領域)は、Oracle RealApplication Clusters(RAC)環境の各データベースインスタンスの個々のバッファキャッシュよりも小さくなっています。この推奨事項は、Oracle以外のRACデータベースにも適用されます。
  • 論理データベースのサイズは、Oracle RAC環境で適切にパーティション化されたワークロード(インスタンスアクセスによる)のすべてのデータベースインスタンスの合計バッファキャッシュサイズの80%未満です。
  • データベースはSGA_TARGETを使用します またはMEMORY_TARGET
  • NOCACHE LOBをキャッシュする必要があります。 NOCACHE データベース全体のキャッシュが強制的に使用されない限り、LOBがキャッシュされることはありません。

最初の3つの状況では、システムパフォーマンスを定期的に監視して、パフォーマンス指標が期待を満たしていることを確認する必要があります。

:1つのOracle RACデータベースインスタンスが強制フルデータベースキャッシュモードを使用する場合、OracleRAC環境内の他のすべてのデータベースインスタンスもこのモードを使用します。マルチテナント環境では、強制フルデータベースキャッシングモードは、すべてのPDBを含むCDB全体に適用されます。

データベースキャッシュモードを設定して確認する

まず、データベースとメモリサイズを確認します。 SYSAUXを除外できます 次の例に示すように、テーブルスペース:

SQL> col size_mb format 9999
SQL> SELECT sum(bytes)/1024/1024 seg_size_mb FROM dba_segments where tablespace_name != 'SYSAUX';
SEG_SIZE_MB
-----------
4971

次のコマンドを使用して、バッファキャッシュのサイズを確認します。

SQL> SELECT round(sum(cnum_set * blk_size)/1024/1024) size_mb FROM X$KCBWDS;
SIZE_MB
-------
5283

次の手順を使用して、完全なデータベースキャッシングを強制するようにデータベースを構成します。

SQL> startup mount;
Database mounted.

SQL> ALTER DATABASE FORCE FULL DATABASE CACHING;
Database altered.

SQL> SELECT force_full_db_caching FROM v$database;
FORslug: '' ---YES

SQL> alter database open;
Database altered.

次の手順を使用して、データベースの強制キャッシュモードが有効になっていることを確認します。

  1. 次のコマンドを使用して、V$DATABASEにクエリを実行します。 ビュー:

     SQL>SELECT FORCE_FULL_DB_CACHING FROM V$DATABASE;
    

    出力はYESのいずれかです またはNO

  2. 強制フルデータベースキャッシングモードを有効にするには、次のALTER DATABASEを使用します コマンド:

     ALTER DATABASE FORCE FULL DATABASE CACHING;
    

    このコマンドは、次の確認を返します。

     Database altered.
    
  3. データベースのフルキャッシュを強制的に無効にするには、次のコマンドを使用します。

     SQL> ALTER DATABASE NO FORCE FULL DATABASE CACHING;
    

    このコマンドは、次の確認を返します。

     Database altered.
    
結論

要約すると、IM列ストアはDMLステートメントの実行時間を短縮し、フルデータベースキャッシングモードを強制するとパフォーマンスが大幅に向上します。OracleDatabaseの新しいパフォーマンス調整機能の詳細については、Oracle Enterprise Manager(OEM)が提供するレポートを確認してください。

[フィードバック]タブを使用して、コメントを書き込んだり、質問したりします。

参照

このブログ投稿の参照として、次のソースが使用されました。

  • データベースパフォーマンスチューニングガイド:インメモリ列ストアを使用することによるパフォーマンス上の利点

  • フルDBインメモリキャッシング

  • Oracle Database 12cデモ:インメモリ列ストアアーキテクチャの概要


  1. Ruby2.6の9つの新機能

    Rubyの新しいバージョンには、新しい機能とパフォーマンスの改善が含まれています。 変更についていきますか? 見てみましょう! 無限の範囲 Ruby 2.5以前のバージョンは、すでに1つの形式の無限範囲をサポートしています( Float ::INFINITY を使用) )、しかしRuby2.6はこれを次のレベルに引き上げます。 新しい無限の範囲 次のようになります: (1..) これは、(1..10)のような終了値がないため、通常の範囲とは異なります。 。 使用例 : [a, b, c].zip(1..) # [[a, 1], [b, 2], [c, 3]] [1,2,3,

  2. iOS 11 で刷新された App Store の 5 つのすばらしい新機能

    iOS 11 の刷新された App Store は、その主要なハイライトの 1 つです。そして、なぜではありませんか! Apple は実際、インターフェイスの再設計において注目すべき変更をいくつか加えました。 App Store がこれほど多くの顕著な変化を経験したのはこれが初めてです。 新しい App Store には他にもたくさんあります。残念ながらウィッシュリスト機能は削除されましたが、まったく新しい体験が待っています。そのため、明るい面に焦点を当て、そのユニークな機能のいくつかを詳細に探っていきます。 まったく新しい「今日」セクション これは、最初に注目を集めるものです。