计划查询加速
2.17 版本引入
计划查询加速 (SQA) 旨在优化从 OpenSearch 直接发送到外部数据源(例如 Amazon 简单存储服务 (Amazon S3))的查询。它使用自动化来解决在管理和刷新索引、视图和数据时常见的各种问题。
查询加速由二级索引(例如跳过索引、覆盖索引或物化视图)提供支持。查询运行时,它们使用这些索引,而不是直接查询 Amazon S3。
二级索引需要定期刷新,以与 Amazon S3 数据保持同步。此刷新操作可以使用内部调度器(Spark 内部)或外部调度器进行计划。
SQA 提供以下优势
-
通过优化资源使用降低成本:SQA 减少了驱动节点的操作负载,从而降低了维护索引和视图自动刷新相关的成本。
-
提高刷新操作的可观测性:SQA 提供了索引状态和刷新时间的可见性,从而深入了解数据处理和当前系统状态。
-
更好地控制刷新计划:SQA 允许灵活地计划刷新间隔,帮助您根据具体要求管理资源使用和刷新频率。
-
简化索引管理:SQA 允许在单个查询中更新索引设置(例如刷新间隔),从而简化了工作流。
概念
在配置 SQA 之前,请熟悉以下主题
先决条件
在配置 SQA 之前,请验证以下要求已满足
- 确保您正在运行 OpenSearch 2.17 或更高版本。
- 确保您已安装 SQL 插件。SQL 插件包含在大多数 OpenSearch 发行版中。有关更多信息,请参阅安装插件。
- 确保您已配置数据源(在此示例中为 Amazon S3):配置跳过索引、覆盖索引或物化视图。这些辅助数据源是额外的数据结构,通过优化发送到外部数据源(例如 Amazon S3)的查询来提高查询性能。有关更多信息,请参阅使用 OpenSearch 索引优化查询性能。
- 配置 Amazon EMR Serverless(需要访问 Apache Spark)。
配置 SQA 设置
如果要覆盖默认配置值,请更改以下集群设置
- 启用异步查询执行:将
plugins.query.executionengine.async_query.enabled
设置为true
(默认值)PUT /_cluster/settings { "transient": { "plugins.query.executionengine.async_query.enabled": "true" } }
有关更多信息,请参阅设置。
- 配置异步查询的外部调度器间隔:此设置定义了外部调度器检查任务的频率,允许自定义刷新频率。此设置没有默认值:如果此值为空,则默认值来自
opensearch-spark
,为5 minutes
。根据工作负载量调整间隔可以帮助您优化资源和管理成本PUT /_cluster/settings { "transient": { "plugins.query.executionengine.async_query.external_scheduler.interval": "10 minutes" } }
有关更多信息,请参阅设置。
运行加速查询
您可以在查询工作台中运行加速查询。要运行加速查询,请使用以下语法
CREATE SKIPPING INDEX example_index
WITH (
auto_refresh = true,
refresh_interval = '15 minutes'
);
默认情况下,查询使用外部调度器。要使用内部调度器,请将 scheduler_mode
设置为 internal
CREATE SKIPPING INDEX example_index
WITH (
auto_refresh = true,
refresh_interval = '15 minutes',
scheduler_mode = 'internal'
);
参数
使用加速查询创建索引时,您可以在 WITH
子句中指定以下参数,以控制刷新行为、调度和时间。
参数 | 描述 |
---|---|
auto_refresh | 启用索引的自动刷新。如果为 true ,则索引将按指定间隔自动刷新。如果为 false ,则必须使用 REFRESH 语句手动触发刷新操作。默认值为 false 。 |
refresh_interval | 定义索引刷新操作之间的时间量,这决定了新数据摄取到索引中的频率。此设置仅在启用 auto_refresh 时适用。该间隔决定了新数据的集成频率,可以指定为 1 minute 或 10 seconds 等格式。有关有效时间单位,请参阅时间单位。 |
scheduler_mode | 指定自动刷新的调度模式(内部调度或外部调度)。外部调度器需要一个 checkpoint_location (用于刷新作业检查点的路径)进行状态管理。有关更多信息,请参阅启动流式查询。有效值为 internal 和 external 。 |
有关更多信息和附加可用参数,请参阅Flint 索引刷新。
时间单位
定义时间间隔时可以指定以下时间单位
- 毫秒:
ms
、millisecond
或milliseconds
- 秒:
s
、second
或seconds
- 分钟:
m
、minute
或minutes
- 小时:
h
、hour
或hours
- 天:
d
、day
或days
监控索引状态
要监控索引状态,请使用以下语句
SHOW FLINT INDEXES IN spark_catalog.default;
管理计划作业
使用以下命令管理计划作业。
启用作业
要使用内部或外部调度器禁用自动刷新,请将 auto_refresh
设置为 false
ALTER MATERIALIZED VIEW myglue_test.default.count_by_status_v9 WITH (auto_refresh = false);
更新计划
要更新计划并修改刷新设置,请在 WITH
子句中指定 refresh_interval
ALTER INDEX example_index
WITH (refresh_interval = '30 minutes');
切换调度器模式
要切换调度器模式,请在 WITH
子句中指定 scheduler_mode
ALTER MATERIALIZED VIEW myglue_test.default.count_by_status_v9 WITH (scheduler_mode = 'internal');
检查调度器元数据
要检查调度器元数据,请使用以下请求
GET /.async-query-scheduler/_search
最佳实践
使用 SQA 时,我们推荐以下最佳实践。
性能优化
-
推荐的刷新间隔:选择正确的刷新间隔对于平衡资源使用和系统性能至关重要。设置间隔时,请考虑您的工作负载要求和所需数据的时效性。
-
并发作业限制:限制并发运行的作业数量,以避免系统资源过载。监控系统容量并相应调整作业限制,以确保最佳性能。
-
资源使用:高效的资源分配是最大化性能的关键。根据工作负载和正在运行的查询类型,正确分配内存、CPU 和 I/O。
成本管理
-
使用外部调度器:外部调度器分担刷新操作,减少对核心驱动节点的负载。
-
根据您的用例配置刷新间隔:更长的刷新间隔会降低成本,但可能会影响数据时效性。
-
优化刷新计划:根据工作负载模式调整刷新间隔,以减少不必要的刷新操作。
-
监控成本:定期监控与计划查询和刷新操作相关的成本。使用可观测性工具可以帮助您深入了解资源使用情况和随时间变化的成本。
验证设置
您可以通过运行测试查询并验证调度器配置来验证您的设置
SHOW FLINT INDEXES EXTENDED
有关更多信息,请参阅OpenSearch Spark 文档。
故障排除
如果刷新操作未按预期触发,请确保已启用 auto_refresh
设置并正确配置了刷新间隔。