Tous les produits
Search
Centre de documentation

Simple Log Service:Amélioration SQL

Dernière mise à jour :Aug 18, 2026

L'amélioration SQL met à l'échelle de manière élastique les ressources de stockage et de calcul pour accélérer les requêtes et l'analyse dans Simple Log Service, sans intervention manuelle.

Fonctionnement

Contexte

Simple Log Service dissocie le stockage du calcul : la couche de stockage basée sur les shards gère le stockage et la gestion des données, tandis que la couche de calcul utilise le langage SQL pour les requêtes et l'analyse.

Pour améliorer les performances d'analyse, optimisez l'une ou l'autre de ces couches, voire les deux. Les sections suivantes comparent les approches courantes.

image

Solution 1 : Diviser un shard

Divisez manuellement un shard afin d'étendre la capacité de stockage et d'augmenter indirectement le débit de calcul.

Limites :

  • Cette méthode s'applique uniquement aux données nouvellement écrites.

  • Les shards actifs engendrent des frais. Consultez la section Facturation.

  • Une seule requête est limitée par la concurrence et le volume de données.

  • Vous devez diviser ou fusionner les shards manuellement.

Solution 2 : Diviser pour mieux régner

Décomposez une requête volumineuse en plusieurs sous-requêtes et agrégez les résultats.

Limites :

  • Cette approche nécessite de maintenir une logique d'agrégation secondaire et un stockage intermédiaire. Utilisez Scheduled SQL à cet effet.

  • La modification des dimensions d'analyse impose de reconstruire la logique d'agrégation.

  • Des goulets d'étranglement au niveau du calcul peuvent toujours survenir avec des volumes de données très importants.

Solution 3 : Utiliser l'amélioration SQL

L'amélioration SQL adapte dynamiquement les ressources de stockage et de calcul en fonction du volume de données, offrant ainsi une analyse plus rapide sans réglage manuel.

image

Comparaison

Solution 1 : Diviser un shard

Solution 2 : Diviser pour mieux régner

Solution 3 : Utiliser l'amélioration SQL

Isolation des ressources

Ressources de stockage indépendantes, ressources de calcul partagées

Ressources de stockage indépendantes, ressources de calcul partagées

Ressources de stockage indépendantes et ressources de calcul dédiées élastiques

Granularité de la mise à l'échelle

Mise à l'échelle de la couche de stockage

Mise à l'échelle de la couche de calcul

Mise à l'échelle élastique des couches de stockage et de calcul

Charge de maintenance

Nécessite une intervention manuelle.

Vous devez décomposer les requêtes volumineuses en sous-requêtes.

Planification entièrement automatisée.

Complexité des requêtes

Prend en charge le SQL natif.

Nécessite un développement personnalisé.

Prend en charge le SQL natif.

Prérequis

Procédure

Activez l'amélioration SQL selon l'une des méthodes suivantes :

  • Activation pour une seule requête : s'applique uniquement à la requête actuelle dans le Logstore.

  • Activation par défaut : s'applique à toutes les requêtes du Project, y compris les alertes et les tableaux de bord.

Console

Activer pour une seule requête

  1. Connectez-vous à la console Simple Log Service.

  2. Dans la section Projects, cliquez sur celui de votre choix.

    image

  3. Sous l'onglet Log Storage > Logstores, cliquez sur le Logstore souhaité.

    image

  4. Cliquez sur image > SQL Enhancement.

Activer par défaut

  1. Connectez-vous à la console Simple Log Service.

  2. Dans la section Projects, cliquez sur celui de votre choix.

    image

  3. Cliquez sur l'icône Project Overview.

    Cliquez sur l'icône Home dans la barre de navigation supérieure pour revenir à la liste des Projects ou changer de Project.

  4. Placez le curseur sur CUs of SQL-dedicated Instance et cliquez sur Settings.

  5. Dans le panneau Modify CUs of SQL-dedicated Instance, activez l'option Enable by Default, puis cliquez sur OK.

API

Activer pour une seule requête

Activer par défaut

Lors de l'opération Créer une instance SQL dédiée, définissez useAsDefault=true pour activer l'amélioration SQL par défaut pour le Project.

SDK

Les exemples suivants utilisent le SDK Java.

Prérequis

Installer le SDK Java

Activer pour une seule requête

  • Méthode GetLogs()

    Configurez l'un des paramètres suivants.

    • Le paramètre powerSql : définissez-le sur true pour l'amélioration SQL, ou sur false (valeur par défaut) pour le SQL standard.

    • Le paramètre query : ajoutez set session parallel_sql=true; au début de votre instruction SQL. Par exemple, * | select count(*) as pv devient * | 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 {
            // This example shows how to obtain an AccessKey ID and an AccessKey secret from environment variables.
            String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
            String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
            // The endpoint for Simple Log Service. This example uses the endpoint for the China (Hangzhou) region. Replace it with the actual endpoint.
            String host = "https://cn-hangzhou.log.aliyuncs.com";
            // Create a Simple Log Service client.
            Client client = new Client(host, accessId, accessKey);
            // The Project name.
            String projectName = "aliyun-project-test";
            // The Logstore name.
            String logstore = "request_log";
            // Specifies whether to enable SQL Enhancement by default. Default value: false.
            boolean useAsDefault = true;
            // The SQL query statement.
            String query = "* | select count(1)";
            // The maximum number of logs to return. This parameter is valid only when the query parameter is a search statement. Value range: 0 to 100. Default value: 100.
            int line = 3;
            // The line number from which to start the query. This parameter is valid only when the query parameter is a search statement. Default value: 0.
            int offset = 0;
            // Specifies whether to return logs in reverse chronological order of log timestamps, accurate to the minute.
            // true: Returns logs in reverse chronological order.
            // false (default): Returns logs in chronological order.
            boolean reverse = false;
            // Specifies whether to use SQL Enhancement.
            // true: Use SQL Enhancement.
            // false (default): Use Standard 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());
        }
    }

Activer par défaut

Définissez boolean useAsDefault = true pour activer l'amélioration SQL par défaut pour le Project.

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 {
        // This example shows how to obtain an AccessKey ID and an AccessKey secret from environment variables.
        String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // The Project name.
        String projectName = "aliyun-test-project";
        // The endpoint for Simple Log Service. This example uses the endpoint for the China (Hangzhou) region. Replace it with the actual endpoint.
        String host = "https://cn-hangzhou.log.aliyuncs.com";
        // Create a Simple Log Service client.
        Client client = new Client(host, accessId, accessKey);
        int cu = 100;
        boolean useAsDefault = true;
        client.createSqlInstance(new CreateOrUpdateSqlInstanceRequest(projectName, cu, useAsDefault));
    }
}

FAQ

  • Comment vérifier le temps CPU ?

    Après avoir exécuté une requête, placez le curseur sur Analysis Results pour afficher le temps CPU. Le champ Consumed CPU Time dans le panneau de statistiques en haut à droite indique le temps CPU en secondes.

  • Coût d'une requête SQL dédiée

    Le coût varie en fonction du volume de données et de la complexité de la requête.

    Instruction de requête

    Volume de données (lignes)

    Coût par exécution (USD)

    * | select avg(double_0) from stress_s1_mil1

    4 milliards

    0,004435

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

    4 milliards

    0,006504

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

    4 milliards

    0,013600

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

    4 milliards

    0,011826

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

    4 milliards

    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

    300 millions

    0,010791

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

    4 milliards

    0,00007