索引请求缓存
UDB-SX 索引请求缓存是一种专门的缓存机制,旨在通过存储分片级别频繁执行的搜索查询结果来提高搜索性能。这减少了集群负载,并改善了对重复搜索的响应时间。此缓存默认启用,特别适用于某些查询频繁执行的读取密集型工作负载。
缓存会在配置的刷新间隔自动失效。失效包括文档更新(包括文档删除)和索引设置的更改。这确保永远不会从缓存中返回过时的结果。当缓存大小超过其配置的限制时,最近最少使用的条目将被逐出,以便为新条目腾出空间。
某些查询不符合请求缓存的条件。这些查询包括性能剖析查询、滚动查询以及具有非确定性特征(例如使用 Math.random() 或 DFS 查询)或相对时间(例如 now 或 new 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
}
}
}
}
}
最佳实践
使用索引请求缓存时,请考虑以下最佳实践:
合适的缓存大小:根据查询模式配置缓存大小。较大的缓存可以存储更多结果,但可能消耗大量资源。
查询优化:确保频繁执行的查询经过优化,以便它们能从缓存中受益。
监控:定期监控缓存命中和缓存未命中率,以了解缓存效率并进行必要的调整。