Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

SQL パフォーマンスを向上させるためのベスト・プラクティス

InterSystems SQL では、アダプティブ・モードなど、特定のオペレーションを自動的に実行して SQL パフォーマンスを向上させるメカニズムが多数用意されていますが、ベスト・パフォーマンスを確保するために自分自身で実行できる手順もいくつかあります。このページでは、これらのオプションのいくつかをご案内します。

インデックスの定義

インデックスは、SQL クエリの効率を最適化するための重要な要素です。1 つ以上のフィールドにインデックスを追加すると、マスタ・マップ全体を読み込むのとは異なり、より高速なアクセス・パスが提供されるため、フィルタ処理、グループ化、および JOIN オペレーションにこれらのフィールドを使用するクエリのパフォーマンスを大幅に高速化することができます。どのフィールドにインデックスを設けるかの詳細は、インデックスの対象を参照してください。

InterSystems SQL では、それぞれ特定の状況に特化した種類の異なる複数のインデックスをサポートしています。それぞれのタイプのインデックスは、"インデックスの定義と作成" の次のセクションを参照してください。

テーブルにエクステント・インデックスを追加することによっても、クエリの効率を大幅に向上させることができます。この種のインデックスは、テーブル内の ID の存在を特定するのに役立ちます。このインデックスの最も効果的なバリアントはビットマップ・エクステント・インデックスです。これは、テーブルにビットマップに適合する IDKEY が存在する場合に定義できます (既定)。CREATE TABLE DDL 文は、作成するテーブル上に自動的にビットマップ・エクステント・インデックスを定義します。ObjectScript の永続クラスによって定義されたテーブルにエクステント・インデックスを追加する方法は、"永続クラスによる SQL 最適化テーブルの定義" を参照してください。

ストレージ・レイアウトの決定

テーブルは、列指向ストレージまたは行単位のストレージを使用することも、それら両方の方法を組み合わせて使用することもできます。これらのどの方法も、適切な設定で使用すれば非常に効率的になります。大量のデータに対する分析クエリを実行するため、頻繁にフィルタ処理や集約演算が実行されるデータには、列指向ストレージのレイアウトをお勧めします。一度に選択される行セットが小さいテーブルや、頻繁にデータが挿入、更新、および削除されるテーブルには、行単位のストレージのレイアウトをお勧めします。ストレージ・レイアウトの詳細は、"SQL テーブルのストレージ・レイアウトの選択" を参照してください。

テーブル統計の活用

ExtentSizeSelectivityBlockCount などのテーブル統計は、テーブル内のデータの分布を表します。SQL オプティマイザは、これらの洞察を利用して、最も高速に実行されるクエリ・プランを適切に特定できます。

TUNE TABLE ユーティリティは、SQL クエリのパフォーマンスにとって不可欠なこれらの統計を収集し、テーブルに代表的な量の実データが取り込まれた場合に実行する必要があります。

このコマンドがどのように機能するかに関する詳細は、"クエリ・オプティマイザで使用するテーブル統計" を参照してください。かなりの量のデータを追加した後に、列内の値の分布が大きく変化する場合にも、TUNE TABLE を実行する必要があります。

構成の最適化

既定では、[メモリと開始設定] の既定値は [自動] に構成されています。また、[プロセス当たりの最大メモリ] の既定値は制限なしで使用できることを意味する -1 に構成されています。プロダクション・システムの構成時には、このドキュメントに基づいて他の [メモリと開始設定] を調整する必要があるかどうかを確認する必要があります。詳細は、"InterSystems IRIS の構成" ページの "メモリと開始設定" を参照してください。

INFORMATION_SCHEMA の確認

INFORMATION_SCHEMA スキーマは、InterSystems IRIS® のインスタンスに存在するスキーマ、テーブル、インデックス、ビュー、トリガ、統合 ML モデル、および SQL 文に関する情報をパッケージ化します。スキーマ内のさまざまなテーブルに対して SELECT 文を発行することにより、テーブルを介したデータの分布やパフォーマンス・メトリックなどの SQL 構成に関する重要な情報を効率的に表示できます。

特に、INFORMATION_SCHEMA.STATEMENTS テーブルにクエリを実行して SQL 文を表示したり、INFORMATION_SCHEMA.COLUMN_HISTOGRAMS テーブルにクエリを実行してテーブルの列内のデータ分布を表示することができます。

これらのテーブルの詳細 (これらに含まれる列を含む) は、INFORMATION.SCHEMA のクラス・リファレンスを参照してください。

クエリ・パフォーマンスのトラブルシューティング

システム上で実行されるクエリのパフォーマンス統計や実行時統計を監視すると、さらに行うべき最適化についての洞察を得ることができます。より新しいクエリの統計を定期的に監視し、パフォーマンスが最適とまでいかない箇所があるかどうか、およびどこでその効率を改善できるかを判断することをお勧めします。

インターシステムズでは、監視など、複数のツールを提供しています。実行中のクエリを監視するには、管理ポータルの [SQL アクティビティ] ページ ([システムオペレーション] [SQL アクティビティ] に移動) を使用します。過去のクエリのパフォーマンス・データを表示するには、SQL 実行時統計を調べる必要があります。文インデックスでは、この情報をすべて参照し、実行回数と実行時間の組み合わせに基づいて、システム上で高い負荷を示している SQL 文を確認できる簡単なインタフェースを提供しています。そのような文を特定したら、さらにインデックスを追加して高速化することもできます。

望ましくない動作 (TimeSpent または GlobalRefs、あるいはその両方が予期せずに高い値であるなど) に気づいた場合は、そのシステムが生成されたクエリ実行プランを確認し、クエリがどのように実行されているかを理解する必要があります。

そのような文を一斉に分析するには、SQL パフォーマンス分析ツールキットを利用できます。

不十分なパフォーマンスの原因を特定できない場合は、[レポート生成] ツールを使用してクエリ・パフォーマンス・レポートを送信することにより、インターシステムズのサポート窓口 (WRC)Opens in a new tab にお問い合わせください。

FeedbackOpens in a new tab