索引请求缓存

UDB-SX 索引请求缓存是一种专门的缓存机制,旨在通过存储分片级别频繁执行的搜索查询结果来提高搜索性能。这减少了集群负载,并改善了对重复搜索的响应时间。此缓存默认启用,特别适用于某些查询频繁执行的读取密集型工作负载。

缓存会在配置的刷新间隔自动失效。失效包括文档更新(包括文档删除)和索引设置的更改。这确保永远不会从缓存中返回过时的结果。当缓存大小超过其配置的限制时,最近最少使用的条目将被逐出,以便为新条目腾出空间。

某些查询不符合请求缓存的条件。这些查询包括性能剖析查询、滚动查询以及具有非确定性特征(例如使用 Math.random() 或 DFS 查询)或相对时间(例如 nownew Date())的搜索请求。默认情况下,只有 size=0 的请求是可缓存的。可以使用 indices.requests.cache.maximum_cacheable_size 更改此行为。

配置请求缓存

您可以通过在 udbsx.yml 配置文件中设置参数或使用 REST API 来配置索引请求缓存。有关更多信息,请参阅索引设置

设置

下表列出了索引请求缓存设置。有关动态设置的更多信息,请参阅索引设置

设置 数据类型 默认值 级别 静态/动态 描述
indices.cache.cleanup_interval 时间单位 1m(1分钟) 集群 静态 安排一个定期后台任务,以指定间隔清理缓存中过期的条目。
indices.requests.cache.size 百分比 1% 集群 静态 缓存大小占堆大小的百分比(例如,要使用堆的 1%,请指定 1%)。
index.requests.cache.enable 布尔值 true 索引 动态 启用或禁用请求缓存。
indices.requests.cache.maximum_cacheable_size 整数 0 集群 动态 设置要添加到请求缓存的查询的最大 size

示例

要为索引禁用请求缓存,请发送以下请求:

PUT /my_index/_settings
{
  "index.requests.cache.enable": false
}

缓存特定请求

除了为请求缓存提供索引级别或集群级别的设置外,您还可以通过将 request_cache 查询参数设置为 true 来选择性地缓存特定的搜索请求:

GET /students/_search?request_cache=true
{
  "query": {
    "match": {
      "name": "doe john"
    }
  }
}

监控请求缓存

监控缓存使用情况和性能对于维护高效的缓存策略至关重要。UDB-SX 提供了几个 API 来帮助监控缓存。

检索所有节点的缓存统计信息

节点统计信息API返回集群中所有节点的缓存统计信息:

GET /_nodes/stats/indices/request_cache

响应包含请求缓存统计信息:

{
  "nodes": {
    "T7aqO6zaQX-lt8XBWBYLsA": {
      "indices": {
        "request_cache": {
          "memory_size_in_bytes": 10240,
          "evictions": 0,
          "hit_count": 50,
          "miss_count": 10
        }
      }
    }
  }
}

检索特定索引的缓存统计信息

索引统计信息 API返回特定索引的缓存统计信息:

GET /my_index/_stats/request_cache

响应包含请求缓存统计信息:

{
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "_all": {
    "primaries": {
      "request_cache": {
        "memory_size_in_bytes": 2048,
        "evictions": 1,
        "hit_count": 30,
        "miss_count": 5
      }
    },
    "total": {
      "request_cache": {
        "memory_size_in_bytes": 4096,
        "evictions": 2,
        "hit_count": 60,
        "miss_count": 10
      }
    }
  },
  "indices": {
    "my_index": {
      "primaries": {
        "request_cache": {
          "memory_size_in_bytes": 2048,
          "evictions": 1,
          "hit_count": 30,
          "miss_count": 5
        }
      },
      "total":{
        "request_cache": {
          "memory_size_in_bytes": 4096,
          "evictions": 2,
          "hit_count": 60,
          "miss_count": 10
        }
      }
    }
  }
}

最佳实践

使用索引请求缓存时,请考虑以下最佳实践:

  • 合适的缓存大小:根据查询模式配置缓存大小。较大的缓存可以存储更多结果,但可能消耗大量资源。

  • 查询优化:确保频繁执行的查询经过优化,以便它们能从缓存中受益。

  • 监控:定期监控缓存命中和缓存未命中率,以了解缓存效率并进行必要的调整。