全部產品
Search
文件中心

Simple Log Service:SQL完全精確

更新時間:Jan 06, 2026

本文介紹SQL完全精確的實現原理和操作步驟,協助您快速掌握其核心能力。

使用限制

以下功能暫不支援SQL完全精確:

實現原理

完全精確模式以時間換資源的方式確保結果精確完整。通過將各類資源約束統一轉化為時間維度,在使用者指定的時間範圍內,查詢任務將在安全水位下穩定運行,直至結果精確,或執行逾時。在技術實現方面,我們採用了多種策略:基於隔離資源集區的任務分配、針對使用者的隊列優先順序控制以及根據任務類型(如計算密集型、IO密集型)進行負載劃分。這些措施有效實現了資源的合理調度與高效利用,從而確保最終結果的精確性。

image

如下圖:普通查詢將在即時計算資源集區中運行,當Query觸發限制,將即時截斷,顯示結果不精確。當開啟 SQL 完全精確模式時,Query將在專屬的精確計算資源集區中執行。即便觸發資源限制,系統仍會確保任務在安全水位下穩定運行,直至資料完全載入並完成精確計算。

image

前提條件

操作步驟

Log Service支援單次開啟方式:僅當前LogStore下的查詢和分析操作,使用完全精確模式。

說明

您可以通過控制台、API和SDK三種方式設定完全精確模式的最大逾時時間。分析操作的最大逾時的時間為55秒。

控制台

  1. 登入Log Service控制台

  2. 在Project列表地區,單擊目標Project。

    image

  3. 日誌儲存 > 日誌庫頁簽中,單擊目標Logstore。

    image

  4. 單擊image > 完全精確

    重要

    您可以通過設定query_max_run_time參數來調整逾時時間。

    例如查詢分析語句為* | select count(*) as pv,在分析語句中增加set session query_max_run_time=10s;,查詢分析語句為:* | set session query_max_run_time=10s; select count(*) as pv 。

    image

API

  • GetLogs(返回結果不壓縮傳輸) - 查詢日誌庫日誌

    • 參數query

      例如查詢分析語句為* | select count(*) as pv

      • 使用完全精確:在分析語句中增加set session allow_incomplete=false;,表示使用完全精確。查詢分析語句為:* | set session allow_incomplete=false; select count(*) as pv 。

      • 設定查詢分析逾時時間:在分析語句中增加set session query_max_run_time=10s;,表示該語句最大執行時間為10s。查詢分析語句為:* | set session allow_incomplete=false; select count(*) as pv 。

      • 同時設定完全精確和逾時時間:查詢分析語句為:* | set session allow_incomplete=false; set session query_max_run_time=10s;select count(*) as pv 。

  • GetLogsV2(返回結果壓縮後傳輸) - 查詢Logstore中的日誌資料

    • 參數query

      例如查詢分析語句為* | select count(*) as pv

      • 使用完全精確:在分析語句中增加set session allow_incomplete=false;,表示使用完全精確。查詢分析語句為:* | set session allow_incomplete=false; select count(*) as pv 。

      • 設定查詢分析逾時時間:在分析語句中增加set session query_max_run_time=10s;,表示該語句最大執行時間為10s。查詢分析語句為:* | set session allow_incomplete=false; select count(*) as pv 。

      • 同時設定完全精確和逾時時間:查詢分析語句為:* | set session allow_incomplete=false; set session query_max_run_time=10s;select count(*) as pv 。

SDK

此處以Java SDK為例。

前提條件

安裝Java SDK

  • GetLogs()方法

    • 參數query

      例如查詢分析語句為* | select count(*) as pv

      • 使用完全精確:在分析語句中增加set session allow_incomplete=false;,表示使用完全精確。查詢分析語句為:* | set session allow_incomplete=false; select count(*) as pv 。

      • 設定查詢分析逾時時間:在分析語句中增加set session query_max_run_time=10s;,表示該語句最大執行時間為10s。查詢分析語句為:* | set session allow_incomplete=false; select count(*) as pv 。

      • 同時設定完全精確和逾時時間:查詢分析語句為:* | set session allow_incomplete=false; set session query_max_run_time=10s;select count(*) as pv 。

    • 參數session

      • 使用完全精確:request.SetSession("allow_incomplete=false");

      • 設定查詢分析逾時時間:request.SetSession("query_max_run_time=10s"); 。

      • 同時設定完全精確和逾時時間: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 {
            // 本樣本從環境變數中擷取AccessKey ID和AccessKey Secret。
            String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
            String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
            // 設定Log Service的服務存取點。此處以杭州為例,其它地區請根據實際情況填寫。
            String host = "https://cn-beijing.log.aliyuncs.com";
            // 建立Log ServiceClient。
            Client client = new Client(host, accessId, accessKey);
            // 輸入Project名稱。
            String projectName = "aliyun-test-project";
            // logstore名稱
            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());
        }
    }

常見問題

  • 如何擷取CPU時間?

    執行查詢和分析操作後,將滑鼠懸浮在分析結果上,查看CPU時間,如下圖所示。計費

  • 使用一次SQL獨享版的費用是多少?

    在不同的資料量中執行不同的查詢和分析語句,會產生不同的SQL獨享版費用,案例如下表所示。

    查詢和分析語句

    資料量(行)

    平均每次的費用(美元

    * | 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