“探索”查询跟踪器和“探索”性能面板可提供“探索”查询的分步性能数据。这些数据有助于确定查询性能问题的关键入口点,并提供改进建议。
探索查询跟踪器
在探索查询运行期间,探索查询跟踪器会显示探索查询在三个阶段中的进度。
如果某个查询的执行时间很长,查询跟踪器可以指明是查询的哪个阶段导致了性能问题。这有助于确定可能出现性能问题的位置,以及优化工作最有效的位置。
在“探索”运行时,只要“探索”可视化面板或“探索”数据面板处于打开状态,系统就会显示查询跟踪器。
探索效果面板
如需查看“探索”的效果面板,请点击“查看效果详情”链接,该链接可在已运行的任何“探索”查询中找到。
性能面板会显示查询在每个查询阶段中所花的时间,并包含指向性能文档和查询记录系统活动信息中心的链接。该信息中心会显示查询以及用于创建查询的“探索”的当前和历史性能数据。
查询阶段
当 Looker 探索运行数据库查询时,查询会分三个阶段执行,如下所示:
查询初始化阶段
在查询初始化阶段,Looker 会执行在将查询发送到数据库之前需要完成的所有任务。查询初始化阶段包括以下任务:
- 编译 LookML 模型
- 检查是否需要构建任何永久性派生表 (PDT)
- 生成查询 SQL
- 获取数据库连接
了解查询性能指标文档页面介绍了如何使用系统活动中的查询性能指标“探索”部分查看查询的详细细分信息。查询跟踪器的查询初始化阶段包括查询性能指标“探索”中的异步 worker 阶段、初始化阶段和连接处理阶段中所述的事件。
运行查询阶段
在运行查询阶段,Looker 会连接并查询您的数据库,以便返回查询结果。在此阶段出现的性能问题可能表明外部数据库存在问题,例如 PDT 需要很长时间才能重新构建且可能需要优化,或者外部数据库表可能需要优化。运行查询阶段包括以下任务:
- 在数据库中构建“探索”查询所需的任何 PDT
- 对数据库运行请求的查询
了解查询性能指标文档页面介绍了如何使用系统活动中的查询性能指标“探索”部分查看查询的详细细分信息。查询跟踪器的正在运行的查询阶段包含查询性能指标“探索”的主要查询阶段中所述的事件。
如果您在此阶段遇到性能问题,可以采取的可能步骤包括:
- 请尽可能使用
many_to_one
联接构建探索。从最精细级别到最高详细级别 (many_to_one
) 联接视图通常可提供最佳查询性能。 - 尽可能最大限度地缓存,以便与 ETL 政策同步,从而减少数据库查询流量。默认情况下,Looker 会将查询缓存 1 小时。您可以使用
persist_with
参数在探索中应用 datagroups,从而控制缓存政策并将 Looker 数据刷新与 ETL 流程同步。通过最大限度地缓存,Looker 可以与后端数据流水线更紧密地集成,从而最大限度地提高缓存用量,而不会冒分析过时数据的风险。命名缓存政策可应用于整个模型,也可以应用于单个探索和永久派生表 (PDT)。 - 使用 Looker 的汇总感知功能创建汇总表或摘要表,以便 Looker 尽可能使用这些表进行查询,尤其是对大型数据库的常见查询。您还可以使用汇总感知度来大幅提升整个信息中心的效果。如需了解详情,请参阅“汇总感知”教程。
- 使用 PDT 可加快查询速度。将包含许多复杂联接或性能不佳联接的探索,或包含子查询或子选择的维度转换为 PDT,以便在运行时之前预先联接并准备就绪。
- 如果您的数据库方言支持增量 PDT,请配置增量 PDT,以缩短 Looker 重建 PDT 表所需的时间。
- 避免根据 Looker 中定义的串联主键将视图联接到探索。而是应根据视图中构成串联主键的基础字段进行联接。或者,您也可以将视图重新创建为 PDT,并在表的 SQL 定义(而非视图的 LookML)中预定义串联的主键。
- 使用 SQL Runner 中的“说明”工具进行基准测试。
EXPLAIN
会生成给定 SQL 查询的数据库查询执行计划概览,以便您检测可优化的查询组件。如需了解详情,请参阅如何使用EXPLAIN
优化 SQL 社区帖子。 - 声明索引。您可以直接在 SQL Runner 的 Looker 中查看每个表的索引,只需点击表格中的齿轮图标,然后选择显示索引即可。
最常见的可以受益于索引的列是重要日期和外键。为这些列添加索引可提高几乎所有查询的性能。这也适用于 PDT。您可以适当地应用 LookML 参数,例如
indexes
、sort keys
和distribution
。
处理结果阶段
在处理结果阶段,Looker 会处理和呈现查询结果。处理结果阶段包括以下任务:
- 将查询结果流式传输到缓存
- 解决表计算问题
- 设置 Liquid 模板语言的结果格式
- 合并查询
- 计算总计和小计
了解查询性能指标文档页面介绍了如何使用系统活动中的查询性能指标“探索”部分查看查询的详细细分信息。查询跟踪器的处理结果阶段包含查询效果指标探索的查询后阶段中所述的事件。
如果您在此阶段遇到性能问题,可以采取的可能步骤包括:
- 请谨慎使用合并结果、自定义字段和表计算等功能。这些功能旨在用作概念验证,以帮助您设计模型。最佳实践是在 LookML 中对所有常用的计算和函数进行硬编码,这将生成要在数据库中处理的 SQL。过多的计算可能会争用 Looker 实例上的 Java 内存,导致 Looker 实例响应速度变慢。
- 如果存在大量视图文件,请限制在模型中包含的视图数量。在单个模型中包含所有视图可能会降低性能。如果项目中存在大量视图,请考虑仅在每个模型中添加所需的视图文件。考虑为视图文件名使用战略性命名惯例,以便在模型中包含一组视图。
includes
参数文档中列出了示例。 - 默认情况下,避免在信息中心功能块和主题中返回大量数据点。返回数千个数据点的查询将会消耗更多内存。请务必尽可能对信息中心、数据分析和探索应用前端
过滤条件,并在 LookML 级别使用
required filters
、conditionally_filter
和sql_always_where
参数。 - 请谨慎使用所有结果选项下载或传送查询,因为某些查询可能非常大,在处理时会使 Looker 服务器过载。