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 パフォーマンスの改善をすぐに開始するには、"SQL パフォーマンスを向上させるためのベスト・プラクティス" を参照してください。

クエリ・パフォーマンスの調査

InterSystems SQL のクエリ・オプティマイザは、実行するクエリを自動的に処理するため、可能な限り効率的に実行できます。このようなプロセスには次のようなものがあります。

  • クエリ・キャッシュ — InterSystems IRIS は準備されたクエリのキャッシュを維持します。クエリの実行時、そのクエリがキャッシュにあり、照会されるテーブルとインデックスが変更されていない場合、InterSystems SQL は直接クエリ・キャッシュを実行し、文の準備やクエリ・プランの生成など、コストのかかる手順をスキップします。

  • クエリ・プラン — クエリの条件が処理される順序は、パフォーマンスに多大な影響を与える可能性があります。多くの場合、条件を処理する最適な順序は、照会されるテーブルによって異なります。クエリ・オプティマイザは、自動的に収集されたテーブル統計に基づいて複数のクエリ・プランを生成し、そのプランをできる限り低いパフォーマンス・コストで実行します。また、オプティマイザは、指定されたクエリ・パラメータに基づいて、実行時に最も効率的なプランを選択します。

これらのプロセスとその他のプロセスの詳細は、"InterSystems IRIS による SQL 文の処理方法" を参照してください。

SQL のパフォーマンスを向上させるために追加カスタマイズを行えるよう、InterSystems IRIS は、SQL クエリおよびその他の操作のレコード (挿入、更新、および削除など) を提供しています。さらに SQL 実行時統計も提供するため、クエリの実行速度を監視したり、低速クエリを特定することができます。これらの機能の詳細は、"SQL 文と SQL 統計の分析" を参照してください。特定のクエリをより詳細にプロファイリングする必要がある場合は、SQL パフォーマンス分析ツールキットを使用できます。

クエリ・オプティマイザが生成したプランの分析は、文がスムーズに実行されていることを確認するのにも役立ちます。"SQL クエリ・プランの解釈" を参照してください。

SQL パフォーマンスの改善についてさらに支援を求めるため、クエリ・レポートを生成することもできます。インターシステムズのサポート窓口のチーム・メンバはこのレポートを分析し、改善の提案を行うことができます。詳細は、"SQL パフォーマンスのヘルプの入手" を参照してください

高性能テーブルの定義

クエリに最適化されたスキーマを持つテーブルは、パフォーマンスを大幅に向上させることができます。

テーブル統計

InterSystems SQL では、テーブルのチューニングと呼ばれる操作を使用してテーブル内のデータを定期的に調べ、それに関する統計を収集します。

  • テーブル内の行数。エクステント・サイズとも呼ばれます。

  • 異常検出および範囲クエリの最適化のための各列の個別値の相対的な分散。

  • 各列の値の平均長さ。

テーブルのチューニングはこの情報をクエリ・オプティマイザに送信し、クエリ・オプティマイザはテーブルに対して行われるクエリに基づいて効率的なプランを選択できます。テーブルのチューニングは自動的に実行されますが、その実行頻度はユーザが構成します。詳細は、"クエリ・オプティマイザで使用するテーブル統計" を参照してください。

インデックス

高性能のテーブルの基盤の 1 つとして、列でのインデックスの定義が挙げられます。InterSystems SQL は、既定でテーブルの主キーとして機能する RowId 列など、特定の列のインデックスを自動的に作成します。頻繁に照会される列など、追加で列のインデックスを作成することもできます。

インデックスに関する重要な決定は、どの列にインデックスを作成するか、および与えられたデータに対してどのタイプのインデックスを定義するかです。InterSystems SQL では、以下のようなさまざまなインデックス・タイプを指定できます。

  • 標準インデックス — クエリを高速化するインデックス列を定義します。

  • ビットマップ・インデックス — 個別値が少数のデータに対する、より高速な特殊なインデックス・タイプ。

  • ビットスライス・インデックス — 合計や値域条件など、特定の式について非常に高速の評価を可能にする特殊なインデックス。

  • 列指向インデックス — 頻繁に照会されるテーブルのフィールドを格納する特殊なインデックス。圧縮され、ベクトル化された形式の基盤となる行ストレージ・レイアウトを持ちます。

インデックスを使用した作業の詳細は、"インデックスの定義と作成" を参照してください。

テーブル定義設定

DDL を介してテーブルを定義する際には、パフォーマンスを最適化するいくつかのベスト・プラクティス設定が自動的に適用されます。永続クラスを介してテーブルを定義する際には、クラス定義で以下の機能を有効にすることを検討してください。

  • USEEXTENTSET = 1 — これは、テーブル・ストレージを、さらに効率的なグローバルのセットに編成します。

  • ビットマップ・エクステント・インデックスの定義 — これはテーブル全体に対してビットマップ・インデックスを作成します。これにより、効率的なカウントやその他の操作が可能になります。

これらの設定、およびその他の設定の詳細は、"永続クラスによる SQL 最適化テーブルの定義" を参照してください。

ストレージ・レイアウト

InterSystems SQL のリレーショナル・テーブルでは、データを行に、列に、またはその両方を組み合わせて格納できます。クエリやトランザクションの性質によっては、適切なストレージ・レイアウトにより、クエリのパフォーマンスやトランザクション・スループットは桁違いに向上する可能性があります。列指向ストレージおよび行単位のストレージの詳細は、"SQL テーブルのストレージ・レイアウトの選択" を参照してください。

シャード・テーブル

テーブルのデータ量が多い場合、テーブルのシャーディングが効果的となる可能性があります。これにより、データが複数のサーバに分散され、クエリの際にそのデータがマージされます。シャーディングの詳細は、"シャーディングによるデータ量に応じた水平方向の拡張" を参照してください。

クエリ・パフォーマンスの構成

パフォーマンス向上のための追加構成オプションが提供されています。以下に例を示します。

  • クエリの並列処理 — データ量が多い場合、マルチプロセッサ・システムがプロセッサ間でクエリの実行を分割できるようにします。クエリごと、またはシステム全体で並列処理を構成できます。詳細は、"並列クエリ処理の構成" を参照してください。

  • 実行時プラン選択 — 一部のクエリでは、実行時パラメータ値によりパフォーマンスの向上が見られる場合があります。実行時プラン選択が有効化されている場合、SQL オプティマイザは、異常値ステータスを含むプランを実行するかどうかを選択します。詳細は、"実行時プラン選択の使用法" を参照してください。

  • 凍結プラン — SQL 文が準備されると、システムがどのようにその文を実行するかを決定するクエリ・プランが作成されます。インデックスが追加されるか、クラスがリコンパイルされて別のクエリ・プランが作成されると、このプランは削除されます。ただし、凍結プランを作成することにより、コンパイル間にわたって既存のクエリ・プランを維持することができます。詳細は、"凍結プランの構成" を参照してください。

  • 最適化ヒント — クエリ・オプティマイザに対してクエリ・プランを生成および選択する方法についての "ヒント" となる追加情報をクエリ自体に提供します。例えば、1 つの列のすべてのデータがクエリに含まれている場合、その列に %NOINDEX を指定して、そのインデックスをクエリ・プランで使用しないようにオプティマイザに通知することができます。一般にクエリ・オプティマイザはテーブル統計に基づいてこのような決定を行うことができますが、これらのヒントにより、新たなレベルのカスタマイズが追加されます。詳細は、"クエリでの最適化ヒントの指定" を参照してください。

FeedbackOpens in a new tab