You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取AWS OpenSearch操作的服务端执行时长(非客户端计时)?

获取AWS OpenSearch操作的服务器端耗时(排除网络延迟)

核心原理

要避免客户端计时带来的网络延迟干扰,必须从OpenSearch服务器端获取操作实际执行的耗时,而非客户端记录的从发起请求到收到响应的总时间。以下是针对你使用awswrangler的场景,不同操作的具体实现方案:

1. 搜索/查询操作(search、search_by_sql)

awswrangler的搜索方法封装了OpenSearch Python客户端的请求,你可以通过获取底层响应的元数据提取服务器端耗时:

针对awswrangler.opensearch.search

  • 基础耗时获取:OpenSearch响应的took字段直接返回服务器端执行总耗时(单位:毫秒):
response = awswrangler.opensearch.search(
    client=self.client,
    index="index_name",
    search_body=any_dsl_query,
    size=100
)
# 提取服务器端执行耗时
server_execution_time = response["took"]
  • 详细执行剖面:在DSL查询中添加profile参数,可获取各阶段的细分耗时(适合性能调优):
profile_query = any_dsl_query.copy()
profile_query["profile"] = True
response_with_profile = awswrangler.opensearch.search(
    client=self.client,
    index="index_name",
    search_body=profile_query,
    size=100
)
# 详细耗时 breakdown 存储在response_with_profile["profile"]中

针对awswrangler.opensearch.search_by_sql

SQL查询的响应同样包含took字段,直接提取即可:

response = awswrangler.opensearch.search_by_sql(
    client=self.client,
    sql_query="SELECT * from index_name limit 100"
)
# 服务器端执行耗时(毫秒)
server_execution_time = response["took"]

2. 删除索引操作(delete_index)

删除索引的服务器端耗时可通过两种方式获取:

  • 直接调用底层客户端:awswrangler的delete_index封装了OpenSearch客户端的indices.delete方法,直接使用底层客户端执行可获取took字段:
# 用OpenSearch原生客户端执行删除并获取耗时
response = self.client.indices.delete(index="index_name")
server_execution_time = response["took"]
  • AWS托管环境指标:如果使用AWS托管的OpenSearch Service,可在CloudWatch中查看DeleteLatency指标,该指标直接反映删除操作的服务器端耗时。

3. 补充说明

  • awswrangler.opensearch.index_csv返回的耗时已包含服务器端处理时间,无需额外处理。
  • 若需长期监控或批量统计,建议开启OpenSearch的慢查询日志、审计日志,或集成CloudWatch Metric Streams收集全面性能数据。

内容的提问来源于stack exchange,提问作者dredbound

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:50:18