加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

并非所有TSQL连接都是并行使用的

发布时间:2020-12-12 07:25:41 所属栏目:MsSql教程 来源:网络整理
导读:我已成功使用以下代码在R中成功创建到TSQL服务器的并行连接: SQL_retrieve - function(x){ con - odbcDriverConnect( 'driver={SQL Server};server=OPTMSLMSOFT02;database=Ad_History;trusted_connection=true') odbcGetInfo(con) rawData - sqlQuery(con,p
我已成功使用以下代码在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服务器和R都在同一台服务器上,因此网络延迟不是问题.
> TSQL服务器允许最多约32k的连接,因此我们不会遇到会话限制问题.

更新7/26/17
再次尝试这个问题,它现在可以工作(代码不变).不确定从现在到最初发布之间发生了什么,但可能对MS SQL服务器设置进行了一些更改(不太可能).

拉动790万行的时间遵循下图中的曲线.

解决方法

SQL Server使用“连接池”.通常,连接需要花费大量时间从头开始建立.此外,在实践中,应用程序将重复相同的连接,因此池化可提高性能.在某种程度上,SQL半关闭连接,因此下一个连接将从一个支持开始,并且发生得更快.

有时您可能不想使用池,这可能是其中之一.通过添加“pooling = false;”来关闭池化如上所述
@ rene-lykke-dahl应该解决这个问题.

您可以在此处找到有关连接池的更多信息.

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读