gpt4 book ai didi

r - 了解并行TSQL连接

转载 作者:行者123 更新时间:2023-12-04 08:54:46 25 4
gpt4 key购买 nike

我设法使用以下代码在R中创建了到TSQL服务器的并行连接:

SQL_retrieve <- function(x){
con <- odbcDriverConnect(
'driver={SQL Server};server=OPTMSLMSOFT02;database=Ad_History;trusted_connection=true')

odbcGetInfo(con)
rawData <- sqlQuery(con,
paste("select * from AD_MDL_R_INPUT a where a.itm_lctn_num = ",
facility[x] )) odbcClose(con) return(rawData) }

cl <- makeCluster(5) registerDoParallel(cl)
outputPar <- foreach(j = 1:facility_count, .packages="RODBC")
%dopar% SQL_retrieve(j) stopCluster(cl)
我希望看到所有连接都正在并行地主动下载,但实际情况是一次只能连接一个或两个连接(请参见下图)。
即使使用32个连接,总下载时间也减少了1/2多倍(理论上应该接近1/32,对吧?)。连接事件之间也有很大的停顿。 这是为什么?
Connection Utilization
请注意以下几点:
  • TSQL的 TSQL 服务器和 R 都在同一服务器上,因此网络延迟不是问题。
  • TSQL服务器最多允许约32k的连接,因此我们不会遇到 session 限制问题。

  • 更新7/26/17
    再次解决这个问题,它现在可以工作了(代码不变)。不知道从现在到首次发布之间发生了什么,但可能是对MS SQL Server设置进行了一些更改(不太可能)。
    拉下790万行的时间遵循下图中的曲线。
    Time versus SQL Connections

    最佳答案

    SQL Server使用“连接池”。
    从头开始建立连接需要花费大量时间。
    应用程序将重复进行相同的连接,因此池可提高性能。 SQL将半关闭连接,因此下一个连接将由并由到来启动,并且要快得多。
    您不想在实例中使用池。
    您可以通过添加“pooling = false;”来关闭池。如上所述
    @ rene-lykke-dahl 。那应该解决您的问题。
    了解有关连接池here: 的信息

    关于r - 了解并行TSQL连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38999892/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com