Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么从R到Azure SQL Server的写入速度非常慢_R_Azure_Odbc - Fatal编程技术网

为什么从R到Azure SQL Server的写入速度非常慢

为什么从R到Azure SQL Server的写入速度非常慢,r,azure,odbc,R,Azure,Odbc,我正在尝试在Azure托管实例/Sql Server DB中构建一些数据存储库。从R/RStudio上看,写过程如此之慢让我感到震惊。例如,将表写入Azure需要65分钟,而将其写入本地机器Sql Server只需不到一分钟 不管列的数量如何,它似乎每秒写入大约20行(如果我在SSMS中刷新一个查询,每次运行时它都会添加大约20行) 我在其他线程中读到,这可能是由于性能层。我看到了B层、A层和P层的情况。我在我们的客户中看到的关于分层的唯一信息是“通用”和“业务关键型”。我们有8核的通用(Gen

我正在尝试在Azure托管实例/Sql Server DB中构建一些数据存储库。从R/RStudio上看,写过程如此之慢让我感到震惊。例如,将表写入Azure需要65分钟,而将其写入本地机器Sql Server只需不到一分钟

不管列的数量如何,它似乎每秒写入大约20行(如果我在SSMS中刷新一个查询,每次运行时它都会添加大约20行)

我在其他线程中读到,这可能是由于性能层。我看到了B层、A层和P层的情况。我在我们的客户中看到的关于分层的唯一信息是“通用”和“业务关键型”。我们有8核的通用(Gen5)和512 GB的存储空间,其中我们的利用率不到10%。从R执行其中一个写入操作时,CPU的总利用率低于1%

我能够快速地将Azure中的表格读回R/RStudio。只有写作受到严重阻碍


所有这些都让人感觉到它的速度比它应该的要慢得多,好像有节流效应或其他什么。它太慢了,以至于我无法在那里有效地获取历史数据——我昨晚让几个东西运行,它们都超时了。

从经验和主观上看,我发现R中的大多数驱动程序的写入性能比预期的慢得多,尽管对我来说它没有低到20/秒。对于较大的插入/查询,我使用
sqlcmd
二进制文件进行批量复制。对我来说,
data.table::fwrite
然后
processx::run
的处理速度要快得多,值得花一点代码开销。(副好处,我可以使用PersX::进程$New,并允许它在后台运行,允许我返回到其他R工作。)如果由于某种原因,R到Azure将是缓慢的(即使R到非Azure SQL Server不是),那么我会考虑这样做。我可能不会使用
processx
从R运行,而只是计划一个批处理文件或其他东西。我以前没有使用过
sqlcmd
。我知道了如何连接到数据库,但没有找到如何从文本文件创建表的语法。您有示例吗?我不使用
sqlcmd
(或
bcp
)创建表。按照我的工作方式,我有R包装器代码“设置”我需要的一切(包括创建表,如果需要),然后使用
sqlcmd
上传数据。关于
processx
,这比从R启动流程时的
system
好得多(IMO)(更不用说我可以从R对其进行后台处理并根据需要进行监视/杀死)。你能和我分享一下你是如何使用sqlcmd上传数据的吗?我明白你所说的关于使用R创建表等的内容。虽然这不是我最初问题的重点,但我想测试一下其他东西,看看是否有显著的性能改进谢谢。这对我来说不起作用,但我的问题是得到认证。它将db转换为多因素身份验证,我一直在努力使其在各种活动中发挥作用。从经验和主观上看,我发现大多数驱动程序在R中的写入性能比预期的慢得多,尽管对我来说,它没有低到20/秒。对于较大的插入/查询,我使用
sqlcmd
二进制文件进行批量复制。对我来说,
data.table::fwrite
然后
processx::run
的处理速度要快得多,值得花一点代码开销。(副好处,我可以使用PersX::进程$New,并允许它在后台运行,允许我返回到其他R工作。)如果由于某种原因,R到Azure将是缓慢的(即使R到非Azure SQL Server不是),那么我会考虑这样做。我可能不会使用
processx
从R运行,而只是计划一个批处理文件或其他东西。我以前没有使用过
sqlcmd
。我知道了如何连接到数据库,但没有找到如何从文本文件创建表的语法。您有示例吗?我不使用
sqlcmd
(或
bcp
)创建表。按照我的工作方式,我有R包装器代码“设置”我需要的一切(包括创建表,如果需要),然后使用
sqlcmd
上传数据。关于
processx
,这比从R启动流程时的
system
好得多(IMO)(更不用说我可以从R对其进行后台处理并根据需要进行监视/杀死)。你能和我分享一下你是如何使用sqlcmd上传数据的吗?我明白你所说的关于使用R创建表等的内容。虽然这不是我最初问题的重点,但我想测试一下其他东西,看看是否有显著的性能改进谢谢。这对我来说不起作用,但我的问题是得到认证。它将数据库转换为多因素身份验证,我一直在努力使其在各种活动中都能正常工作。