问题 #1
一位数据工程师正在调查一个耗时过长的查询。查询分析结果如下:
" target="_blank" rel="nofollow noopener">https://img.examtopics.com/snowpro-advanced-data-engineer/image1.png">
工程师应该采取什么措施来提高查询性能?
答案: B
本题考察Snowflake查询性能调优的核心实践,题目中未给出查询逻辑存在冗余、语法缺陷等相关提示,默认慢查询是由计算量、数据扫描量过大导致资源不足引发。根据SnowPro Advanced Data Engineer认证要求的核心知识,针对此类单查询过慢的场景,最直接有效的措施是提升运行该查询的虚拟仓库规模,虚拟仓库的规模直接对应分配给查询的CPU、内存、IO资源,规模每提升一级资源翻倍,可大幅提升大查询的并行处理能力,缩短执行时间,符合题干需求。
各选项分析:
A. 添加更多虚拟仓库是错误的。Snowflake中每个查询只能运行在单个虚拟仓库上,新增虚拟仓库的作用是隔离不同工作负载、提升整体并发处理能力,无法为当前的单个慢查询提供更多资源,因此不能提升该查询的性能。
B. 增加虚拟仓库的规模是正确的。Snowflake虚拟仓库采用T-shirt型规格定义,更高规格的仓库拥有更多的计算节点和资源,针对扫描量大、计算复杂的慢查询,可并行处理更多数据,有效缩短执行时间,是Snowflake官方推荐的单慢查询调优核心手段之一。
C. 使用公共表表达式(CTE)重写查询是错误的。Snowflake的查询优化器会对CTE和等效的子查询、临时表逻辑做等同优化,除非原查询存在大量重复计算的冗余逻辑,而题目未给出查询逻辑存在此类问题的提示,因此该措施不具备针对性,无法解决题干中的慢查询问题。
D. 改变连接的顺序,先从较小的表开始是错误的。Snowflake内置基于代价的优化器(CBO),会自动收集表的统计信息,自动选择最优的连接顺序和连接算法,手动调整连接顺序不仅无法保证提升性能,反而可能干扰优化器的判断,不符合Snowflake的性能调优最佳实践。
关键知识点:
1. Snowflake虚拟仓库规格特性:虚拟仓库的T-shirt规格直接决定其可用计算、内存、IO资源,每提升一级规格资源翻倍,更高规格的仓库可显著提升单条大查询的执行效率。
2. Snowflake虚拟仓库隔离性:不同虚拟仓库之间资源完全隔离,新增虚拟仓库仅能提升整体工作负载的并发处理能力,无法加速单个查询的执行速度。
3. Snowflake查询优化器能力:Snowflake内置基于代价的优化器,会自动根据表元数据、统计信息生成最优执行计划,无需用户手动调整连接顺序等查询语法层面的逻辑。
参考资料:
Virtual Warehouse Sizes, https://docs.snowflake.com/en/user-guide/warehouses-overview#warehouse-sizes
Query Performance Tuning