缓存查询结果
如果您的查询结果不经常变化,您可能希望存储这些结果,以便下次有人访问该问题,Metabase可以检索缓存的而不是再次查询数据库的结果。
例如,如果您的数据每天只更新一次,就没有必要每天查询数据库多次,因为数据不会改变。返回缓存的结果可以更快,因为您的数据库不需要重新计算结果来加载您的问题。
Metabase中缓存的工作原理
假设您为特定问题设置了一个缓存策略。您设置了持续时间策略,表示在一小时后使结果失效(并清除缓存)。
当您首次查看问题时,Metabase会检查存储的结果。如果找不到任何结果,它将对您的数据库进行查询,返回结果,并将结果存储(缓存)。这些结果将在下一小时(根据您设置的1小时持续时间策略)内有效。
如果您在半小时后运行该问题,Metabase将返回这些存储的结果。
如果您在首次运行后超过一小时运行该问题,Metabase会注意到存储的结果比您的缓存策略允许的要旧。Metabase将删除存储的结果,针对数据库运行查询,返回结果,并为未来的查询存储它们。根据您设置的持续时间策略,此缓存将在下一小时内有效。
看看不同的缓存策略如何交互。
缓存失效策略
这些策略决定了缓存结果将保持有效的时间。
持续时间缓存策略
在指定的小时数后使缓存失效并清除缓存。当有人运行查询时,Metabase首先会检查它是否已缓存结果以及这些结果是否仍然有效。如果不是,Metabase将对数据库运行查询并缓存结果。这些缓存结果将保持有效,直到您设置的持续时间。
计划缓存策略
选择定期使缓存失效的时间。Metabase仅在有人运行查询时存储结果,并根据您在此处设置的计划清除缓存结果。
您可以安排缓存失效
- 每小时
- 每日
- 每周
- 每月
我们目前不支持农历周期。
自适应缓存策略
使用查询的平均执行时间来确定查询结果的缓存时间。
- 最小查询持续时间:如果该问题的平均查询执行时间大于此秒数,Metabase将缓存该问题。
- 乘数:为了确定每个缓存结果应保持多长时间,我们取该查询的平均执行时间并将其乘以您在此处输入的值。结果是缓存应保持有效的秒数。例如,如果一个问题平均需要10秒来返回结果,并且您设置了乘数为100,Metabase将存储缓存10 x 100秒:10,000秒(约16分钟)。
每当Metabase在数据库上运行查询以刷新缓存结果时,它都会重新计算查询的平均执行时间。所以如果Metabase第一次在数据库上运行查询,它需要5分钟来返回结果,平均执行时间将是5分钟。如果下一次对数据库的查询需要7分钟来返回,Metabase将更新平均值为6分钟(5和7的平均值是6)。
在Pro和企业计划上,您可以在使用分析集合中查看查询和缓存统计信息。
不缓存结果
如果您为问题、仪表板或数据库选择“不缓存结果”,Metabase将不会缓存其结果;它将始终对数据库运行查询以刷新结果。
为仪表板、问题和数据库设置缓存策略
您可以针对不同实体设置缓存策略。
默认缓存策略
要为您的 Metabase 设置默认缓存策略:按住 Cmd/Ctrl + k 打开命令面板并搜索 性能。或者,点击 齿轮 设置图标 > 管理员设置 > 性能 > 数据库缓存。
点击 默认策略 旁边的按钮,并选择一个 缓存失效策略。
数据库缓存策略
与默认缓存策略相同,尽管您可以针对特定数据库设置缓存策略。
如果您连接到 Metabase 的数据库已设置为 使用默认 策略,Metabase 将更新显示以反映默认策略设置的值。例如,如果您将默认策略设置为“自适应”,则 Metabase 将显示“自适应”作为设置为“使用默认”的数据库的当前策略。
仪表板缓存策略
要为仪表板设置缓存策略,您必须具有仪表板集合的 编审访问权限。
- 前往您的仪表板。
- 点击 信息 图标。
- 点击 缓存策略。
- 选择 缓存失效策略。
- 保存您的更改。
问题缓存策略
要为问题设置缓存策略,您必须具有问题集合的 编审访问权限。
- 前往您的问题。
- 点击 信息 图标。
- 点击 缓存策略。
- 选择 缓存失效策略。
- 保存您的更改。
仪表板、问题、数据库和默认缓存策略的交互
如果多个缓存策略影响相同的问题,Metabase 将按照此顺序使用第一个可用的策略
- 问题
- 仪表板
- 数据库
- 默认(全局)
问题策略会覆盖仪表板策略,仪表板策略会覆盖数据库策略,数据库策略会覆盖默认策略。
清除缓存
要清除缓存并刷新结果
- 问题和仪表板:访问项目并点击 信息 > 缓存策略 > 清除缓存(“清除缓存”按钮位于侧边栏底部)。
- 数据库:点击 齿轮 图标,然后点击 管理员设置 > 性能 > 数据库缓存。选择您的数据库,然后点击页面底部的 清除缓存 按钮。
缓存位置
如果您自托管 Metabase,则缓存的查询结果将保存到您的 应用程序数据库。
如果您使用 Metabase 云服务,则缓存的查询结果将保存到位于美国的 Metabase 服务器上(因为我们的云服务为您管理应用程序数据库)。
进一步阅读
阅读关于其他 Metabase 版本 的文档。