Azure Worker角色处理非常缓慢

时间:2016-07-25 08:08:39

标签: c# multithreading azure parallel-processing azure-worker-roles

我有一个C#ETL进程,每周运行一次,完成本地Windows服务器需要6个小时。

这是C#类结构。

源数据库:每次在磁盘上下载Firebird数据库文件,需要20分钟才能下载。

目标:SQL Server(本地)

加载流程步骤在这里。

  1. 做点什么

  2. 做点什么

  3. 执行并行

  4. 我们有5个firebird独立的db文件,可以在5个不同的表上工作,因此将最大并行度设置为5。

    Parallel.ForEach(destTables, new ParallelOptions { MaxDegreeOfParallelism = 5}, (eachtable) =>
                    {
                        var tableName = eachtable.ToString(CultureInfo.InvariantCulture);
                        lock (tableName)
                        {
                            Thread.Sleep(10000);
                            readTable.BulkLoad(tableName, srcConForMainFile, destConForSQL);
                            Thread.Sleep(10000);                        
                        }
    
                    });
    
    1. 做点什么
    2. 完成整个过程
    3. 现在,我将此流程移至Azure辅助角色。

      源数据库:在工作者角色磁盘上下载的Firebird数据库文件(本地存储= 100GB设置在.csdef文件中),需要20-30分钟才能下载,这很好。

      目标数据库:在创建辅助角色的同一区域中创建的S3 Standard(100 DTU)的专用SQL Azure数据库

      我已经设置了一个大型工作人员角色(4核,7 GB RAM,高网络带宽,999 GB磁盘大小),但这个过程需要20个小时才能完成。

      我还注意到CPU利用率在某些时候上升到最高25%,RAM使用高达2.5或3GB。就是这样。

      Parallel.ForEach是否真的在工作者角色VM中工作?

      如何验证工作者角色VM中是否正在执行并行执行?

      我们是否仍应将数据库增加到更高的定价等级?

      是否应该对辅助角色VM进行任何其他设置,以使进程运行得更快 - 6小时对20小时?

0 个答案:

没有答案