当您使用SQL分析时,如果数据量较大,SQL普通版无法在一次查询中完整扫描指定时间段内的所有日志,返回的结果可能不包括所有匹配的数据,增加Shard可以提升读写能力,但只对新写入的数据生效。您可以通过开启SQL独享版,增加计算资源,提升单次分析的数据量。本文为您介绍SQL独享版的概念和如何开启SQL独享版。
前提条件
已创建Standard Logstore。具体操作,请参见创建Logstore。
已采集日志。具体操作,请参见数据采集。
已配置索引。具体操作,请参见配置索引。
背景信息
日志服务中的数据必定保存在某一个分区(Shard)。日志服务通过限制每个Shard扫描的数据量,控制Logstore、EventStore、MetricStore的读写数据的能力。当使用SQL分析时,如果数据量较大,日志服务可能只返回部分匹配的结果。增加Shard数量可以提升读写能力,但只对新写入的数据生效,而且会导致实时消费的客户端过多。SQL独享版支持更强大的SQL分析能力,可以解决这一问题,典型场景包括:
分析性能要求高的场景,例如实时数据分析。
长周期的数据分析场景,例如月维度的数据分析。
大规模业务的数据分析场景,例如千亿行数据的分析。
通过日志服务实现多指标多维度(SQL并发数大于15个)的报表需求场景。
SQL独享版和SQL普通版的能力对比,请参见分析概述。
计费信息
按照查询和分析时所使用的CPU时间计算。单位为核×小时,即1核计算资源独享使用1小时的费用。更多信息,请参见SQL独享版计费案例。
按量付费:SQL独享版费用=CPU时间(小时)×每小时单价
资源包:预付计划资源包,换算成资源额度(CU)进行抵扣。
开启SQL独享版
日志服务支持如下两种开启方式。
单次开启:仅当前Logstore下的查询和分析操作,使用SQL独享版。
默认开启:当前Project下的所有查询和分析操作(包括告警、仪表盘等),都使用SQL独享版。
单次开启SQL独享版
登录日志服务控制台。
在Project列表区域,单击目标Project。
在控制台左侧,单击日志存储,在日志库列表中单击目标Logstore。
单击图标。
默认开启SQL独享版
登录日志服务控制台。
在Project列表区域,单击目标Project。
单击图标。
将鼠标悬浮在SQL独享版CU数上,然后单击设置。
在编辑SQL独享版CU数面板中,打开是否默认开启的开关,然后单击确定。
SDK示例
常见问题
如何通过API开启SQL独享版?
您可以在GetLogs接口中,通过powerSql参数或query参数开启SQL独享版。更多信息,请参见GetLogs。
如何获取CPU时间?
执行查询和分析操作后,将鼠标悬浮在分析结果上,查看CPU时间,如下图所示。
SQL独享版的费用是否可控?
日志服务通过SQL独享版的CU数来控制SQL独享版的费用。您可以在目标Project的概览页面中,配置SQL独享版CU数,如下图所示。
说明CU(ComputeUnit)是SQL独享版运行过程中可以并行使用的计算核数。
使用一次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