Apache spark 将数据从Databricks加载到Azure SQL时的性能问题

Apache spark 将数据从Databricks加载到Azure SQL时的性能问题,apache-spark,apache-spark-sql,azure-sql-database,databricks,Apache Spark,Apache Spark Sql,Azure Sql Database,Databricks,我正在尝试使用Microsoft最近发布的支持Python API和Spark 3.0的版本,将100万条记录从Databricks中的Delta表加载到Azure SQL数据库 在我看来,表演并不真的很棒。加载100万条记录需要19分钟。下面是我正在使用的代码。你认为我在这里遗漏了什么吗 配置: 8个工作节点,具有28GB内存和8个内核。 Azure SQL数据库是一个4 vcore Gen5 try: df.write \ .format("com.microsoft.

我正在尝试使用Microsoft最近发布的支持Python API和Spark 3.0的版本,将100万条记录从Databricks中的Delta表加载到Azure SQL数据库

在我看来,表演并不真的很棒。加载100万条记录需要19分钟。下面是我正在使用的代码。你认为我在这里遗漏了什么吗

配置: 8个工作节点,具有28GB内存和8个内核。 Azure SQL数据库是一个4 vcore Gen5

try:
  df.write \
    .format("com.microsoft.sqlserver.jdbc.spark") \
    .mode("overwrite") \
    .option("url", url) \
    .option("dbtable", "lending_club_acc_loans") \
    .option("user", username) \
    .option("password", password) \
    .option("tableLock", "true") \
    .option("batchsize", "200000") \
    .option("reliabilityLevel", "BEST_EFFORT") \
    .save()
except ValueError as error :
    print("Connector write failed", error)
我能做些什么来提高性能吗


重新划分数据帧。早些时候,我在源数据帧上有一个分区,重新分区到8有助于提高性能。

重新分区数据帧。早些时候,我的源数据帧上有一个分区,当重新分区为8时,这有助于提高性能。

您确定这是在DataRicks还是Azure SQL端吗?运行此命令时,SQL中的等待类型是什么?您可能只是被SQL端的日志吞吐量限制了—在这种情况下,解决方案是在负载期间放大SQL DB,然后再缩小。我不确定问题出在哪里。我不认为扩展数据库会造成任何差异,因为数据库是一个非常强大的数据库。DB上的I/O非常低且处于控制之下。因此,我假设问题出在Databricks端。与这里的选项有关。你确定数据库吗?从1:39:00开始查看以下内容,以获取有关日志率管理的信息,即使CPU消耗和数据I/O看起来很低,日志率管理仍然会发生。你说的也是。有点帮助。。。CPU和内存等待时间非常短,可以接受。但是网络Io等待时间很长。我刚刚添加了问题的屏幕截图。你确定这是在Databricks还是Azure SQL端吗?运行此命令时,SQL中的等待类型是什么?您可能只是被SQL端的日志吞吐量限制了—在这种情况下,解决方案是在负载期间放大SQL DB,然后再缩小。我不确定问题出在哪里。我不认为扩展数据库会造成任何差异,因为数据库是一个非常强大的数据库。DB上的I/O非常低且处于控制之下。因此,我假设问题出在Databricks端。与这里的选项有关。你确定数据库吗?从1:39:00开始查看以下内容,以获取有关日志率管理的信息,即使CPU消耗和数据I/O看起来很低,日志率管理仍然会发生。你说的也是。有点帮助。。。CPU和内存等待时间非常短,可以接受。但是网络Io等待时间很长。我刚刚添加了问题的屏幕截图。。