缓存查询结果
如果您的查询结果不会频繁更改,您可能希望存储结果,以便下次任何人访问该问题时,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 将缓存最多十个最常用的参数值组合。
例如,假设您有一个仪表盘,其中包含一个类别筛选器(默认值:Doohickey
),设置为每 24 小时缓存结果。在过去的 24 小时内,查看该仪表盘的人员将以下值应用于类别筛选器:Widget
、Gizmo
。当 Metabase 下次刷新缓存时,它将缓存三组结果,每组结果都应用了这些参数之一:Doohickey
(默认值)、Widget
和Gizmo
。但是,如果在过去的 24 小时内没有人运行查询,Metabase 将仅刷新具有应用默认参数值的结果的缓存。
自动缓存日志
要查看 Metabase 运行以自动刷新缓存的查询,请查看查询日志,并按cache-refresh
筛选Query source
。
为仪表盘、问题和数据库设置缓存策略
您可以为不同的实体设置缓存策略。
默认缓存策略
要为您的 Metabase 设置默认缓存策略:按 Cmd/Ctrl + k 调出命令面板并搜索性能。或者,单击齿轮设置图标 > 管理设置 > 性能 > 数据库缓存。
单击默认策略旁边的按钮,然后选择缓存失效策略。
数据库缓存策略
与默认缓存策略相同,但您可以为特定数据库设置缓存策略。
如果您连接到 Metabase 的数据库设置为使用默认策略,Metabase 将更新显示以反映设置的默认策略。例如,如果您将默认策略设置为“自适应”,Metabase 将显示“自适应”作为设置为“使用默认”的那些数据库的当前策略。
仪表盘缓存策略
要为仪表盘设置缓存策略,您必须具有对仪表盘集合的策展访问权限。
问题缓存策略
要为问题设置缓存策略,您必须具有对问题集合的策展访问权限。
仪表盘、问题、数据库和默认缓存策略如何交互
如果多个缓存策略影响同一问题,Metabase 将按以下顺序使用第一个可用的策略
- 问题
- 仪表盘
- 数据库
- 默认(站点范围)
问题策略会覆盖仪表盘策略,仪表盘策略会覆盖数据库策略,数据库策略会覆盖默认策略。
清除缓存
要清除缓存并刷新结果
- 问题和仪表盘:访问该项目,然后单击信息 > 缓存策略 > 清除缓存(“清除缓存”按钮位于侧边栏底部)。
- 数据库:单击齿轮图标,然后依次单击管理设置 > 性能 > 数据库缓存。选择您的数据库,然后单击清除缓存按钮(位于页面底部)。
缓存位置
如果您是自托管 Metabase,则缓存的问题结果将保存到您的应用程序数据库中。
如果您正在使用 Metabase 云,则缓存的问题结果将保存到 Metabase 在美国的服务器中(因为我们的云服务为您管理您的应用程序数据库。)
延伸阅读
阅读其他Metabase 版本的文档。