使用 dopar 时数据库连接间歇性失败
database connection intermittently fails when using dopar
我正在尝试从 R 访问 SQL 服务器数据库,并且需要使用 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
根据评论,添加 sleep(Sys.getpid()/1000)
解决了问题
clusterEvalQ(cl, {
sleep(Sys.getpid()/1000)
library(RODBC)
dbhandle <- odbcDriverConnect(%connectionstring%)
})
我正在尝试从 R 访问 SQL 服务器数据库,并且需要使用 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
根据评论,添加 sleep(Sys.getpid()/1000)
解决了问题
clusterEvalQ(cl, {
sleep(Sys.getpid()/1000)
library(RODBC)
dbhandle <- odbcDriverConnect(%connectionstring%)
})