缓存查询结果

如果你的问题结果不经常改变,你可能希望存储这些结果,这样下次有人访问该问题时,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 将不会缓存其结果;它将始终针对数据库运行查询以刷新结果。

自动刷新缓存

自动刷新缓存仅在ProEnterprise版本(包括自托管和 Metabase Cloud)中可用。

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

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

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

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

例如,假设你有一个带有类别过滤器的仪表板(默认值:Doohickey),设置为每 24 小时缓存一次结果。在过去的 24 小时内,查看该仪表板的用户为类别过滤器应用了以下值:WidgetGizmo。当 Metabase 下次刷新缓存时,它将缓存三组结果,每组结果应用其中一个参数:Doohickey(默认值)、WidgetGizmo。但是,如果没有人在过去 24 小时内运行该查询,Metabase 将仅为应用了默认参数值的查询刷新缓存。

自动缓存日志

要查看 Metabase 用于自动刷新缓存的查询,请查看查询日志并按cache-refresh过滤Query source

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

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

* 表示ProEnterprise功能。

默认缓存策略

要为您的 Metabase 设置默认缓存策略:按 Cmd/Ctrl + k 打开命令面板并搜索 **Performance**。或者,点击 **Gear** 设置图标 > **Admin settings** > **Performance** > **Database caching**。

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

数据库缓存策略

数据库缓存仅在ProEnterprise版本(包括自托管和 Metabase Cloud)中可用。

Database caching settings in the Admin settings under the Performance tab

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

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

仪表板缓存策略

仪表板缓存仅在ProEnterprise版本(包括自托管和 Metabase Cloud)中可用。

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

  1. 转到您的仪表板。
  2. 点击仪表板右上角的**三个点**图标,然后选择**Edit settings**。
  3. 默认情况下,每个问题将使用数据库默认缓存设置。点击当前缓存策略以更改它。
  4. 选择新的缓存策略
  5. 可选:启用自动刷新缓存
  6. 可选:要清除仪表板上所有问题的缓存,请点击设置侧边栏底部的**Clear cache for this dashboard**。
  7. 保存您的更改。

问题缓存策略

问题缓存仅在ProEnterprise版本(包括自托管和 Metabase Cloud)中可用。

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

  1. 转到您的问题。
  2. 点击三个点菜单 **…** 并选择 **Edit settings**。
  3. 在**Caching**下,选择缓存失效策略
  4. 可选:如果您选择持续时间或计划策略,您将可以选择自动刷新缓存
  5. 保存您的更改。

仪表板、问题、数据库和默认缓存策略的交互方式

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

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

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

清除缓存

要清除缓存并刷新结果

  • 问题和仪表板:访问项目并点击 **Info > Caching policy > Clear cache**(“Clear cache”按钮位于侧边栏底部)。
  • 数据库:点击**Gear**图标,然后点击 **Admin settings** > **Performance** > **Database caching**。选择您的数据库并点击**Clear cache**按钮(位于页面底部)。

缓存位置

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

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

延伸阅读

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

这有帮助吗?

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