缓存查询结果

如果你的问题结果不经常变化,你可能希望存储结果,以便下次任何人访问该问题时,Metabase 可以检索缓存的结果,而不是再次查询数据库。

例如,如果你的数据每天只更新一次,那么每天查询数据库超过一次就没有意义,因为数据不会改变。返回缓存结果可能会快得多,因为你的数据库不必重新计算结果来加载你的问题。

您可以为问题仪表盘数据库设置缓存失效策略

Metabase 中的缓存工作原理

假设你为一个特定问题设置了一个缓存策略。你设置了一个持续时间策略,该策略规定在一小时后使结果失效(并清除缓存)。

当你第一次查看该问题时,Metabase 会检查是否有存储的结果。如果没有找到,它会查询你的数据库,返回结果,并存储(缓存)结果。这些结果将在接下来的一小时内保持有效(根据你设置的一小时持续时间策略)。

如果你在半小时后运行该问题,Metabase 将返回那些存储的结果。

如果你在首次运行后一个多小时再次运行该问题,Metabase 会注意到存储的结果比你的缓存策略允许的要旧。Metabase 将删除存储的结果,对你的数据库运行查询,返回结果,并为将来的查询存储它们。根据你设置的持续时间策略,这个缓存将在接下来的一小时内保持有效。要总是在结果过期时刷新缓存,请参见自动刷新缓存

查看不同缓存策略如何相互作用

缓存失效策略

这些策略决定了缓存结果保持有效的时长。

持续时间缓存策略

持续时间缓存策略仅适用于 ProEnterprise 方案(包括自托管和 Metabase Cloud)。

在一定小时数后使缓存失效并清除。当有人运行查询时,Metabase 会首先检查是否已缓存结果以及这些结果是否仍然有效。如果无效,Metabase 会对数据库运行查询并缓存结果。这些缓存的结果将在您设置的持续时间内保持有效。

计划缓存策略

计划缓存策略仅适用于 ProEnterprise 方案(包括自托管和 Metabase Cloud)。

选择何时定期使缓存失效。Metabase 仅在人们运行查询时存储结果,并会根据您在此处设置的计划清除缓存的结果。

您可以计划缓存失效时间为:

  • 每小时
  • 每天
  • 每周
  • 每月

我们尚不支持农历周期。

自适应缓存策略

使用查询的平均执行时间来确定缓存查询结果的时长。

  • 最小查询持续时间:如果问题的平均查询执行时间大于此秒数,Metabase 将缓存该问题。
  • 乘数:为了确定每个缓存结果应该保留多长时间,我们取该查询的平均执行时间并乘以您在此处输入的值。结果就是缓存应该保持有效的秒数。例如,如果一个问题平均需要 10 秒返回结果,而您设置的乘数为 100,Metabase 将存储缓存 10 x 100 秒:1000 秒(约 16 分钟)。

每当 Metabase 对数据库运行查询以刷新缓存结果时,它都会重新计算查询的平均执行时间。因此,如果 Metabase 第一次对数据库运行查询需要 5 分钟返回结果,平均执行时间将是 5 分钟。如果下一次对数据库的查询需要 7 分钟返回结果,Metabase 会将平均值更新为 6 分钟(5 和 7 的平均值是 6)。

ProEnterprise 方案中,您可以在使用情况分析集合中查看查询和缓存统计信息。

不缓存结果

如果您为问题、仪表盘或数据库选择“不缓存结果”,Metabase 将不会缓存其结果;它总是会针对数据库运行查询以刷新结果。

自动刷新缓存

自动刷新缓存仅适用于专业版企业版计划(包括自托管和 Metabase Cloud)。

行和列安全连接模拟权限生效时,自动刷新缓存不适用。在这些权限设置中,Metabase 会忽略自动生成的缓存并运行新的查询(然后会缓存该查询)。因此,对于行和列安全及模拟,缓存仍然有效,只是这种抢先的、自动的缓存不适用于这些情况,因为这些权限设置会根据每个查看者过滤特定的数据。

如果您为问题或仪表盘开启自动刷新缓存,Metabase 将在缓存被您设置的任何缓存策略失效后立即重新运行查询。通常,Metabase 仅在有人在缓存过期查看该项目时才刷新缓存。因此,通常情况下,当缓存过期后,下一个查看该问题的人将不得不等待查询运行并刷新缓存。但通过自动刷新结果来更新缓存,加载时间将始终尽可能快,人们将始终获得有效的、缓存的结果。

Metabase 在自动刷新缓存时如何处理参数值

在自动刷新结果时,Metabase 将应用默认参数值(如果有)。Metabase 还会缓存最多十个在上一个缓存周期内(由您的缓存策略定义)最常应用的参数值的结果。如果您的提问或仪表盘有多个参数,Metabase 将缓存最多十个最常应用的参数值组合

例如,假设您有一个带有类别筛选器(默认值为 Doohickey)的仪表盘,设置为每 24 小时缓存一次结果。在过去的 24 小时内,查看该仪表盘的人们应用了以下值到类别筛选器:Widget, Gizmo。当 Metabase 下次刷新缓存时,它将缓存三组结果,每组应用了其中一个参数:Doohickey(默认值)、WidgetGizmo。然而,如果在过去的 24 小时内没有人运行该查询,Metabase 将只刷新应用了默认参数值的结果的缓存。

自动缓存日志

要查看 Metabase 为自动刷新缓存而运行的查询,请查看查询日志,并将查询来源筛选为cache-refresh

为仪表盘、问题和数据库设置缓存策略

您可以为不同的实体设置缓存策略。

* 表示 专业版企业版 功能。

默认缓存策略

要为您的 Metabase 设置默认缓存策略:按 Cmd/Ctrl + k 打开命令面板并搜索性能。或者,点击齿轮设置图标 > 管理员设置 > 性能 > 数据库缓存

点击默认策略旁边的按钮,然后选择一个缓存失效策略

数据库缓存策略

数据库缓存仅在 专业版企业版计划中提供(包括自托管和 Metabase Cloud)。

Database caching settings in the Admin settings under the Performance tab

与默认缓存策略相同,但您可以为特定的数据库设置缓存策略。

如果您有连接到 Metabase 的数据库设置为使用默认策略,Metabase 将更新显示以反映当前的默认策略。例如,如果您将默认策略设置为“自适应”,Metabase 将显示“自适应”作为那些设置为“使用默认”的数据库的当前策略。

仪表盘缓存策略

仪表盘缓存仅在 专业版企业版 计划中提供(包括自托管和 Metabase Cloud)。

要为仪表盘设置缓存策略,您必须对该仪表盘的集合拥有策展访问权限

  1. 转到您的仪表盘。
  2. 点击 信息 图标。
  3. 点击 缓存策略
  4. 选择缓存失效策略
  5. 可选:开启自动刷新缓存
  6. 保存您的更改。

问题缓存策略

问题缓存仅适用于专业版企业版方案(包括自托管和 Metabase Cloud)。

要为一个问题设置缓存策略,你必须对该问题的集合拥有策展访问权限

  1. 转到你的问题。
  2. 点击三点菜单 并选择编辑设置
  3. 缓存下,选择缓存失效策略
  4. 可选:如果您选择“持续时间”或“计划”策略,您将可以选择自动刷新缓存
  5. 保存您的更改。

仪表盘、问题、数据库和默认缓存策略如何交互

如果多个缓存策略影响同一个问题,Metabase 将按以下顺序使用第一个可用的策略:

  1. 问题
  2. 仪表盘
  3. 数据库
  4. 默认(全站)

问题策略会覆盖仪表盘策略,仪表盘策略会覆盖数据库策略,数据库策略会覆盖默认策略。

清除缓存

要清除缓存并刷新结果:

  • 问题和仪表盘:访问该项目,然后点击 信息 > 缓存策略 > 清除缓存(“清除缓存”按钮位于侧边栏底部)。
  • 数据库:点击齿轮图标,然后点击管理员设置 > 性能 > 数据库缓存。选择你的数据库,然后点击清除缓存按钮(在页面底部)。

缓存位置

如果您是自托管 Metabase,缓存的问题结果将保存到您的应用程序数据库中。

如果您正在使用 Metabase Cloud,缓存的问题结果将保存到位于美国的 Metabase 服务器上(因为我们的云服务为您管理应用程序数据库)。

延伸阅读

阅读其他版本的 Metabase 的文档。

这有帮助吗?

感谢您的反馈!
想改进这些文档吗? 提出更改建议。
© . This site is unofficial and not affiliated with Metabase, Inc.