我试图从远程sql Server检索大约2000亿行.为了优化这一点,我限制了我的查询只使用索引列作为过滤器,并且只选择列的子集以使查询看起来像这样:
SELECT ColA,ColB,ColC FROM <Database> WHERE RecordDate BETWEEN '' AND ''
但看起来除非我将查询限制在几个小时的时间窗口,查询在所有情况下都会失败并出现以下错误:
OLE DB provider "sqlNCLI10" for linked server "<>" returned message "Query timeout expired". Msg 7399,Level 16,State 1,Server M<,Line 1 The OLE DB provider "sqlNCLI10" for linked server "<>" reported an error. Execution terminated by the provider because a resource limit was reached. Msg 7421,State 2,Server <>,Line 1 Cannot fetch the rowset from OLE DB provider "sqlNCLI10" for linked server "<>".
由于执行查询计划所需的时间,超时可能是一个问题.因为我无法控制服务器,所以我想知道是否有一种很好的方法来检索这些数据,而不是我正在使用的简单SELECT.我可以使用任何特定于sql Server的技巧吗?也许告诉远程服务器对数据进行分页而不是发出多个查询或其他什么?关于如何改进这个的任何建议?
解决方法
这更像是
SSIS适合的工作.即使像ReadFromOleDbSource-> WriteToOleDbSource这样的简单流程也可以处理这个问题,为您创建必要的批处理.