使用dopar时数据库连接间歇性地失败

时间:2019-07-18 12:01:45

标签: r sql-server rodbc

我正在尝试从R访问SQL Server数据库,并且需要使用doSNOW并行化过程以提高吞吐量。在设置集群时,我首先初始化连接,但是对于集群中的某些核心,数据库连接会失败而无需说明。

cl <- makeCluster(10)
registerDoSNOW(cl)
clusterEvalQ(cl, {
  library(RODBC)
  dbhandle <- odbcDriverConnect(%connectionstring%)
})

此代码将显示连接列表,并且在某些连接已成功初始化的同时,其他连接已失败(返回-1)。这是随机发生的,每次运行代码时,不同的连接都会失败。

[[1]]
[1] -1

[[2]]
RODBC Connection 1
Details:
  case=nochange
  DRIVER=SQL Server
  SERVER=redacted
  UID=
  Trusted_Connection=Yes
  WSID=redacted
  DATABASE=redacted

[[3]]
[1] -1

[[4]]
RODBC Connection 1
Details:
  case=nochange
  DRIVER=SQL Server
  SERVER=redacted
  UID=
  Trusted_Connection=Yes
  WSID=redacted
  DATABASE=redacted

1 个答案:

答案 0 :(得分:1)

根据评论,添加sleep(Sys.getpid()/1000)可解决问题

clusterEvalQ(cl, {
  sleep(Sys.getpid()/1000)
  library(RODBC)
  dbhandle <- odbcDriverConnect(%connectionstring%)
})