详情页标题前

阿里云日志服务SLS优化查询-云淘科技

详情页1

本文介绍优化查询的方法,用于提高查询效率。

增加Shard数量

Shard表示计算资源,Shard越多,计算越快,您需要保证平均每个Shard扫描的数据不多于5000万条。您可以通过分裂Shard,增加Shard数量。具体操作,请参见分裂Shard。


注意 分裂Shard会产生更多费用,且只对新数据起到加速效果,旧数据仍然在旧Shard中。

缩减查询的时间范围和数据量

  • 时间范围越大,查询越慢。

    适当缩短查询的时间范围可以更快地完成计算。

  • 数据量越大,查询越慢。

    请尽量减少查询的数据量。

多次重复查询

当查询不精确时,可以尝试多次重复查询。每次查询时,底层加速机制会充分利用已有的结果进行分析,因此多次查询可以使结果更加精确。

优化SQL分析语句

计算时间较长的查询分析语句具备如下特点。

  • 使用GROUP BY语法基于字符串进行分组统计。
  • 使用GROUP BY语法基于多列(大于5列)进行分组统计。
  • 在SQL分析语句中有生成字符串的操作。

您可以通过如下方法优化分析语句。

  • 尽量避免生成字符串的操作。
    例如使用date_format函数生成格式化的时间戳,导致查询效率低。针对时间戳的计算,建议使用date_trunc或者time_series函数进行计算。示例如下:

    * | select date_format(from_unixtime(__time__) , '%H_%i') as t, count(1) group by t
  • 尽量避免对字符串列进行分组统计。

    使用GROUP BY语法基于字符串列进行分组统计,会导致大量的Hash计算,这部分计算量占据整体计算量的50%以上。示例如下:

    • 查询和分析语句(速度快)
      * | select count(1) as pv , from_unixtime(__time__-__time__%3600) as time group by __time__-__time__%3600
    • 查询和分析语句(速度慢)
      * | select count(1) as pv , date_trunc('hour',__time__) as time group by time

    上述两条查询分析语句都是计算每小时的日志条数。第二条语句先把时间戳转化成字符串格式(例如2021-12-12 00:00:00),然后对这个字符串列进行分组统计。第一条语句对时间整点值进行计算,并且通过分组统计后再将时间戳转化为字符串格式。

  • 基于多列进行分组统计时,把字典大的字段放在前面。
    例如字段的值有13个,uid字段的值有1亿个,则建议在GROUP BY子句中将uid字段放在前面。示例如下:

    • 查询和分析语句(速度快)
      * | select province,uid,count(1) group by uid,province
    • 查询和分析语句(速度慢)
       * | select province,uid,count(1) group by province,uid
  • 使用估算函数。
    估算函数的性能比精算函数的好。估算会损失一定的精确度,用于达到快速计算的效果。示例如下:

    • 查询和分析语句(速度快)
       * |select approx_distinct(ip)
    • 查询和分析语句(速度慢)
       * | select count(distinct(ip))
  • 在SQL分析语句中指定获取需要的列,尽量不要读取所有列。
    在SQL分析语句中,尽量只读取需要参与计算的列。如果要获取所有列,请使用查询语法。示例如下:

    • 查询和分析语句(速度快)
      * |select a,b c 
    • 查询和分析语句(速度慢)
      * |select *
  • 不是用于分组的列,尽量放在聚合函数中。
    例如userid与用户名必定是一一对应的,您只需使用GROUP BY语法对userid进行分组统计即可。示例如下:

    • 查询和分析语句(速度快)
       * | select userid, arbitrary(username), count(1) group by userid 
    • 查询和分析语句(速度慢)
      * | select userid, username, count(1) group by userid,username
  • 尽量避免使用IN语法
    尽量避免在分析语句中使用IN语法,您可以在查询语句中使用OR语法代替。示例如下:

    • 查询和分析语句(速度快)
      key: a or key: b or key: c | select count(1)
    • 查询和分析语句(速度慢)
      * | select count(1) where key in ('a','b')

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/165773.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云ECS云服务器实例概述-云淘科技

    ECS实例是云上的虚拟计算服务器,包含vCPU、内存、操作系统、网络、磁盘等基础组件。您可以使用阿里云提供的控制台、API等管理工具创建和管理ECS实例,像使用本地服务器一样管理ECS实例的状态、应用等,还可以灵活地升级计算、存储等能力。 实例基础配置 实例基础配置决定一台实例所需的基础资源,主要包括: 实例规格 实例规格定义了ECS实例在计算性能、存储性能…

    阿里云服务器 2023年12月9日
  • 阿里云RDS数据库CreateDiagnosticReport – 创建诊断报告-云淘科技

    该接口用于创建诊断报告。 接口说明 说明 此API接口已不再维护,请使用数据库自治服务DAS提供的功能相同的API接口CreateDiagnosticReport。 通过该接口创建诊断报告后,您可以调用DescribeDiagnosticReportList下载诊断报告。 调试 您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。…

    阿里云数据库 2023年12月9日
  • 阿里云日志服务SLS通过PHP SDK使用SQL独享版-云淘科技

    本文介绍通过PHP SDK使用SQL独享版的代码示例。 前提条件 已创建RAM用户并完成授权。具体操作,请参见创建RAM用户并完成授权。 已配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。具体操作,请参见配置环境变量。 重要 阿里云账号的AccessKey拥有所有API的访问…

    阿里云日志服务SLS 2023年12月10日
  • 阿里云大数据开发治理平台 DataWorks数据安全合规服务-云淘科技

    DataWorks提供数据安全合规服务,可自动扫描您的App安装包和隐私政策(隐私授权协议),为您生成隐私合规报告,从个人信息收集、权限使用场景、隐私政策描述等多个维度帮助您识别安全风险,提供合规建议。 背景信息 数据安全合规服务为您提供1对1专家服务,如有需要,您购买服务后您可以单击申请链接或扫描下方二维码加入DataWorks钉钉交流群进行售前售后咨询,…

    2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云ECS云服务器自定义镜像概述-云淘科技

    自定义镜像是您基于实例或快照创建的镜像,或者从本地导入的镜像,包含已部署的应用、数据等信息。使用自定义镜像可以快速创建更多相同配置的实例,无需每次创建实例时重复配置操作。 自定义镜像使用流程 当您成功创建或成功导入自定义镜像后,镜像的状态为可用。此时,您可以使用该镜像创建实例,可以将其共享给其他阿里云账号使用,或复制该镜像到其他地域使用,或导出该镜像到OSS…

    阿里云服务器 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。