我在源(1200万)和目标(12百万)中有2400万条记录,我正在尝试比较源和目标之间的记录。
错误:
超时已过期。在完成之前经过了超时时间 操作
当我为Test method
运行我的once
时,它工作正常,但是当我并行运行它(thrice
)时,我的错误就越来越多了。
我可以将超时增加到更多,但我已经读到设计真的很糟糕并且增加超时的坏主意。
我无法理解这背后的原因,即如何通过调用Test method once
和why it is failing when it is called thrice
来正常工作。
有了这个,我试图测试数据库服务器可以处理的数量,如果我提交大量的比较工作,如下所示:
代码:
static void Main(string[] args)
{
Task<string>[] taskArray = { Task<string>.Factory.StartNew(() =>Test()),
Task<string>.Factory.StartNew(() => Test()),
Task<string>.Factory.StartNew(() => Test())
};
}
public static string Test()
{
var srcConnection = new SqlConnection("SourceConnectionString");
srcConnection.Open();
var command1 = new SqlCommand("Source Sql Query", srcConnection);
var tgtConnection = new SqlConnection("TargetConnectionString");
tgtConnection.Open();
var command2 = new SqlCommand("Target Sql Query", tgtConnection);
var drA = GetReader(srcConnection, command1);
var drB = GetReader(tgtConnection, command2);
bool moreA = drA.Read();
bool moreB = drB.Read();
while (moreA && moreB)
{
//my logic for 1 - 1 record comparision in case of ordered record on Primary key on source and target.
}
}
private static IDataReader GetReader(SqlConnection con, SqlCommand command)
{
command.CommandTimeout = 1000;
return command.ExecuteReader();
}
我无法理解虽然我已将超时设置为1000秒,但为什么失败。
Task<string>[] taskArray = { Task<string>.Factory.StartNew(() => Test())//Works fine
Task<string>[] taskArray = { Task<string>.Factory.StartNew(() =>Test()),
Task<string>.Factory.StartNew(() => Test()),
Task<string>.Factory.StartNew(() => Test())
};//Timeout Error
来源查询: select Id as LinkedColumn,CompareColumn from Source
目标查询: select Id as LinkedColumn,CompareColumn from Target
源查询Sql server management studio中12377200记录的执行时间: 零点02分10秒
目标查询在Sql server management studio中执行12266800条记录的执行时间: 0点03分37秒
考虑到我想要做什么,处理这种情况的最佳方法是什么?