Link Search Menu Expand Document Documentation Menu

索引请求缓存

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

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

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

配置请求缓存

您可以通过在 opensearch.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"
    }
  }
}

监控请求缓存

监控缓存使用情况和性能对于维持高效的缓存策略至关重要。OpenSearch 提供了多种 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
        }
      }
    }
  }
}

最佳实践

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

  • 合适的缓存大小:根据您的查询模式配置缓存大小。较大的缓存可以存储更多结果,但可能会消耗大量资源。
  • 查询优化:确保频繁执行的查询经过优化,以便它们可以从缓存中受益。
  • 监控:定期监控缓存命中率和缓存未命中率,以了解缓存效率并进行必要的调整。
剩余 350 字符

有问题?

想要贡献?