有没有办法运行带有更大超时连接的.vbs文件?
背景:
我正在使用Excel VBA将数据上传到Teradata。创建一个insert语句然后用rs.Execute()执行它相对容易。
但是,对于大约80k行,这需要大约一个小时才能运行。我想到了两种可能的加速。
1)一次向rs.Execute()发送多行(比如500),用分号分隔,让Teradata并行插入它们。
2)一次发送多个插入请求,而不等待第一个插入请求完成。这在VBA中很难,因为不支持多线程并且rs.Execute是阻塞的。因此,为了解决这个问题,我创建了包含此内容的.vbs文件:
Dim rs
Set rs = CreateObject("ADODB.Recordset")
constr = "Driver={Teradata};commandTimeout=0;DBCNAME=xx;UID=xx;PWD=xx;"
rs.Open "insert statement1;insert statement2;", constr, adOpenForwardOnly
我脱掉了一堆那些。但是,如果我一次发送太多数据,它会超时(Teradata有一个30秒的超时查询以这种方式运行。“commandTimeout”似乎没有任何影响,无论我将它设置为0或1200或其他什么。我无法找到合适的大小数据包来插入,因为Teradata上的负载在一天中随着使用而不断变化。有时500个工作正常,有时只有15个在30秒超时下停留。
答案 0 :(得分:0)
commandTimeout的默认值为零,表示无限: - )
你确定它是超时而不是由于死锁而导致的回滚吗?当您进行多个会话时,可能会被迫使用单行插入(基于您的数据)。
我不知道这是否可以在VBA中使用,但使用ODBC可以使用Parameter Arrays
更有效地发送数据