すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:SQL 強化

最終更新日:Jun 04, 2026

SQL 強化は、ストレージリソースとコンピューティングリソースを自動的にスケーリングすることで、Simple Log Service (SLS) でのクエリと分析を高速化します。

仕組み

背景情報

SLS は、ストレージとコンピューティングを分離しています。シャードベースのストレージレイヤーがデータの保存と管理を担い、コンピューティングレイヤーは SQL を使用してクエリと分析を実行します。

分析パフォーマンスを向上させるには、両方のレイヤーを強化できます。以下のセクションでは、一般的なソリューションを比較します。

image

ソリューション 1:シャードの分割

手動でシャードを分割することで、ストレージ容量を拡張し、コンピューティングスループットを向上させます。

制限事項

  • この方法は、新しく書き込まれるデータにのみ適用されます。

  • アクティブなシャードには料金が発生します。詳細については、「課金」をご参照ください。

  • 単一のクエリには、同時実行数とデータ量による制限があります。

  • シャードの分割またはマージを手動で行う必要があります。

ソリューション 2:分割統治によるクエリ

大規模なクエリを複数のサブクエリに分割し、結果を集計します。

制限事項

  • 二次集計ロジックと中間ストレージの維持が必要です。これにはスケジュールされた SQL を使用してください。

  • 分析ディメンションを変更する場合、集計ロジックを再構築する必要があります。

  • 非常に大規模なデータ量では、コンピューティングのボトルネックが依然として発生する可能性があります。

ソリューション 3:SQL 強化の使用

SQL 強化は、データ量に基づいてストレージリソースとコンピューティングリソースを自動的にスケーリングすることで、分析を高速化します。

image

比較項目

ソリューション 1:シャードの分割

ソリューション 2:分割統治によるクエリ

ソリューション 3:SQL 強化の使用

リソース分離

独立したストレージリソース、共有コンピューティングリソース

独立したストレージリソース、共有コンピューティングリソース

独立したストレージリソースと伸縮自在な専用コンピューティングリソース

スケーリングの粒度

ストレージレイヤーのスケーリング

コンピューティングレイヤーのスケーリング

ストレージレイヤーとコンピューティングレイヤー両方での伸縮自在なスケーリング

メンテナンスのオーバーヘッド

手動での介入が必要です。

大規模なクエリをサブクエリに分割する必要があります。

完全に自動化されたスケジューリングです。

クエリの複雑さ

ネイティブ SQL をサポートします。

カスタム開発が必要です。

ネイティブ SQL をサポートします。

前提条件

手順

次のいずれかの方法で SQL 強化を有効にします。

  • 単一のクエリに対して有効化:Logstore 内の現在のクエリにのみ適用されます。

  • デフォルトで有効化:アラートやダッシュボードを含む、プロジェクト内のすべてのクエリに適用されます。

コンソール

単一のクエリに対して有効化

  1. Log Serviceコンソールにログインします。

  2. [プロジェクト] セクションで、管理するプロジェクトをクリックします。

  3. [ログストレージ] > [ログストア] タブで、管理するログストアをクリックします。

  4. image > 拡張 SQL をクリックします。

デフォルトで有効化

  1. Log Serviceコンソールにログインします。

  2. [プロジェクト] セクションで、管理するプロジェクトをクリックします。

  3. Project Overview アイコンをクリックします。

    上部メニューの [ホーム] アイコンをクリックすると、プロジェクト一覧に戻るか、プロジェクトを切り替えることができます。

  4. SQL 専用インスタンスの CU にカーソルを合わせ、設定 をクリックします。

  5. SQL 専用インスタンスの CU の変更 パネルで、デフォルトで有効化 スイッチをオンにし、OK をクリックします。

API

単一のクエリに対して有効化

  • GetLogs (非圧縮結果を返す) - Logstore 内のログをクエリ

    次のいずれかのパラメータを設定します。

    • powerSql パラメータ:SQL 強化を使用する場合は true に、標準 SQL を使用する場合は false (デフォルト) に設定します。

    • query パラメーター:SQL ステートメントの先頭に set session parallel_sql=true; を追加します。 たとえば、* | select count(*) as pv* | set session parallel_sql=true; select count(*) as pv になります。

  • GetLogsV2 (圧縮結果を返す) - Logstore 内のログデータをクエリ

    次のいずれかのパラメータを設定します。

    • powerSql パラメータ:SQL 強化を使用する場合は true に、標準 SQL を使用する場合は false (デフォルト) に設定します。

    • query パラメーター:SQL ステートメントの先頭に set session parallel_sql=true; を追加します。 たとえば、* | select count(*) as pv* | set session parallel_sql=true; select count(*) as pv になります。

デフォルトで有効化

専用 SQL インスタンスの作成 API で、useAsDefault=true に設定すると、プロジェクトに対して SQL 強化がデフォルトで有効になります。

SDK

以下の例では Java SDK を使用します。

前提条件

Java SDK のインストール

単一のクエリに対して有効化

  • GetLogs() メソッド

    次のいずれかのパラメータを設定します。

    • powerSql パラメータ:SQL 強化を使用する場合は true に、標準 SQL を使用する場合は false (デフォルト) に設定します。

    • query パラメーター:SQL ステートメントの先頭に set session parallel_sql=true; を追加します。 たとえば、* | select count(*) as pv* | set session parallel_sql=true; select count(*) as pv になります。

    import com.aliyun.openservices.log.Client;
    import com.aliyun.openservices.log.exception.LogException;
    import com.aliyun.openservices.log.response.GetLogsResponse;
    import java.util.Date;
    public class CreateSqlInstance {
        public static void main(String[] args) throws LogException {
            // この例では、環境変数から AccessKey ID と AccessKey シークレットを取得する方法を示します。
            String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
            String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
            // SLS のエンドポイント。この例では中国 (杭州) リージョンのエンドポイントを使用します。実際のエンドポイントに置き換えてください。
            String host = "https://cn-hangzhou.log.aliyuncs.com";
            // SLS クライアントを作成します。
            Client client = new Client(host, accessId, accessKey);
            // プロジェクト名。
            String projectName = "aliyun-project-test";
            // Logstore 名。
            String logstore = "request_log";
            // SQL 強化をデフォルトで有効にするかどうかを指定します。デフォルト値:false。
            boolean useAsDefault = true;
            // SQL クエリステートメント。
            String query = "* | select count(1)";
            // 返されるログの最大数。このパラメータは、query パラメータが検索ステートメントの場合にのみ有効です。値の範囲:0 ~ 100。デフォルト値:100。
            int line = 3;
            // クエリを開始する行番号。このパラメータは、query パラメータが検索ステートメントの場合にのみ有効です。デフォルト値:0。
            int offset = 0;
            // ログタイムスタンプの逆時系列順 (分単位の精度) でログを返すかどうかを指定します。
            // true:ログを逆時系列順で返します。
            // false (デフォルト):ログを時系列順で返します。
            boolean reverse = false;
            // SQL 強化を使用するかどうかを指定します。
            // true:SQL 強化を使用します。
            // false (デフォルト):標準 SQL を使用します。
            boolean powerSql = true;
            int from = (int) (new Date().getTime() / 1000 - 600);
            int to = (int) (new Date().getTime() / 1000);
            GetLogsResponse getLogsResponse = client.GetLogs(projectName, logstore, from, to, "", query, line, offset, reverse, powerSql);
            System.out.println(getLogsResponse.getCpuSec());
        }
    }

デフォルトで有効化

プロジェクトの SQL 拡張をデフォルトで有効にするには、boolean useAsDefault = true に設定します。

import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.request.CreateOrUpdateSqlInstanceRequest;
public class CreateSqlInstance {
    public static void main(String[] args) throws LogException {
        // この例では、環境変数から AccessKey ID と AccessKey シークレットを取得する方法を示します。
        String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // プロジェクト名。
        String projectName = "aliyun-test-project";
        // SLS のエンドポイント。この例では中国 (杭州) リージョンのエンドポイントを使用します。実際のエンドポイントに置き換えてください。
        String host = "https://cn-hangzhou.log.aliyuncs.com";
        // SLS クライアントを作成します。
        Client client = new Client(host, accessId, accessKey);
        int cu = 100;
        boolean useAsDefault = true;
        client.createSqlInstance(new CreateOrUpdateSqlInstanceRequest(projectName, cu, useAsDefault));
    }
}

よくある質問

  • CPU 時間を確認する方法は?

    クエリを実行した後、分析結果 にマウスポインターを合わせると、CPU 時間を表示できます。 右上の統計パネルにある [消費 CPU 時間] フィールドに、消費された CPU 時間が秒単位で表示されます。

  • 専用 SQL クエリのコスト

    コストはデータ量とクエリの複雑さによって異なります。次の表に例を示します。

    クエリステートメント

    データ量 (行)

    1 回の実行あたりのコスト (USD)

    * | select avg(double_0) from stress_s1_mil1

    40 億

    0.004435

    * | select avg(double_0), sum(double_0), max(double_0), min(double_0), count(double_0) from stress_s1_mil1

    40 億

    0.006504

    * | select avg(double_0), sum(double_1), max(double_2), min(double_3), count(double_4) from stress_s1_mil1

    40 億

    0.013600

    * | select key_0 , avg(double_0) as pv from stress_s1_mil1 group by key_0 order by pv desc limit 1000

    40 億

    0.011826

    * | select long_0, avg(double_0) as pv from stress_s1_mil1 group by long_0 order by pv desc limit 1000

    40 億

    0.011087

    * | select long_0, long_1, avg(double_0) as pv from stress_s1_mil1 group by long_0,long_1 order by pv desc limit 1000

    3 億

    0.010791

    * | select avg(double_0) from stress_s1_mil1 where key_0='key_987'

    40 億

    0.00007