缓存查询结果
如果您的查询结果不经常变化,您可能希望存储这些结果,以便下次任何人访问该问题时,Metabase 可以检索缓存的结果,而不是再次查询数据库。
例如,如果您的数据每天只更新一次,那么每天查询数据库多次就没有意义,因为数据不会改变。返回缓存结果会显著加快速度,因为您的数据库无需重新计算结果来加载您的问题。
Metabase 中的缓存工作原理
假设您为某个问题设置了缓存策略。您设置了时长策略,规定在某个小时后使结果失效(并清除缓存)。
当您第一次查看该问题时,Metabase 将检查是否有存储的结果。如果没有找到,它将查询您的数据库,返回结果,并存储(缓存)结果。这些结果将在接下来的一个小时内保持有效(根据您设置的一个小时时长策略)。
如果您在半小时后再次运行该问题,Metabase 将返回那些存储的结果。
如果您在初次运行一小时后再次运行该问题,Metabase 将注意到存储的结果比您的缓存策略允许的时间更旧。Metabase 将删除存储的结果,对您的数据库运行查询,返回结果,并将其存储以备将来查询。此缓存将在接下来的一个小时内保持有效,根据您设置的时长策略。要始终在结果过期时刷新缓存,请参阅自动刷新缓存。
查看不同缓存策略如何交互。
缓存失效策略
这些策略决定了缓存结果的有效时长。
时长缓存策略
在一定小时数后使缓存失效并清除缓存。当有人运行查询时,Metabase 将首先检查是否已缓存结果,以及这些结果是否仍然有效。如果无效,Metabase 将对数据库运行查询并缓存结果。这些缓存结果将在您设置的持续时间内保持有效。
计划缓存策略
选择何时定期使缓存失效。Metabase 仅在人们运行查询时存储结果,并根据您在此处设置的计划清除缓存结果。
您可以安排缓存失效:
- 每小时
- 每天
- 每周
- 每月
我们尚未支持农历周期。
自适应缓存策略
使用查询的平均执行时间来确定缓存查询结果的时长。
- 最小查询时长:如果该问题的平均查询执行时间大于此秒数,Metabase 将缓存该问题。
- 乘数:为了确定每个缓存结果应该保留多久,我们将该查询的平均执行时间乘以您在此处输入的值。结果就是缓存应该保持有效的秒数。例如,如果一个问题平均需要 10 秒才能返回结果,并且您将乘数设置为 100,Metabase 将存储缓存 10 x 100 秒:1000 秒(约 16 分钟)。
Metabase 将在每次对数据库运行查询以刷新缓存结果时重新计算查询的平均执行时间。因此,如果 Metabase 第一次对数据库运行查询时,需要 5 分钟才能返回结果,则平均执行时间为 5 分钟。如果下一次对数据库的查询需要 7 分钟才能返回结果,Metabase 会将平均时间更新为 6 分钟(5 和 7 的平均值为 6)。
在专业版和企业版计划中,您可以在使用情况分析集合中查看查询和缓存统计信息。
不缓存结果
如果您为问题、仪表板或数据库选择“不缓存结果”,Metabase 将不会缓存其结果;它将始终对数据库运行查询以刷新结果。
自动刷新缓存
当数据沙盒或连接模拟权限生效时,自动刷新缓存不适用。在这些权限设置中,Metabase 会忽略自动生成的缓存并运行新的查询(然后将其缓存)。因此,对于沙盒和模拟,缓存仍然有效,只是这种预先的自动缓存不适用于这些情况,因为这些权限设置会根据每个查看者过滤数据。
如果您为问题或仪表板打开自动刷新缓存功能,Metabase 将在缓存因您设置的任何缓存策略而失效后立即重新运行查询。通常,Metabase 只会在有人在其缓存过期后查看项目时刷新缓存。因此,通常情况下,当缓存过期时,下一个查看问题的人将不得不等待查询运行并刷新缓存。但通过自动刷新结果以更新缓存,加载时间将始终尽可能快,并且人们将始终获得有效且缓存的结果。
Metabase 在自动刷新缓存时如何处理参数值
当自动刷新结果时,Metabase 将应用默认参数值(如果有)。Metabase 还将缓存多达十个在上一个缓存周期内(由您的缓存策略定义)最常应用的参数值的结果。如果您的提问或仪表板有多个参数,Metabase 将缓存多达十个最常应用的参数值组合的结果。
例如,假设您有一个带有类别筛选器(默认值:Doohickey
)的仪表板,该筛选器设置为每 24 小时缓存一次结果。在过去的 24 小时内,查看该仪表板的人员对类别筛选器应用了以下值:Widget
、Gizmo
。当 Metabase 下次刷新缓存时,它将缓存三组结果,每组应用一个参数:Doohickey
(默认值)、Widget
和Gizmo
。但是,如果在过去的 24 小时内没有人运行该查询,Metabase 将只刷新默认参数值结果的缓存。
自动缓存日志
要查看 Metabase 自动刷新缓存所运行的查询,请查看查询日志,并按Query source
(查询源)筛选cache-refresh
(缓存刷新)。
为仪表板、问题和数据库设置缓存策略
您可以为不同的实体设置缓存策略。
默认缓存策略
要为您的 Metabase 设置默认缓存策略:按 Cmd/Ctrl + k 调出命令面板并搜索 Performance。或者,点击 齿轮 设置图标 > Admin settings(管理设置) > Performance(性能) > Database caching(数据库缓存)。
点击 默认策略 旁边的按钮,然后选择一个缓存失效策略。
数据库缓存策略
与默认缓存策略相同,但您可以为特定数据库设置缓存策略。
如果您的 Metabase 连接的数据库设置为 使用默认 策略,Metabase 将更新显示以反映默认策略的设置。例如,如果您将默认策略设置为“自适应”,Metabase 将显示“自适应”作为那些设置为“使用默认”的数据库的当前策略。
仪表板缓存策略
要为仪表板设置缓存策略,您必须拥有该仪表板集合的管理访问权限。
问题缓存策略
要为问题设置缓存策略,您必须对该问题的集合具有管理访问权限。
仪表板、问题、数据库和默认缓存策略如何交互
如果多个缓存策略影响同一问题,Metabase 将按此顺序使用第一个可用的策略:
- 问题
- 仪表板
- 数据库
- 默认(全站)
问题策略会覆盖仪表板策略,仪表板策略会覆盖数据库策略,数据库策略会覆盖默认策略。
清除缓存
要清除缓存并刷新结果:
- 问题和仪表板:访问项目并点击 信息 > 缓存策略 > 清除缓存(“清除缓存”按钮位于侧边栏底部)。
- 数据库:点击齿轮图标,然后点击 管理设置 > 性能 > 数据库缓存。选择您的数据库并点击清除缓存按钮(页面底部)。
缓存位置
如果您是自托管 Metabase,缓存的问题结果将保存到您的应用程序数据库中。
如果您使用的是 Metabase 云,缓存的问题结果将保存到 Metabase 位于美国的服务器(因为我们的云服务会为您管理您的应用程序数据库)。
进一步阅读
阅读其他Metabase 版本的文档。