【问题标题】:How does the 'delete index' command work inside ES?“删除索引”命令在 ES 中是如何工作的?
【发布时间】:2020-08-01 02:51:48
【问题描述】:

“删除索引”命令在 ES 中是如何工作的?

在正在运行的 ES 集群上使用“删除索引”命令有什么风险吗? 这个命令会不会占用过多的 CPU 或内存?

【问题讨论】:

    标签: performance elasticsearch elasticsearch-indices


    【解决方案1】:

    删除索引通常非常快,并且 Elasticsearch 在发送删除索引请求的成功响应时实际上并没有删除所有文档。

    Elasticsearch 主要更新cluster state(维护在集群的所有节点上)以将索引标记为已删除,并且在更新它以及路由表、元数据等其他一些事情时完成了主要的繁重工作。

    this是Elaticsearch源码中的主要方法,它可以帮助你理解我上面提到的东西和删除索引的内部。

    上面链接的一些重要代码sn-p

    RoutingTable.Builder routingTableBuilder = RoutingTable.builder(currentState.routingTable());
            Metadata.Builder metadataBuilder = Metadata.builder(meta);
            ClusterBlocks.Builder clusterBlocksBuilder = ClusterBlocks.builder().blocks(currentState.blocks());
    
            final IndexGraveyard.Builder graveyardBuilder = IndexGraveyard.builder(metadataBuilder.indexGraveyard());
            final int previousGraveyardSize = graveyardBuilder.tombstones().size();
            for (final Index index : indices) {
                String indexName = index.getName();
                logger.info("{} deleting index", index);
                routingTableBuilder.remove(indexName);
                clusterBlocksBuilder.removeIndexBlocks(indexName);
                metadataBuilder.remove(indexName);
            }
            // add tombstones to the cluster state for each deleted index
            final IndexGraveyard currentGraveyard = graveyardBuilder.addTombstones(indices).build(settings);
            metadataBuilder.indexGraveyard(currentGraveyard); // the new graveyard set on the metadata
            logger.trace("{} tombstones purged from the cluster state. Previous tombstone size: {}. Current tombstone size: {}.",
                graveyardBuilder.getNumPurged(), previousGraveyardSize, currentGraveyard.getTombstones().size());
    

    关于您的问题,在正在运行的 ES 集群上使用“删除索引”命令是否有任何风险?此命令是否会占用过多的 CPU 或内存?

    没有,在运行中的 Elasticsearch 集群上使用 delete index 请求没有风险,除非你有一个巨大的集群状态,并且如上所述实际上删除索引是异步发生的,这只是更新各种状态和标志,它也没有命令大量 CPU。

    您还可以在org.elasticsearch.cluster.metadata.MetadataDeleteIndexService 中启用跟踪日志,并在上面的代码 sn-p 中记录您的集群大小。

    【讨论】:

    • @Syn,很高兴它有帮助,如果还没有完成,你也可以投票吗:)
    猜你喜欢
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2012-04-28
    • 2022-09-28
    • 2018-07-17
    • 1970-01-01
    相关资源
    最近更新 更多