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.
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.
|
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
Un Logstore Standard a été créé. Pour plus d'informations, consultez la rubrique Créer un Logstore de base.
La collecte des journaux est configurée. Pour plus d'informations, consultez la rubrique Collecte de données.
Les index sont configurés. Pour plus d'informations, consultez la rubrique Configurer les index.
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
Connectez-vous à la console Simple Log Service.
-
Dans la section Projects, cliquez sur celui de votre choix.

-
Sous l'onglet , cliquez sur le Logstore souhaité.

Cliquez sur .
Activer par défaut
Connectez-vous à la console Simple Log Service.
-
Dans la section Projects, cliquez sur celui de votre choix.

-
Cliquez sur l'icône
.Cliquez sur l'icône Home dans la barre de navigation supérieure pour revenir à la liste des Projects ou changer de Project.
Placez le curseur sur CUs of SQL-dedicated Instance et cliquez sur Settings.
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
-
GetLogs (renvoie des résultats non compressés) - Interroger les journaux dans un Logstore
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: ajoutezset session parallel_sql=true;au début de votre instruction SQL. Par exemple,* | select count(*) as pvdevient* | set session parallel_sql=true; select count(*) as pv.
-
GetLogsV2 (renvoie des résultats compressés) - Interroger les données de journal dans un Logstore
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: ajoutezset session parallel_sql=true;au début de votre instruction SQL. Par exemple,* | select count(*) as pvdevient* | set session parallel_sql=true; select count(*) as pv.
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
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: ajoutezset session parallel_sql=true;au début de votre instruction SQL. Par exemple,* | select count(*) as pvdevient* | 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_mil14 milliards
0,004435
* | select avg(double_0), sum(double_0), max(double_0), min(double_0), count(double_0) from stress_s1_mil14 milliards
0,006504
* | select avg(double_0), sum(double_1), max(double_2), min(double_3), count(double_4) from stress_s1_mil14 milliards
0,013600
* | select key_0 , avg(double_0) as pv from stress_s1_mil1 group by key_0 order by pv desc limit 10004 milliards
0,011826
* | select long_0, avg(double_0) as pv from stress_s1_mil1 group by long_0 order by pv desc limit 10004 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 1000300 millions
0,010791
* | select avg(double_0) from stress_s1_mil1 where key_0='key_987'4 milliards
0,00007
> SQL Enhancement