慢查询隔离
更新时间:2024-10-31
百度智能云Elasticsearch提供慢查询隔离的功能,支持用户配置固定大小的资源隔离池,当单条查询运行时申请的内存大小超过设定的阈值时,将该查询任务放到隔离池中管理。当隔离池的内存总量超过设定阈值时,通过可插拔的优先级策略熔断资源消耗最大的查询。避免单条查询导致的集群异常问题,提升整体服务稳定性。
注意:目前仅7.10.2版本的Elasticsearch集群支持慢查询隔离。
使用方法
开启慢查询隔离和全局查询超时功能
慢查询隔离和全局查询超时特性默认关闭,使用时需要先开启功能,配置后立即生效,两个开关是独立功能。
PUT /_cluster/settings
{
"persistent": {
"search.isolator.enabled": "true",
"search.isolator.time.enabled": "true"
}
}
配置慢查询隔离
分为三种情况,设置单个分片查询任务被定义为慢查询任务的阈值、设置触发隔离池内查询任务中断的阈值和设置中断隔离池中某一条查询任务的选取策略。
设置单个分片查询任务被定义为慢查询任务的阈值
PUT /_cluster/settings
{
"persistent": {
"search.isolator.trigger.task.mem_cost": "50m",
"search.isolator.trigger.task.latency": "10s"
}
}
参数说明
参数名 | 数据类型 | 参数说明 |
---|---|---|
search.isolator.trigger.task.mem_cost | String | 查询请求内存使用阈值,当单个查询任务使用内存超过阈值时,系统会将其放入慢查询隔离池中。默认100mb,取值范围:0b~节点最大堆内存。 |
search.isolator.trigger.task.latency | String | 查询请求延迟阈值,当单个查询任务耗时超过阈值时,系统会将其放入慢查询隔离池中。 默认10s,取值范围:≥ 0ms。 |
设置触发隔离池内查询任务中断的阈值
PUT /_cluster/settings
{
"persistent": {
"search.isolator.total.mem.limit": "60%",
"search.isolator.total.heap.usage.limit": "75%",
"search.isolator.total.tasks.limit": "1000"
}
}
参数说明
参数名 | 类型 | 说明 |
---|---|---|
search.isolator.total.mem.limit | String | 慢查询隔离池堆内存占用集群的比例阈值。默认60%,表示占用率达到60%时,通过优先级策略熔断隔离池中资源消耗最大的查询。取值范围:0.0 ~ 100.0%。 |
search.isolator.total.heap.usage.limit | String | 整体堆内存使用率阈值。默认75%,表示当堆内存整体使用率达到75%时,通过优先级策略熔断隔离池中资源消耗最大的查询。取值范围:0.0 ~ 100.0%。 |
search.isolator.total.tasks.limit | Integer | 慢查询隔离池最多允许处理的任务数。默认1000,表示隔离池中同时处理的查询数超过1000时,通过优先级策略熔断隔离池中资源消耗最大的查询。取值范围:10 ~ 50000。 |
设置中断隔离池中某一条查询任务的选取策略
PUT /_cluster/settings
{
"persistent": {
"search.isolator.strategy": "fair",
"search.isolator.strategy.fair.fair_ratio": "1%"
}
}
参数说明
参数名 | 类型 | 说明 |
---|---|---|
search.isolator.strategy | String | 中断隔离池中任务的选取策略,可选值:fair、mem-first、time-first。 - mem-first:中断堆内存使用最大的任务。 - time-first:中断运行时间最长的任务。 - fair:综合内存与时间。当任务堆内存差异小于“最大堆内存 * ratio”时,优先中断时间长的任务,否则优先中断内存大的任务。默认值:fair。 |
search.isolator.strategy.fair_ratio | String | fair策略的内存阈值,适用于search.isolator.strategy为fair时。相差内存小于此阈值时,中断运行时间长的任务,反之则中断大内存任务。默认值:1%,范围:0.0%-100.0%。 |
配置全局超时特性
PUT /_cluster/settings
{
"persistent": {
"search.isolator.time.limit": "10s"
}
}
参数说明
参数名 | 数据类型 | 参数说明 |
---|---|---|
search.isolator.time.limit | String | 全局查询任务超时设置。当全局查询超时功能开启时,所有已创建的查询任务超过此时长将被取消执行。默认值:120s,取值范围:≥ 0ms |
监控
- 获取隔离池任务
GET /_tasks/isolator
GET /_cat/isolator_tasks
- 获取隔离池统计信息
GET /_nodes/isolator_stats