Le mode complètement exact garantit des résultats de requête précis et complets en permettant aux requêtes de s'exécuter plus longtemps plutôt que d'être tronquées lorsque les limites de ressources sont atteintes.
Limites
Le mode complètement exact n'est pas pris en charge pour les fonctionnalités suivantes :
Fonctionnement
Le mode complètement exact convertit diverses contraintes de ressources, telles que les E/S et le CPU, en une limite unique basée sur le temps. Si une requête atteint une limite de ressource, le système la régule à un débit durable au lieu de l'arrêter, ce qui lui permet de s'exécuter jusqu'à son terme ou jusqu'à l'expiration du délai. Ce mode utilise l'allocation des tâches dans des pools de ressources isolés, la priorisation des files d'attente par utilisateur et l'équilibrage de charge pour planifier les ressources de manière efficace.
Les requêtes standard s'exécutent dans un pool de calcul standard et sont immédiatement tronquées lorsqu'une limite de ressource est atteinte, ce qui peut entraîner des résultats inexacts. Avec le mode complètement exact activé, les requêtes s'exécutent dans un pool de calcul dédié où le système maintient la tâche à un rythme durable jusqu'à ce que toutes les données soient chargées et que le calcul soit terminé.
Prérequis
Un Logstore Standard est créé. Pour plus d'informations, consultez la rubrique Créer un Logstore de base.
Les journaux sont collectés. 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
Vous pouvez activer le mode complètement exact pour des opérations de requête et d'analyse individuelles au sein d'un Logstore spécifique.
Vous pouvez configurer le délai d'expiration maximal pour le mode complètement exact à l'aide de la console, de l'API ou du SDK. Le délai d'expiration maximal pour une instruction d'analyse est de 55 secondes.
Console
Connectez-vous à la console Simple Log Service.
-
Dans la section Projects, cliquez sur le projet souhaité.

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

-
Cliquez sur .
ImportantVous pouvez ajuster le délai d'expiration en définissant le paramètre
query_max_run_time.Par exemple, si votre instruction d'analyse est
* | select count(*) as pv, vous pouvez ajouterset session query_max_run_time=10s;à l'instruction. L'instruction d'analyse complète devient* | set session query_max_run_time=10s; select count(*) as pv.
API
-
GetLogs (renvoie des résultats non compressés) - Interroge les données de journal dans un Logstore
-
Paramètre :
queryPar exemple, l'instruction d'analyse est
* | select count(*) as pv.Activer le mode complètement exact : Ajoutez
set session allow_incomplete=false;au début de votre instruction d'analyse. Par exemple,* | select count(*) as pvdevient* | set session allow_incomplete=false; select count(*) as pv.Définir le délai d'expiration de l'analyse de requête : Ajoutez
set session query_max_run_time=10s;à l'instruction d'analyse. Cela définit la durée d'exécution maximale à10s. L'instruction d'analyse est :* | set session allow_incomplete=false; select count(*) as pv.Pour activer le mode complètement exact et définir un délai d'expiration, ajoutez les commandes de session au début de votre instruction d'analyse. Par exemple :
* | set session allow_incomplete=false; set session query_max_run_time=10s;select count(*) as pv.
-
-
GetLogsV2 (renvoie des résultats compressés) - Interroge les données de journal dans un Logstore
-
Paramètre :
queryPar exemple, l'instruction d'analyse est
* | select count(*) as pv.Activer le mode complètement exact : Ajoutez
set session allow_incomplete=false;au début de votre instruction d'analyse. Par exemple,* | select count(*) as pvdevient* | set session allow_incomplete=false; select count(*) as pv.Définir le délai d'expiration de l'analyse de requête : Ajoutez
set session query_max_run_time=10s;à l'instruction d'analyse. Cela définit la durée d'exécution maximale à10s. L'instruction d'analyse est :* | set session allow_incomplete=false; select count(*) as pv.Pour activer le mode complètement exact et définir un délai d'expiration, ajoutez les commandes de session au début de votre instruction d'analyse. Par exemple :
* | set session allow_incomplete=false; set session query_max_run_time=10s;select count(*) as pv.
-
SDK
Cette section utilise le SDK Simple Log Service pour Java à titre d'exemple.
Prérequis
Vous avez installé le SDK Simple Log Service pour Java. Pour plus d'informations, consultez la rubrique Installer le SDK Simple Log Service pour Java.
-
Méthode GetLogs()
-
Paramètre :
queryPar exemple, l'instruction d'analyse est
* | select count(*) as pv.Activer le mode complètement exact : Ajoutez
set session allow_incomplete=false;au début de votre instruction d'analyse. Par exemple,* | select count(*) as pvdevient* | set session allow_incomplete=false; select count(*) as pv.Définir le délai d'expiration de l'analyse de requête : Ajoutez
set session query_max_run_time=10s;à l'instruction d'analyse. Cela définit la durée d'exécution maximale à10s. L'instruction d'analyse est :* | set session allow_incomplete=false; select count(*) as pv.Pour activer le mode complètement exact et définir un délai d'expiration, ajoutez les commandes de session au début de votre instruction d'analyse. Par exemple :
* | set session allow_incomplete=false; set session query_max_run_time=10s;select count(*) as pv.
-
Paramètre :
sessionActiver le mode complètement exact :
request.SetSession("allow_incomplete=false");.Définir le délai d'expiration de la requête :
request.SetSession("query_max_run_time=10s");.Activer le mode complètement exact et définir un délai d'expiration :
request.SetSession("allow_incomplete=false;query_max_run_time=10s").
import com.aliyun.openservices.log.Client; import com.aliyun.openservices.log.exception.LogException; import com.aliyun.openservices.log.request.GetLogsRequest; import com.aliyun.openservices.log.response.GetLogsResponse; public class CrearteLogStore { public static void main(String[] args) throws LogException { // This example obtains the AccessKey ID and AccessKey Secret from environment variables. String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); // Set the endpoint for Simple Log Service. This example uses the endpoint for the China (Beijing) region. Replace it with your actual endpoint. String host = "https://cn-beijing.log.aliyuncs.com"; // Create a Simple Log Service client. Client client = new Client(host, accessId, accessKey); // Specify the Project name. String projectName = "aliyun-test-project"; // Specify the Logstore name. String logstore = "request_log"; String query = "* | SELECT count(0)"; int from = (int)(System.currentTimeMillis()/1000) - 60; int to = (int)(System.currentTimeMillis()/1000); GetLogsRequest request = new GetLogsRequest(projectName, logstore, from, to, "", query); request.SetSession("allow_incomplete=false;query_max_run_time=10s"); GetLogsResponse response = client.GetLogs(request); System.out.println(response.getCpuSec()); } } -
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 affiche 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
> Completely Accurate