es性能优化

先思考

1,硬件

至少4C8G

多节点

2,索引

分片合理 比如5主1副,根据数据量计算分片

刷新时机30s

3,写入

批量

多线程并行

4,查询

并行查询

补充

2,

mapping 优化

Doc Values优化

  • 聚合/排序必须依赖doc_values

  • 对纯过滤字段可禁用节省空间:

选择合适text keyword

3,写入

刷新30s

4,查询

只查询需要的

用filter代替query,filter不计算评分,可走缓存

深分页:search_after代替 from size

DS

Elasticsearch 性能优化全面指南

Elasticsearch 性能优化需要从多个维度进行综合考虑。以下是系统化的优化方案,按照优先级排序:

一、硬件与基础设施优化

1. 节点配置

  • 内存分配

    • JVM堆内存不超过物理内存的50%(最大不超过32GB)

    • 剩余内存留给文件系统缓存

    • 示例配置:-Xms16g -Xmx16g

  • 磁盘选择

    • 使用SSD(特别是高IOPS场景)

    • 避免使用NFS等网络存储

    • 推荐配置:RAID 0或单块高性能SSD

  • CPU核心

    • 每个节点至少4-8核

    • 搜索密集型场景需要更多核心

2. 集群规划

  • 分片策略

    • 单个分片大小控制在10-50GB

    • 分片数 = 数据总量(GB)/30GB

    • 示例:500GB数据 → 17个分片

  • 节点角色分离

yaml

复制

下载

node.master: true
node.data: false
node.ingest: false
  • 专用master节点(3-5个)

  • 专用data节点

  • 专用coordinating节点

二、索引设计优化

1. 映射优化

  • 字段精简

    • 禁用不需要的字段:"enabled": false

    • 排除不需要返回的字段:"store": false

  • 类型选择

    • 数值类型选择最小够用的类型(如byte代替integer)

    • 文本搜索使用text,精确匹配使用keyword

  • 多字段配置

json

复制

下载

{
  "product_name": {
    "type": "text",
    "fields": {
      "raw": { "type": "keyword" }
    }
  }
}

2. 索引设置

json

复制

下载

{
  "settings": {
    "index": {
      "number_of_shards": 10,
      "number_of_replicas": 1,
      "refresh_interval": "30s",
      "translog": {
        "sync_interval": "5s",
        "durability": "async"
      }
    }
  }
}

三、查询性能优化

1. 查询DSL优化

  • 使用filter代替query

    • filter不计算评分,可利用缓存

json

复制

下载

{
  "query": {
    "bool": {
      "filter": [{
        "term": { "status": "active" }
      }]
    }
  }
}
  • 避免深度分页

    • 使用search_after代替from/size

    • 对于TOP N结果使用"size": 0 + 聚合

  • 字段数据加载

    • 禁用不需要排序/聚合字段的doc_values:

    json

    复制

    下载

    {
      "price": {
        "type": "integer",
        "doc_values": false
      }
    }

2. 搜索模板

  • 使用预编译查询模板

json

复制

下载

POST _scripts/search_template_1
{
  "script": {
    "lang": "mustache",
    "source": {
      "query": {
        "match": {
          "{{field}}": "{{value}}"
        }
      }
    }
  }
}

四、写入性能优化

1. 批量操作

  • 合理的bulk大小

    • 建议5-15MB/请求

    • 通过测试找到最佳值

  • 并行化写入

    • 多线程发送bulk请求

    • 根据集群规模调整并发数

2. 刷新与合并优化

json

复制

下载

PUT /my_index/_settings
{
  "index": {
    "refresh_interval": "30s",
    "merge": {
      "scheduler": {
        "max_thread_count": 1
      }
    }
  }
}

五、监控与维护

1. 关键监控指标

  • 集群健康

    • GET _cluster/health

    • 关注unassigned_shards和pending_tasks

  • 节点状态

    • GET _nodes/stats

    • 重点监控JVM堆内存、GC时间、IO等待

2. 定期维护

  • 冷数据归档

    • 使用ILM(Index Lifecycle Management)

    • 示例策略:

json

复制

下载

PUT _ilm/policy/cold_data_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "50gb"
          }
        }
      },
      "delete": {
        "min_age": "30d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}
  • 定期force merge

bash

复制

下载

POST /my_index/_forcemerge?max_num_segments=1
Elasticsearch 是一个高性能的分布式搜索引擎,但是在处理大量数据时,可能会出现性能瓶颈。以下是一些 Elasticsearch 性能优化的建议: 1. 确保 Elasticsearch 集群的硬件资源充足。例如,CPU、内存、磁盘空间等。可以使用 Elasticsearch 的监控工具来监测集群资源的使用情况,以便及时进行扩容。 2. 对于大型数据集,使用分片可以提高 Elasticsearch 的性能。可以考虑增加分片数量,以提高搜索和写入的速度。 3. 使用合适的索引设置,例如合理的分词器和分析器,可以提高搜索效率。 4. 避免使用过多的查询,因为每个查询都会占用系统资源。可以使用缓存技术来优化查询性能。 5. 合理设置 Elasticsearch 的 JVM 堆内存大小,以确保 Elasticsearch 有足够的内存来处理数据。 6. 使用 Elasticsearch 的缓存机制,例如字段数据缓存、过滤器缓存等,可以显著提高搜索性能。 7. 对于写入频繁的场景,可以考虑使用异步写入方式,避免写入操作对搜索性能产生影响。 8. 对于长时间运行的查询,可以考虑使用 Elasticsearch 的 scroll API,以避免在内存中保留大量数据。 9. 定期清理 Elasticsearch 中的过期数据,以减少硬盘空间占用和搜索性能受到的影响。 10. 使用 Elasticsearch 的监控工具来监控集群性能,并及时处理异常情况,以保证 Elasticsearch 的高可用性和高性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值