此问题与Redshift中的结果缓存和查询编译缓存有关。
我正在对查询的执行时间进行基准测试。我昨天运行了同一组查询以测试查询编译缓存,它们以毫秒为单位运行。今天,我尝试再次测试执行时间,但启用会话缓存并检查执行时间以进行后续运行。今天的执行时间比昨天要多。
问题
P.S。我读了很多有关查询编译缓存和结果缓存的文章和帖子,但是没有找到任何具体答案。
感谢和问候。
答案 0 :(得分:0)
您需要考虑查询编译时间和结果缓存,它们是完全不同的东西。
SQL“模板”的首次运行运行较慢,因为redshift必须对其进行优化(编译)。我认为清除此编译的唯一方法是重新启动redshift。
结果缓存是完全不同的,如果重新运行完全相同的sql,则结果缓存将在打开时返回结果。
例如给定查询
select * from table where xyz='example1';
第一次运行将编译查询,因此将花费更长的时间。此过程取决于sql的复杂性,非常复杂的sql可能需要30秒才能编译。
如果您打开了查询结果缓存,则再次运行完全相同的查询
select * from table where xyz='example1';
可能需要100毫秒或更短的时间(如果结果很大,则不包括网络时间)
但是,如果您运行类似的查询,例如 从xyz ='example 2 ';
的表中选择*这不能使用结果缓存,但是可以使用第一个查询的编译版本,因此它将高效运行。
如果要运行其他查询,例如
select * from table where xyz='example1' order by 1 desc;
然后将不使用缓存,并且需要进行编译。
因此,为了进行适当的基准测试,请关闭结果缓存,但丢弃任何给定查询模式的第一次运行。