2015-06-08 16 views
1

我的方案,我將要同時運行的查詢對600-800的生產數據庫控制檯程序。它運行的機器有16個內核,都可以通過TPL同時使用。我也可以通過使用異步等待技術來獲得性能改進。 600-800數據庫是跨越30個不同的服務器,所以理想情況下我想盡可能多地同時進行查詢。在處理過程中,我希望每個核心的利用率在70-90%之間。我可以使用async-await獲取這些利用率數字。我可以使用TPL進行16核處理。我不確定如何結合這兩種技術來實現最大吞吐量。有代碼或框架同時處理TPL及非同步/等待?

+0

您如何計劃使用查詢結果?如果你只是想查詢服務器而沒有對結果進行處理,那麼你的瓶頸可能會在另外30臺服務器上。 –

+0

我們會在所有系統數據庫創建數據字典。從本質上講,我們將有單獨的查詢,這將成爲每個服務器的問題。我們也會針對每個數據庫查詢問題。每種類型的查詢都將返回將存儲在集中式元數據存儲庫中的結果集。 – user434290

回答

2

使用TPL數據流。 TPL async已經是演員庫。

你只需要創建一個ActionBlock並設置其並行度,最好是通過您可以在生產中調整配置文件。 CPU密集型工作應該限制在覈心數量左右。 I/O密集型工作的限制可能會更高。你需要看看在你的特定情況下最好的方法。

定義操作,也可以是異步,和後期的項目上運行他們的行動。這些項目可以是代表或命令對象,例如:

var block = new ActionBlock<Command>(
    command => command.ExecuteAsync(), 
    new ExecutionDataflowBlockOptions {MaxDegreeOfParallelism = 1000}); 

foreach (var command in GenerateCommands()) 
{ 
    block.Post(command); 
} 

block.Complete(); 
await block.Completion;