【问题标题】:SQL Server BDC Pools and PerformanceSQL Server BDC 池和性能
【发布时间】:2020-10-24 17:25:57
【问题描述】:

针对基于 AKS 的 SQL Server 2019 BDC,我加载了 Flight_delay 数据集,该数据集位于 www.kaggle.com。我想测试各种数据存储的性能,即主实例、数据池、HDFS 存储池和 ADLS 存储池(通过 HDFS 分层)。

针对池 - 数据池、HDFS 存储池和 ADLS 存储池 - 我创建了要访问的外部表,如下面的脚本所示。

Select Count(*)
From [dbo].[Master_Flights]  F
Inner join [dbo].[Master_Airports] A on F.ORIGIN_AIRPORT = A.IATA_CODE
Inner join [dbo].[Master_Airlines] L on F.AIRLINE = L.IATA_CODE
GO

Select Count(*)
From [dbo].[DataPool_Flights]  F
Inner join [dbo].[DataPool_Airports] A on F.ORIGIN_AIRPORT = A.IATA_CODE
Inner join [dbo].[DataPool_Airlines] L on F.AIRLINE = L.IATA_CODE
GO

Select Count(*)
From [dbo].[HDFS_StoragePool_Flights]  F
Inner join [dbo].[HDFS_StoragePool_Airports] A on F.ORIGIN_AIRPORT = A.IATA_CODE
Inner join [dbo].[HDFS_StoragePool_Airlines] L on F.AIRLINE = L.IATA_CODE
GO

Select Count(*)
From [dbo].[adls_StoragePool_Flights]  F
Inner join [dbo].[adls_StoragePool_Airports] A on F.ORIGIN_AIRPORT = A.IATA_CODE
Inner join [dbo].[adls_StoragePool_Airlines] L on F.AIRLINE = L.IATA_CODE
GO

从“最好到最差”的表现:

  1. 主实例 - 2 秒
  2. 数据池 - 16 秒
  3. HDFS 存储池 - 90 秒
  4. ADLS-存储池 - 220 秒

我的测试结果是否符合预期?我希望至少可以为数据池选项获得相当好的性能结果。

如果池中的表的性能如此糟糕,为什么有人要使用它们?

谢谢, 格拉吉

【问题讨论】:

    标签: tsql hdfs query-performance webhdfs sql-server-2019


    【解决方案1】:

    让我们暂时忽略 ADLS - 涉及太多其他内容(区域之间的网络延迟等)。

    这可能是索引或 IO 问题。

    您的 AKS 集群有多大(机器系列和节点数)? 当只针对事实表(航班)运行计数而不加入时,这些数字如何比较? 将 CSV 转换为 parquet 时,HDFS 的性能如何?

    【讨论】:

    • AKS 群集的机器系列是具有 3 个节点的 Standard_E8_v3,我选择了高级磁盘。我没有创建任何索引,因为我希望 Columnstore 索引就足够了。我从 [Master_Flights]、[DataPool_Flights] 和 [HDFS_StoragePool_Flights] 运行了一个计数(*),三个查询花费了 20 秒,[HDFS_StoragePool_Flights] 花了 18 秒。你还有什么要我测试的吗?我将在今天晚些时候尝试使用 Parquet 文件。
    • 我尝试了以下方法,航班数据位于数据池中,当所有表都在数据池中时,它的运行方式只花了 16 秒。与查询主实例中所有表的时间相比,这要多得多 Select Count(*) From [dbo].[Master_Flights] F Inner join [dbo].[Master_Airports] A on F.ORIGIN_AIRPORT = A。 IATA_CODE 内联 [dbo].[Master_Airlines] L on F.AIRLINE = L.IATA_CODE
    • 所以主实例和数据池的 COUNT(*) 都低于 1 秒?
    • 对于存储池,它的 Pod 将在它们登陆的任何工作节点上抓取它们所能获取的一切,因此您最好使用节点标签将特定工作人员专用于存储池 Pod。
    猜你喜欢
    • 2011-06-17
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 2012-06-14
    • 2011-04-24
    • 2014-02-23
    • 1970-01-01
    相关资源
    最近更新 更多