Oracle到SQL Server数据传输连接瓶颈

时间:2016-02-16 22:26:45

标签: c# sql-server oracle

我每天通过互联网将数百万行数据从Internet数据库导入到本地SQL Server数据库。性能相当低迷(不使用接近我们令人沮丧的本地互联网连接速度20Mbps。)

我正试图找到瓶颈,并找到解决方法。我想我可能已经找到了瓶颈,我认为这是对每个连接的传输速度的限制?

我通过创建一个C#应用程序测试导入速度来发现它,该应用程序使用Oracle的ODP.NET托管驱动程序创建与Oracle的并行连接(我决定在C#中进行测试,因为我更容易理解正在发生的事情)。当我创建五个线程,每个线程从远程Oracle数据库中提取10k条记录时,组合吞吐量大约为80Kbps。当我再次尝试五十个线程,每个线程拉动相同的10k记录时,吞吐量大约为900Kbps。

有没有其他人经历过这种情况......似乎是数据传输速率的每连接限制?除了编写代码以执行一千个线程之外的任何解决方案,每个线程都会提取自己的数据吗?

    class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Starting Import at " + DateTime.Now);
        int rowsPerBatch = 10000;
        int batches = 50;
        List<Task> Tasks = new List<Task>();

            for (int i = 0; i < batches; i++)
            {
                Task mytask = Task.Factory.StartNew<List<DAILY_LOG_DATA>>(() => GetData(i,rowsPerBatch),TaskCreationOptions.LongRunning);
                Tasks.Add(mytask);
            }
            Exception ex = Tasks.First().Exception;
            Task.WaitAll(Tasks.ToArray());            

        Console.WriteLine("Import Finished at " + DateTime.Now);
        Console.ReadLine();
    }
    static List<DAILY_LOG_DATA> GetData(int index, int rowsPerBatch)
    {
        Entities myContext = new Entities();
        myContext.Database.Connection.Open();
        int batchIndex = (int)index;
        List<DAILY_LOG_DATA> toReturn =
            (from a in myContext.DAILY_LOG_DATA
                //orderby a.DLSEQUENCE
                select a).Take(rowsPerBatch).ToList();
        myContext.Dispose();
        return toReturn;
    }
}

编辑:添加了我的简单测试代码集,运行50个同步线程,每个线程检索(可能相同)10k行数据(仅用于测试带宽)

0 个答案:

没有答案