このトピックでは、完全精度モードの仕組みと使用方法について説明します。
制限事項
完全精度モードは、次の機能ではサポートされていません:
仕組み
完全精度モードは、より多くのコンピューティングリソースと引き換えに実行時間を長くすることで、正確な結果を保証します。I/O や CPU などのさまざまなリソース制約を、単一の時間ベースの制限に変換します。クエリがリソース制限に達した場合、システムはクエリを終了させるのではなく、持続可能なレートにスロットル調整し、完了するかタイムアウトに達するまで実行を継続させます。このモードでは、分離されたリソースプールでのタスク割り当て、ユーザーベースのキュー優先順位付け、負荷分散などの戦略を使用して、効率的なリソーススケジューリングを保証します。
次の図に示すように、標準クエリは標準コンピューティングプールで実行されます。クエリがリソース制限に達すると、即座に切り捨てられ、不正確な結果につながります。完全精度モードを有効にすると、クエリは専用の精度コンピューティングプールで実行されます。リソース制限に達した場合でも、システムはすべてのデータがロードされ、計算が完了するまで、タスクが持続可能なレートで実行され続けることを保証します。
前提条件
標準 Logstore が作成されていること。詳細については、「基本的な Logstore の作成」をご参照ください。
ログが収集されていること。詳細については、「データ収集」をご参照ください。
インデックスが設定されていること。詳細については、「インデックスの設定」をご参照ください。
操作手順
Simple Log Service では、特定の Logstore 内の個別のクエリと分析操作に対して、完全精度モードを有効にできます。
コンソール、API、または SDK を介して、完全精度モードの最大タイムアウトを設定できます。分析文の最大タイムアウトは 55 秒です。
コンソール
Simple Log Service コンソールにログインします。
[プロジェクト] セクションで、目的のプロジェクトをクリックします。

「」タブで、使用する Logstore をクリックします。

-
「」をクリックします。
重要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になります。
API
-
GetLogs (非圧縮の結果を返す) - Logstore 内のログデータをクエリする
-
パラメーター:
queryたとえば、分析文は
* | select count(*) as pvです。-
完全精度モードを有効にする:分析文の前に
set session allow_incomplete=false;を追加します。たとえば、* | select count(*) as pvは* | 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;を追加します。たとえば、* | select count(*) as pvは* | 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
このセクションでは、Simple Log Service SDK for Java を例として使用します。
前提条件
Simple Log Service SDK for Java がインストールされていること。詳細については、「Simple Log Service SDK for Java のインストール」をご参照ください。
-
GetLogs() メソッド
-
パラメーター:
queryたとえば、分析文は
* | select count(*) as pvです。-
完全精度モードを有効にする:分析文の前に
set session allow_incomplete=false;を追加します。たとえば、* | select count(*) as pvは* | 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"); // Simple Log Service のエンドポイントを設定します。この例では、中国 (北京) リージョンのエンドポイントを使用します。実際のエンドポイントに置き換えてください。 String host = "https://cn-beijing.log.aliyuncs.com"; // Simple Log Service クライアントを作成します。 Client client = new Client(host, accessId, accessKey); // プロジェクト名を指定します。 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 を 1 回使用した場合の料金はいくらですか?
専用 SQL の料金は、データ量と実行するクエリと分析文によって異なります。次の表に例を示します。
クエリと分析文
データ量 (行)
実行あたりの平均コスト (/USD)
* | select avg(double_0) from stress_s1_mil140 億
0.004435
* | select avg(double_0), sum(double_0), max(double_0), min(double_0), count(double_0) from stress_s1_mil140 億
0.006504
* | select avg(double_0), sum(double_1), max(double_2), min(double_3), count(double_4) from stress_s1_mil140 億
0.013600
* | select key_0 , avg(double_0) as pv from stress_s1_mil1 group by key_0 order by pv desc limit 100040 億
0.011826
* | select long_0, avg(double_0) as pv from stress_s1_mil1 group by long_0 order by pv desc limit 100040 億
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 10003 億
0.010791
* | select avg(double_0) from stress_s1_mil1 where key_0='key_987'40 億
0.00007
> 完全に正確