为什么在Azure Synapse Analytics中重建表使表查询更快?



最近,我在尝试调整一个存储过程以获得更好的性能时,在Azure Synapse Analytics中发现了一个奇怪的行为。

当我们试图将200 MB的JSON文件解析成Azure Synapse Analytics的表时,我们有一个很慢的性能问题。我将JSON字符串导入到表中,然后使用OPENJSON在其上运行存储过程以解析数据-存储JSON的表称为json_dataset

JSON本身的本质是相当糟糕的,因为目标表的数据可能存储在JSON字符串中的80个不同位置,并且它包含各种嵌套的JSON元素。因此,存储过程很长(大约5000行T-SQL),我不能在这里发布。正常情况下,完成存储过程大约需要20分钟。

当我在json_dataset表上测试分布表类型和索引类型的各种组合时,我认为在表json_dataset重新创建后,存储过程只花了50秒来运行(具有相同的数据大小),如果我再次重新运行存储过程-它需要20分钟。

为什么Azure Synapse Analytics有这种细微差别?

如何使存储过程的后续运行与第一次运行一样具有良好的性能(而不丢弃它)?

您需要启用Result Set Caching

使用以下语法:

SET RESULT_SET_CACHING { ON | OFF };

当结果集缓存启用时,专用SQL池会自动缓存用户数据库中的查询结果,以供重复使用。这允许后续的查询执行直接从持久化缓存中获得结果,因此不需要重新计算。结果集缓存提高了查询性能,减少了计算资源的使用。此外,使用缓存结果集的查询不使用任何并发槽,因此不计入现有的并发限制。出于安全考虑,用户只有在拥有与创建缓存结果的用户相同的数据访问权限时才能访问缓存结果。默认情况下,结果集缓存在数据库和会话级别是关闭的。

有关详细信息,请参阅Microsoft官方文档使用结果集缓存进行性能调优.

最新更新