缓存查询结果

如果您的查询结果不会频繁更改,您可能希望存储结果,以便下次任何人访问该问题时,Metabase 可以检索缓存的结果,而不是再次查询数据库。

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

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

Metabase 中的缓存工作原理

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

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

如果您在半小时后再次运行该问题,Metabase 将返回这些存储的结果。

如果您在初始运行一小时后运行该问题,Metabase 将注意到存储的结果比您的缓存策略允许的时间更长。Metabase 将删除存储的结果,针对您的数据库运行查询,返回结果,并为将来的查询存储它们。此缓存将在接下来的一个小时内保持有效,根据您设置的持续时间策略。要始终在结果过期时刷新缓存,请参阅自动刷新缓存

了解不同的缓存策略如何交互

缓存失效策略

这些策略确定缓存结果保持有效的时间。

持续时间缓存策略

持续时间缓存策略仅在专业版企业版计划(自托管和 Metabase 云)上可用。

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

计划缓存策略

计划缓存策略仅在专业版企业版计划(自托管和 Metabase 云)上可用。

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

您可以安排缓存失效

  • 每小时
  • 每日
  • 每周
  • 每月

我们尚不支持农历周期。

自适应缓存策略

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

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

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

专业版企业版计划中,您可以在使用情况分析集合中查看查询和缓存统计信息。

不缓存结果

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

自动刷新缓存

自动刷新缓存仅在专业版企业版计划(自托管和 Metabase 云)上可用。

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

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

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

例如,假设您有一个仪表盘,其中包含一个类别筛选器(默认值:Doohickey),设置为每 24 小时缓存结果。在过去的 24 小时内,查看该仪表盘的人员将以下值应用于类别筛选器:WidgetGizmo。当 Metabase 下次刷新缓存时,它将缓存三组结果,每组结果都应用了这些参数之一:Doohickey(默认值)、WidgetGizmo。但是,如果在过去的 24 小时内没有人运行查询,Metabase 将仅刷新具有应用默认参数值的结果的缓存。

自动缓存日志

要查看 Metabase 运行以自动刷新缓存的查询,请查看查询日志,并按cache-refresh筛选Query source

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

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

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

默认缓存策略

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

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

数据库缓存策略

数据库缓存仅在专业版企业版计划(自托管和 Metabase 云)上可用。

Database caching settings in the Admin settings under the Performance tab

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

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

仪表盘缓存策略

仪表盘缓存仅在专业版企业版计划(自托管和 Metabase 云)上可用。

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

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

问题缓存策略

问题缓存仅在专业版企业版计划(自托管和 Metabase 云)上可用。

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

  1. 转到您的问题。
  2. 单击信息图标。
  3. 单击缓存策略
  4. 选择缓存失效策略
  5. 可选:启用自动刷新缓存
  6. 保存您的更改。

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

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

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

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

清除缓存

要清除缓存并刷新结果

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

缓存位置

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

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

延伸阅读

阅读其他Metabase 版本的文档。