sql - Synapse 专用池查询运行缓慢

标签 sql azure azure-synapse dedicated

我已经设置了 Synapse 工作区,并在 DW100c 上运行专用池。

问题是我的数据集非常小 - 我正在创建一些维度和事实,最大的事实约为 300,000 条记录。尺寸要小得多。

我们使用的是 Azure SQL 数据库,并希望迁移到 Synapse。我们在 SQL 数据库(2 核)中运行的一些存储过程大约需要 2 分钟,而在 Synapse 中则需要 6-7 分钟。

我不明白 SYnapse 专用池是否更高级,为什么我的查询需要更长的时间?如果我将其扩展到 500 是的,它确实会加速,但这肯定不是答案吗?我在必要的地方使用循环/复制/哈希创建了表。

问题是我的数据集对于 Synapse 专用池来说太小了吗?

最佳答案

只要您在开始查询之前更新统计信息,即使循环分配中只有 300K 记录,Synapse 专用 SQL 池仍然应该很快,因为第一个查询将启动全表扫描。

当您使用哈希分布时,请记住选择一个可以相当均匀地分布在 60 个节点上的分布键...这意味着不要选择仅具有几个唯一值和/或大量空值的键。

确保您的维度表都是复制分布。

了解您的数据库被分为 60 个不同的数据库节点,因此如果您在特定分布键(例如 ProductID = 90099)上使用 WHERE 子句查询任何内容,则 60 个节点中只有 1 个会执行任何工作。在 DW100c 上,处理能力并不强。选择不同的分发 key ,以便您可以利用并行处理功能。

您可以尝试在事实表上设置一些聚集索引和非聚集索引,并确保在更新事实表后更新统计信息。

我通常会避免 HASH 分布,除非我有一个包含 80M 到 100M 行或更多的表,因为行组是在 60 个节点中的每个节点上生成的,并且为了进行压缩,您需要每个行组具有 1M 条记录。

关于sql - Synapse 专用池查询运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72991848/

相关文章:

mysql - 如何在mysql查询中显示 "repost"之类的转发?

azure - 在 Azure 上找不到资源组 '$system'

azure - Spacy无法加载模型: en_core_web_md in Azure databricks

python - azure api 需要更好的方法来处理大量数据

azure - azure 突触中 Spark 笔记本管道中的文件路径错误

sql - 如何在 Azure SQL 数据仓库中解析 JSON 格式的字符串?

php - Sql:跨多个表的唯一字段约束(slug)(doctrine/symfony)

mysql - 通过给定的选择将客户与供应商联系起来

php - 如果变量在 SQL 表中

sql - Azure Synapse Analytics(以前称为 SQL SW)与 Azure Synapse Analytics(工作区预览)