
# 配置存算分离架构
随着业务数据量的快速指数级增长，传统单一存储架构面临性能与成本的双重挑战。为了破解"既要高性能实时查询，又要低成本海量存储"的行业难题，CSS服务推出了OpenSearch存算分离功能。
OpenSearch存算分离架构将冷热数据分离存储：高频访问的热数据存储于高性能存储介质，低频访问的冷数据迁移至低成本存储介质（对象存储服务OBS）。该方案既能保障实时查询性能，又能大幅降低长期存储成本。
#### 功能介绍
图1存算分离架构图   
![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002496623417.png "点击放大")
OpenSearch存算分离的核心业务流程：
1. 数据写入 热数据直接写入本地高性能磁盘（SSD），确保实时查询性能。
   
2. 冷热转换 低频数据从SSD迁移至OBS（该OBS桶对用户不可见），从热数据转为冷数据。可通过调用冻结索引接口或生命周期策略（如数据超过90天）自动触发。冷数据索引的元数据和日期字段数据保留在本地磁盘，用于快速定位OBS中的冷数据。
   
3. 查询处理
   - 热数据查询可直接从本地磁盘读取，系统响应延迟为毫秒级。
   
   - 冷数据查询通过保留的元数据快速定位OBS中的冷数据，按需加载数据后返回结果。
    
CSS服务通过生命周期管理实现索引数据不同状态之间的转换：
- 热索引（open）：支持数据写入和毫秒级检索。
- 冻结索引（freeze_low_cost）：将低频访问的索引数据转储至OBS，索引变为只读，检索速率降低到秒/分级别。
- 删除索引：冻结索引支持定期删除，释放存储资源。
 
结合索引生命周期管理实现自动存算分离的操作指导请参见[通过ISM实现存算分离](https://support.huaweicloud.com/usermanual-css/css_01_0211.html)。
#### 介绍视频
<video controls="controls" preload="none" id="object5408123195216" class="idp-external-video" src="https://res-video.hc-cdn.com/cloudbu-site/china/zh-cn/support/css-video/1758770067016402271.mp4" title="OpenSearch存算分离" poster="https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002457853518.png" height="300.0000" width="600.0000"></video>
#### 计费影响
当启用存算分离冻结索引时，系统会将指定索引转储到OBS服务中，存储类别为标准存储类型。该OBS桶对用户不可见，无法通过OBS控制台进行查看或管理。需要注意的是，存储在OBS桶中的索引数据将产生额外费用，该费用仅支持按需计费模式，根据实际使用的标准存储容量进行计算。具体费用估算请参见[云搜索服务价格计算器](https://www.huaweicloud.com/pricing/calculator.html#/search)。
#### 约束限制
- OpenSearch集群仅1.3.6、2.19.0和3.4.0版本支持存算分离功能。

- 在执行冻结索引前，系统会将待冻结的索引配置为只读状态，即便在索引数据转储到OBS后，索引也是只读状态，不支持写入数据。
- 在冻结索引过程中，查询请求不受影响。在冻结完成后，会将索引先Close再Open，在这段时间内，集群可能短暂出现Red状态，索引不可查询。在索引Open结束后集群恢复正常。
- 索引冻结成功后，索引会被转储到OBS桶中，此时本地磁盘中的索引数据会被删除。当查询被冻结的索引时，时延会增加，在聚合时，由于查询复杂、数据读取多，时延变长会更明显。
- 已转储到OBS中的索引不支持解冻，即不可回退为可写的索引。
- 在配置了读写分离的集群中，从集群无法对由主集群同步过来的索引数据设置存算分离。
- 向量索引不支持配置存算分离。
- 冻结索引时，数据转储到OBS桶中会占用网络带宽，所以使用过程中要遵守OBS的"带宽"和"每秒请求数（QPS）"的使用限制，详细请参见[OBS使用限制](https://support.huaweicloud.com/productdesc-obs/obs_03_0360.html)。当超过限制时，集群中涉及到OBS查询的性能都会下降，例如恢复分片的速度变慢、查询数据时变慢等。
 
#### 登录OpenSearch Dashboards
登录OpenSearch Dashboards进入命令执行页面。OpenSearch集群支持多种客户端访问，本文仅以CSS服务集成的OpenSearch Dashboards为例介绍配置指导。
1. 登录[云搜索服务管理控制台](https://console.huaweicloud.com/elasticsearch/)。
2. 在左侧导航栏，选择"集群管理 \> OpenSearch"。
3. 在集群列表，选择目标集群，单击操作列的"Dashboards"，登录OpenSearch Dashboards。
4. 在OpenSearch Dashboards左侧导航栏选择"Dev Tools"，进入操作页面。 控制台左侧是命令输入框，其右侧的三角形图标为执行按钮，右侧区域则显示执行结果。
   
 
#### 冻结索引
将热数据转储至OBS桶，降低SSD存储压力。索引变为只读状态。
1. 冻结索引。
   执行如下命令，将指定索引转储至OBS桶，存储类别为标准存储。
   ```
   POST {index_name}/_freeze_low_cost
   ```
   表1参数说明 
   | 参数         | 类型     | 默认值 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   |:---|:---|:---|:---|
   | index_name | String | 无   | 指定索引名称。 - 单个索引：直接输入索引名称（如"my_index"）。  - 多个索引：用英文逗号分隔多个索引（如"my_index1,my_index2"）。  - 通配符：支持通配符 \*（匹配任意字符），如"myindex\*"表示匹配所有以myindex开头的索引。   |
      
   返回示例：
   ```
   {
       "freeze_uuid": "pdsRgUtSTymVDWR_HoTGFw"// 冻结任务ID，可以查询冻结任务进度
   }
   ```
   ![](https://support.huaweicloud.com/usermanual-css/public_sys-resources/caution_3.0-zh-cn.png)
   当OpenSearch集群版本为2.19.0或3.4.0，且镜像版本不低于x.x.x_25.9.0_xxx时，冻结索引任务提交后不会立即执行，会先缓存一段时间（默认1分钟），再批量执行多个索引的冻结任务。批量异步冻结任务的缓存规则支持自定义，配置说明请参见[配置批量异步冻结任务]。
   
2. 查看冻结任务进度。
   执行如下命令，基于冻结任务ID查看任务进度。
   ```
   GET _freeze_low_cost_progress/{freeze_uuid}
   ```
   当OpenSearch集群版本为2.19.0或3.4.0，且镜像版本不低于x.x.x_25.9.0_xxx时，会返回同一批次的多个索引的冻结任务进度。
   返回示例：
   ```
   {
     "stage" : "STARTED",
     "shards_stats" : {
       "INIT" : 0,
       "FAILURE" : 0,
       "DONE" : 0,
       "STARTED" : 1,
       "ABORTED" : 0
     },
     "indices" : {
       "data1" : [
         {
           "uuid" : "7OS-G1-tRke2jHZPlckexg",
           "index" : {
             "name" : "data1",
             "index_id" : "4b5PHXJITLaS6AurImfQ9A",
             "shard" : 2
           },
           "start_ms" : 1611972010852,
           "end_ms" : -1,
           "total_time" : "10.5s",
           "total_time_in_millis" : 10505,
           "stage" : "STARTED",
           "failure" : null,
           "size" : {
             "total_bytes" : 3211446689,
             "finished_bytes" : 222491269,
             "percent" : "6.0%"
           },
           "file" : {
             "total_files" : 271,
             "finished_files" : 12,
             "percent" : "4.0%"
           },
           "rate_limit" : {
             "paused_times" : 1,
             "paused_nanos" : 946460970
           }
         }
       ]
     }
   }
   ```
   表2返回参数说明 
   | 参数           | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   |:---|:---|
   | stage        | 冻结任务的当前状态。 取值范围： - INIT：刚启动或者正在初始化。  - FAILURE：失败。  - DONE：完成。  - STARTED：已启动。  - ABORTED：取消，预留字段。   |
   | shards_stats | 冻结任务中，处在各个状态的shard个数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | indices      | 每个索引的状态详情，如[表3]所示。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
      
    表3indices参数说明 
   | 参数                      | 说明                     |
   |:---|:---|
   | uuid                    | 冻结任务的ID。               |
   | index                   | 索引信息和shard信息。          |
   | start_ms                | 任务开始时间。                |
   | end_ms                  | 任务结束时间，如果没有结束则显示为-1。   |
   | total_time              | 任务已花费时间。               |
   | total_time_in_millis    | 任务已花费时间毫秒数。            |
   | stage                   | 当前shard所处的状态。          |
   | failure                 | 任务失败原因，如果没有失败则显示为null。 |
   | size.total_bytes        | 总共需要冻结的文件字节数。          |
   | size.finished_bytes     | 已经完成冻结的文件字节数。          |
   | size.percent            | 已经完成冻结的字节数百分比。         |
   | file.total_bytes        | 总共需要冻结的文件字节数。          |
   | file.finished_bytes     | 已经完成冻结的文件字节数。          |
   | file.percent            | 已经完成冻结的文件个数百分比。        |
   | rate_limit.paused_times | 达到限速导致冻结暂停的次数。         |
   | rate_limit.paused_nanos | 达到限速导致冻结暂停的时间纳秒数。      |
      
   冻结完成的索引还会返回settings参数，如[表4]所示。
    表4settings参数说明 
   | 参数                    | 说明                         |
   |:---|:---|
   | index.frozen_low_cost | 标识该索引为冻结索引。固定值为"true"。     |
   | index.blocks.write    | 冻结后的索引禁止写入。固定值为"true"。     |
   | index.store.type      | 标识该索引的存储类型为OBS桶。固定值为"obs"。 |
      
   
3. 查询冻结状态的索引列表。
   ![](https://support.huaweicloud.com/usermanual-css/public_sys-resources/note_3.0-zh-cn.png)
   此处只介绍查询冻结索引列表的关键参数说明，API的详细介绍请参见[CAT indices](https://docs.opensearch.org/docs/2.19/api-reference/cat/cat-indices/)。
   执行如下命令，基于索引的冻结状态查询索引列表。
   ```
   GET _cat/freeze_indices?stage={STAGE}
   ```
   表5参数说明 
   | 参数    | 类型     | 默认值 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   |:---|:---|:---|:---|
   | STAGE | String | 无   | 指定索引的冻结状态。 取值范围： - start：开始冻结但还未完成冻结。  - done：已经完成冻结。  - unfreeze：没有启动冻结任务。  - 空或者其他值：正在冻结中和已经冻结完成。   |
      
   返回示例：
   ```
   green open data2 0bNtxWDtRbOSkS4JYaUgMQ 3 0  5 0  7.9kb  7.9kb
   green open data3 oYMLvw31QnyasqUNuyP6RA 3 0 51 0 23.5kb 23.5kb
   ```
   
 
#### 配置OBS中的缓存优化
冻结索引后，索引数据转储到OBS，为了尽可能地减少对OBS的访问请求，提升集群的查询性能，系统会缓存部分数据。第一次查询冷数据时，集群会直接访问OBS，获取到的数据会被缓存在集群内存中，后续查询时会先检查是否有缓存数据。CSS服务支持查询和重置存储在OBS桶中的冻结索引的缓存状态，以及修改缓存配置。
- 查询存储在OBS桶中冻结索引的缓存状态。
  - 执行如下命令，查询所有节点中冻结索引的缓存信息。
    ```
    GET _frozen_stats
    ```
    
  
  - 执行如下命令，查询指定节点中冻结索引的缓存信息。
    ```
    GET _frozen_stats/{node_id}
    ```
    表6参数说明 
    | 参数      | 类型     | 默认值 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                  |
    |:---|:---|:---|:---|
    | node_id | String | 无   | 指定集群节点ID。 - 单个节点：直接输入节点ID。  - 多个节点：用英文逗号分隔多个ID。   节点ID可以通过如下命令获取： ``` GET _cat/nodes?s=n&h=n,id&v=true&full_id=true ``` |
       
    
  
  
  查询所有节点中冻结索引的缓存信息的返回示例：
  ```
  {
    "_nodes" : {
      "total" : 1, // 所有节点数量
      "successful" : 1,  // 成功的节点数量
      "failed" : 0  // 失败的节点数量
    },
    "cluster_name" : "css-zzz1", // 集群名称
    "nodes" : {
      "7uwKO38RRoaON37YsXhCYw" : {
        "name" : "css-zzz1-ess-esn-2-1", // 节点名称
        "transport_address" : "10.0.0.247:9300", // 节点transport连接地址
        "host" : "10.0.0.247", // 节点host
        "ip" : "10.0.0.247", // 节点IP
        "block_cache" : {
          "default" : {
            "type" : "memory", // cache类型，memory表示内存cache
            "block_cache_capacity" : 8192, // cache容量
            "block_cache_blocksize" : 8192, // cache中单个block大小，单位为bytes，如此处表示8k
            "block_cache_size" : 12, // cache已被占用的大小
            "block_cache_hit" : 14,  // cache命中数
            "block_cache_miss" : 0, // cache未命中数
            "block_cache_eviction" : 0, // cache被逐出次数
            "block_cache_store_fail" : 0 // 如果cache满了，可能导致新的cache存储失败，此处表示存储失败的次数
          }
        },
        "obs_stats" : {
          "list" : {
            "obs_list_count" : 17, // 调用OBS list接口的次数
            "obs_list_ms" : 265, // 调用OBS list接口的总耗时
            "obs_list_avg_ms" : 15 // 调用OBS list接口的平均耗时
          },
          "get_meta" : {
            "obs_get_meta_count" : 79, // 调用OBS 获取元数据接口的次数
            "obs_get_meta_ms" : 183, // 调用OBS 获取元数据接口的总耗时
            "obs_get_meta_avg_ms" : 2 // 调用OBS 获取元数据接口的平均耗时
          },
          "get_obj" : {
            "obs_get_obj_count" : 12, // 调用OBS getObject接口的次数
            "obs_get_obj_ms" : 123, // 调用OBS getObject接口的总耗时
            "obs_get_obj_avg_ms" : 10 // 调用OBS getObject接口的平均耗时
          },
          "put_obj" : {
            "obs_put_obj_count" : 12, // 调用OBS putObject接口的总次数
            "obs_put_obj_ms" : 2451, // 调用OBS putObject接口的总耗时
            "obs_put_obj_avg_ms" : 204 // 调用OBS putObject接口的平均耗时
          },
          "obs_op_total" : {
            "obs_op_total_ms" : 3022, // 调用OBS接口的总耗时
            "obs_op_total_count" : 120, // 调用OBS接口的总次数
            "obs_op_avg_ms" : 25 // 调用OBS接口的平均耗时
          }
        },
        "reader_cache" : {
          "hit_count" : 0,
          "miss_count" : 1,
          "load_success_count" : 1,
          "load_exception_count" : 0,
          "total_load_time" : 291194714,
          "eviction_count" : 0
        }
      }
    }
  }
  ```
  
- 重置存储在OBS桶中冻结索引的缓存状态。 执行如下命令，重置缓存状态。
  ```
  POST _frozen_stats/reset
  ```
  此命令主要用于调试性能问题，例如重置缓存状态后再次执行查询可以清晰看到本次查询的缓存命中情况。在业务运行阶段不需要执行此命令。
  返回结果如下：
  ```
  {
    "_nodes" : {
      "total" : 1,
      "successful" : 1,
      "failed" : 0
    },
    "cluster_name" : "Es-0325-007_01",
    "nodes" : {
      "mqTdk2YRSPyOSXfesREFSg" : {
        "result" : "ok"
      }
    }
  }
  ```
  
- 修改存储在OBS桶中冻结索引的缓存配置。 集群访问不同的文件，访问的模式是不一样的，缓存系统支持多级缓存，会使用不同大小的block来缓存不同的文件，例如fdx和tip文件会使用大量的小block缓存，对fdt文件会使用较少的大block缓存。缓存配置支持基于业务情况进行修改，参数如[表7]所示。
   表7冻结索引的缓存配置参数说明 
  | 参数                                                     | 类型      | 默认值           | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
  |:---|:---|:---|:---|
  | low_cost.obs.blockcache.names                          | Array   | \["default"\] | 指定缓存系统支持的多级缓存名称列表。缓存系统支持多级缓存，分别用来缓存不同访问粒度的数据。 系统默认包含一个名为default的缓存。如果配置此参数，必须至少包含一个名为default的缓存，其他缓存名称可自定义。                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
  | low_cost.obs.blockcache.\<NAME\>.type                  | ENUM    | memory        | 指定名为\<NAME\>的缓存使用的类型。 取值范围： - memory：使用内存作为缓存存储，会占用系统内存资源。  - file：使用磁盘作为缓存存储，缓存容量受磁盘空间限制。建议使用超高IO型磁盘提升缓存性能。   |
  | low_cost.obs.blockcache.\<NAME\>.blockshift            | Integer | 13（对应8KB）     | 指定名为\<NAME\>的缓存中每个Block的大小（以字节为单位）。 计算方式为 2^blockshift^。例如，配置值为16，则Block大小为 2^16^ 字节，即65536字节或64KB。 单位：字节左移数。                                                                                                                                                                                                                                                                                                                                                                                               |
  | low_cost.obs.blockcache.\<NAME\>.bank.count            | Integer | 1             | 指定名为\<NAME\>的缓存的分区数量。每个分区是缓存的一个独立单元。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
  | low_cost.obs.blockcache.\<NAME\>.number.blocks.perbank | Integer | 8192          | 指定名为\<NAME\>的缓存中，每个分区包含的Block数量。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
  | low_cost.obs.blockcache.\<NAME\>.exclude.file.types    | Array   | 无             | 指定名为\<NAME\>的缓存，不缓存的文件后缀名列表。 如果一个文件的后缀既不在"exclude.file.types"列表中，也不在"\<NAME\>.file.types"列表中（如果配置了"\<NAME\>.file.types"），则该文件将使用default缓存策略。                                                                                                                                                                                                                                                                                                                                                                                                                                              |
  | low_cost.obs.blockcache.\<NAME\>.file.types            | Array   | 无             | 指定名为\<NAME\>的缓存，缓存的文件后缀名列表。 如果一个文件的后缀既不在"exclude.file.types"列表中，也不在"\<NAME\>.file.types"列表中（如果配置了"\<NAME\>.file.types"），则该文件将使用default缓存策略。                                                                                                                                                                                                                                                                                                                                                                                                                                              |
  | index.frozen.obs.max_bytes_per_sec                     | String  | 150MB         | 配置冻结索引过程中向OBS上传文件的最大速率限制。 取值格式：数字+单位 - 数字：自然数  - 单位：B、K、KB、M、MB、G、GB、T、TB、P、PB（不区分大小写）   取值范围：0\~（2^63^-1）Bytes 0表示无限制。 修改此配置后立即生效。                                                                                                    |
  | low_cost.obs.index.upload.threshold.use.multipart      | String  | 1GB           | 分段上传阈值，配置冻结索引过程中，单个文件大小超过此阈值时，会使用OBS的分段上传机制。 取值格式：数字+单位 - 数字：自然数  - 单位：B、K、KB、M、MB、G、GB、T、TB、P、PB（不区分大小写）   取值范围：0\~（2^63^-1）Bytes 0表示不分段。                                                                                                                                             |
     
  下面是一个常见的缓存配置示例，该配置使用两级缓存，名字分别为"default"和"large"。其中，"default"缓存使用大小为64K的block，一共有30\*4096个block，"default"缓存用于缓存除fdt后缀的其他文件，"large"缓存使用大小为2M的block，一共有5\*1000个block，"large"缓存用于缓存fdx、dvd和tip后缀的文件。
  ```
  low_cost.obs.blockcache.names: ["default", "large"]
  low_cost.obs.blockcache.default.type: file
  low_cost.obs.blockcache.default.blockshift: 16
  low_cost.obs.blockcache.default.number.blocks.perbank: 4096
  low_cost.obs.blockcache.default.bank.count: 30
  low_cost.obs.blockcache.default.exclude.file.types: ["fdt"]
  low_cost.obs.blockcache.large.type: file
  low_cost.obs.blockcache.large.blockshift: 21
  low_cost.obs.blockcache.large.number.blocks.perbank: 1000
  low_cost.obs.blockcache.large.bank.count: 5
  low_cost.obs.blockcache.large.file.types: ["fdx", "dvd", "tip"]
  ```
  
- 修改批量异步冻结任务配置。
  当OpenSearch集群版本为2.19.0或3.4.0，且镜像版本不低于x.x.x_25.9.0_xxx时，冻结索引任务提交后不会立即执行，会先缓存一段时间，再批量执行多个索引的冻结任务。批量异步冻结任务的缓存规则支持自定义，参数如[表8]所示。
   表8批量异步冻结任务配置参数说明 
  | 参数                             | 类型        | 默认值          | 说明                                                                                                                                                                                                                                                                     |
  |:---|:---|:---|:---|
  | low_cost.freeze.job.interval   | TimeValue | 1m           | 批量异步冻结任务的执行周期。 取值范围：10s\~10m 当设置为1m时，系统将暂存冻结索引请求，累计1分钟后统一执行批量处理。                                                   |
  | low_cost.freeze.job.batch_size | Integer   | 20           | 单次批量异步冻结任务中，允许包含的最大索引数量。 取值范围：1\~100 当设置为20时，系统将按20个索引/批次的粒度切割任务。例如，某生命周期任务在同一时间提交了100个待冻结的索引，异步任务会自动拆分为5个批次顺序执行。 |
  | low_cost.freeze.job.start_time | String    | 00:00（全天可执行） | 限制批量异步冻结任务的开始时间，在指定时间之前不启动任务。如果已提交的冻结任务尚未启动，则需等待至指定时间点后才能继续处理。 取值格式：小时:分钟                                                                                                                    |
  | low_cost.freeze.job.end_time   | String    | 23:59（全天可执行） | 限制批量异步冻结任务的启动截止时间，在指定时间之后停止启动任务。已启动的任务不受此限制影响，将继续执行。 取值格式： 小时:分钟                                                                                                                           |
     
  例如，执行如下命令修改默认配置：
  ```
  PUT _cluster/settings
  {
    "persistent": {
      "low_cost.freeze.job.interval": "5m",
      "low_cost.freeze.job.batch_size": 30,
      "low_cost.freeze.job.start_time": "22:00",
      "low_cost.freeze.job.end_time": "07:00"
    }
  }
  ```
  
 
#### 提升冻结索引的查询性能
在OpenSearch Dashboards的Discover页面首次查询冻结索引时，由于此时无任何缓存，导致所有数据均需要从OBS上获取，当命中的数据较多时，需要耗费大量的时间从OBS上获取对应的时间字段以及文件元数据。如果将这一部分数据直接缓存在本地，即可大幅提升查询性能，解决Discover页面首次查询慢的问题。CSS服务就是通过冷数据的本地缓存，实现冻结索引的查询性能提升。本地缓存配置是预置的，用户可以基于业务场景修改配置，也可以查询、了解本地缓存信息。
1. 修改冻结索引的本地缓存配置。如[表9]所示，本地缓存配置项均支持动态修改，配置后立即生效。
    表9本地缓存配置参数说明 
   | 参数                                    | 类型      | 默认值 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   |:---|:---|:---|:---|
   | low_cost.local_cache.max.capacity     | Integer | 500 | 节点上可以打开冷数据缓存的最大数量（每个shard对应一个缓存对象）。 取值范围：10\~5000 - 当堆内存使用率一直很高时，可以尝试降低该值。  - 当查询冷数据本地缓存的相关统计指标中"load_overflow_count"数值一直持续快速增加时，建议调大该值。   |
   | index.low_cost.local_cache.threshold  | Integer | 50  | 索引启用冷数据本地缓存date类型字段的阈值。 - 当索引中date类型字段的占比小于此值时，则启用冷数据本地缓存date类型字段；否则不启用。  - 如果索引中date类型字段占据绝大部分数据量，则不建议启用该功能。   取值范围：0\~100 单位：%  |
   | index.low_cost.local_cache.evict_time | 字符串     | 30d | 索引中冷数据本地缓存的清理时间，当缓存时间大于该值，缓存将被删除。根据"index.frozen_date"（冻结成功的时间）判定，当索引无"index.frozen_date"时，则根据索引创建时间判定。 建议根据磁盘用量调整淘汰时长，节省磁盘空间。 取值范围：1d\~365d 单位：d（天）                                                                                                                                                                                                                                                                                                       |
      
   下面提供了一些修改示例。
   - 执行如下命令，修改节点上可以打开冷数据缓存的最大数量。
     ```
     PUT _cluster/settings
     {
       "persistent": {
         "low_cost.local_cache.max.capacity": 1000
       }
     }
     ```
     
   
   - 执行如下命令，修改索引启用冷数据本地缓存date类型字段的阈值。
     ```
     PUT {index_name}/_settings
     {
       "index.low_cost.local_cache.threshold": 20
     }
     ```
     
   
   - 执行如下命令，修改索引中冷数据本地缓存的清理时间。
     ```
     PUT {index_name}/_settings
     {
       "index.low_cost.local_cache.evict_time": "7d"
     }
     ```
     
    
2. 查询冻结索引的本地缓存信息。
   - 执行如下命令，查询所有节点中冷数据的本地缓存相关指标。
     ```
     GET /_frozen_stats/local_cache
     ```
     
   
   - 执行如下命令，查询指定节点中冷数据的本地缓存相关指标。
     ```
     GET /_frozen_stats/local_cache/{node_id}
     ```
     
   
   
   返回示例：
   ```
   {
      "_nodes" : {
        "total" : 1,
        "successful" : 1,
        "failed" : 0
      },
      "cluster_name" : "test",
      "nodes" : {
        "6by3lPy1R3m55Dcq3liK8Q" : {
          "name" : "node-1",
          "transport_address" : "127.0.0.1:9300",
          "host" : "127.0.0.1",
          "ip" : "127.0.0.1",
          "local_cache" : {
            "get_stats" : {
              "get_total_count" : 562,               //从冷数据本地缓存查询数据的总次数
              "get_hit_count" : 562,                 //从冷数据本地缓存查询数据命中的次数
              "get_miss_count" : 0,                  //从冷数据本地缓存查询数据未命中的次数
              "get_total_ns" : 43849200,             //从冷数据本地缓存查询数据的总时长
              "get_avg_ns" : 78023                   //从冷数据本地缓存查询数据的平均时长
            },
            "load_stats" : {
              "load_count" : 2,                      //加载冷数据本地缓存的次数
              "load_total_ms" : 29,                  //加载冷数据本地缓存的总时长
              "load_avg_ms" : 14,                    //加载冷数据本地缓存的平均时长
              "load_fail_count" : 0,                 //加载冷数据本地缓存的失败次数
              "load_overflow_count" : 0              //加载冷数据本地缓存时超过缓存池的次数
            },
            "reload_stats" : {
              "reload_count" : 0,                    //重新生成冷数据本地缓存的次数
              "reload_total_ms" : 0,                 //重新生成冷数据本地缓存的总时长
              "reload_avg_ms" : 0,                   //重新生成冷数据本地缓存的平均时长
              "reload_fail_count" : 0                //重新生成冷数据本地缓存的失败次数
            },
            "init_stats" : {
              "init_count" : 0,                      //初始化冷数据本地缓存的次数
              "init_total_ms" : 0,                   //初始化冷数据本地缓存的总时长
              "init_avg_ms" : 0,                     //初始化冷数据本地缓存的平均时长
              "init_fail_count" : 0                  //初始化冷数据本地缓存的失败次数
            }
          }
        }
      }
    }
   ```
   
 
#### 查询存储冷数据的OBS实时速率
为了更清晰地了解到存算分离的插件在OBS中的使用情况，CSS服务新增了OBS实时速率的统计接口，并且将实时速率记录到系统索引".freeze_obs_rate-YYYY.mm.dd"中。
OBS实时速率的计算方式：每5秒计算一次，查询前5秒内的平均OBS操作速率。
系统索引".freeze_obs_rate-YYYY.mm.dd"用于存放OBS操作实时速率和OBS操作数据，便于了解存储冷数据的OBS的操作趋势。该索引的默认保留时间是30天。
1. 查询存储冷数据的OBS实时速率。
   - 执行如下命令，查询所有节点中存储冷数据的OBS实时速率。
     ```
     GET _frozen_stats/obs_rate
     ```
     
   
   - 执行如下命令，查询指定节点中存储冷数据的OBS实时速率。
     ```
     GET _frozen_stats/obs_rate/{node_id}
     ```
     
   
   
   返回示例：
   ```
   {
      "_nodes" : {
        "total" : 1,
        "successful" : 1,
        "failed" : 0
      },
      "cluster_name" : "test",
      "nodes" : {
        "dflDvcSwTJ-fkiIlT2zE3A" : {
          "name" : "node-1",
          "transport_address" : "127.0.0.1:9300",
          "host" : "127.0.0.1",
          "ip" : "127.0.0.1",
          "update_time" : 1671777600482,               // 当前统计值的更新时间
          "obs_rate" : {
            "list_op_rate" : 0.0,                      // obs list操作的速率，单位：次/秒
            "get_meta_op_rate" : 0.0,                  // obs get meta操作的速率，单位：次/秒
            "get_obj_op_rate" : 0.0,                   // obs get操作的速率，单位：次/秒
            "put_op_rate" : 0.0,                       // obs put操作的速率，单位：次/秒
            "obs_total_op_rate" : 0.0,                 // obs所有操作的速率，单位：次/秒    
            "obs_upload_rate" : "0.0 MB/s",            // obs上传数据的速率，MB/秒
            "obs_download_rate" : "0.0 MB/s"           // obs下载数据的速率，MB/秒
          }
        }
      }
    }
   ```
   
2. 修改存储OBS实时速率的索引".freeze_obs_rate-YYYY.mm.dd"的保留时间。索引的默认保留时间是30天。 执行如下命令，将索引保留时间改成7天。
   ```
   PUT _cluster/settings
   {
      "persistent": {
        "low_cost.obs_rate_index.evict_time": "7d"
      }
   }
   ```
   表10参数说明 
   | 参数                                 | 类型     | 默认值 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   |:---|:---|:---|:---|
   | low_cost.obs_rate_index.evict_time | String | 30d | 用于控制各节点中索引".freeze_obs_rate-YYYY.mm.dd"的保留时间。 - 取值范围：1d\~365d  - 单位：d（天）   修改成功后立即生效。 |
      
   
 
#### 相关文档
如果业务需兼顾冷数据的查询性能（如定期检索历史数据），可参见[配置冷热数据切换](https://support.huaweicloud.com/usermanual-css/css_01_0200.html)采用冷热分层方案。
