You need to enable JavaScript to run this app.
导航
如何提高检索分析速度?
最近更新时间:2024.11.08 10:53:42首次发布时间:2024.11.08 10:53:42

本文介绍提高日志检索分析速度的方法。

增加 Shard 数量

增加 Shard 数量可以增强日志服务的读写能力,但只对新写入的数据生效。Shard 表示计算资源,Shard 越多,计算越快。您可以通过分裂 Shard 的方式,适当增加 Shard 数量。具体操作,请参考分裂分区

说明

增加 Shard 数量会产生更多费用,请按需增加。关于 Shard 的计费说明,请参考计费项

缩小检索的时间范围或数据量

  • 检索的时间范围越大,检索速度越慢,建议适当地缩小检索的时间范围来提升检索速度。
  • 检索的数据量越大,检索速度越慢,建议适当地减少检索的数据量来提升检索速度。

重复执行检索操作

当检索结果不精确时,可以尝试重复执行多次检索操作。每次检索时,日志服务底层加速机制会基于现有结果进行检索,因此多次重复检索可以提升检索结果的精确性。更多信息,请参考提示“查询结果不精确”,如何解决?

优化检索语句

检索时间较长的语句具备如下特点。

  • 检索条件较多。
  • 检索扫描的数据量较大。

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

  • 去除不必要的检索条件
    例如使用多条件检索时,如果满足条件 A 的日志一定满足条件 B,则条件 B 这个检索条件可以去掉。示例如下:

    • 检索语句(速度快)

      log_msg: "INFO| write logs sucessful"
      
    • 检索语句(速度慢)

      log_msg: "INFO| write logs sucessful" AND log_level:INFO
      
  • 合并相同 Key 范围检索条件。
    使用范围检索时,如果需要限制检索的起止范围,使用双范围操作符替换单范围操作符。示例如下:

    • 检索语句(速度快)

      log_status: [1000 TO 2000}
      
    • 检索语句(速度慢)

      log_status: >= 1000 AND log_status: < 2000
      
  • 将命中率高的筛选条件放到 SQL 语句中。
    在检索和分析结合使用的场景,可将命中率高的条件置于 SQL 部分,以此提升检索速率。例如下述示例中,满足 log_level:INFO 的日志数与总日志数的比例值超过 50%,则将此条件放到 SQL 语句进行筛选,速度更快。

    • 检索分析语句(速度快)

      * | select count(*) as cnt where log_level = 'INFO'
      
    • 检索分析语句(速度慢)

      log_level:INFO | select count(*) as cnt
      
  • 在 SQL 分析语句中指定需要获取的列,避免全列读取。
    如果需要获取所有列,请使用检索语法。示例如下:

    • 检索分析语句(速度快)

      * | select a, b, c
      
    • 检索分析语句(速度慢)

      * | select *