本文說明您可以在使用 PowerShell 處理 Data Lake Storage Gen1 時微調以取得更佳效能的屬性。
注意
建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 請參閱安裝 Azure PowerShell 以開始使用。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az。
財產 | 預設 | 說明 |
---|---|---|
每檔線程數 | 10 | 此參數可讓您選擇要上傳或下載每個檔案的平行線程數目。 此數目代表每個檔案可配置的線程上限,但視您的案例而定,您可能會得到較少的線程(例如,如果您要上傳 1 KB 檔案,即使您要求 20 個線程,也會得到一個線程)。 |
ConcurrentFileCount | 10 | 此參數特別用於上傳或下載資料夾。 此參數決定可以上傳或下載的並行檔案數目。 此數目代表可以一次上傳或下載的並行檔案數目上限,但視您的案例而定,您可能會獲得較少的並行存取權(例如,如果您要上傳兩個檔案,即使您要求 15,您還是會收到兩個並行檔案上傳)。 |
範例︰
此命令會使用每個檔案 20 個線程和 100 個並行檔案,將檔案從 Data Lake Storage Gen1 下載到使用者的本機磁碟驅動器。
Export-AzDataLakeStoreItem -AccountName "Data Lake Storage Gen1 account name" `
-PerFileThreadCount 20 `
-ConcurrentFileCount 100 `
-Path /Powershell/100GB `
-Destination C:\Performance\ `
-Force `
-Recurse
下一個問題是如何判斷要為效能相關的屬性提供哪些值。 以下是一些您可以使用的指引。
步驟 1:判斷線程總數 - 從計算要使用的線程計數總計開始。 作為一般指導方針,您應該針對每個實體核心使用六個線程。
Total thread count = total physical cores * 6
範例︰
假設您正在從具有 16 個核心的 D14 VM 執行 PowerShell 命令
Total thread count = 16 cores * 6 = 96 threads
步驟 2:計算 PerFileThreadCount - 我們會根據檔案的大小來計算 PerFileThreadCount。 對於小於 2.5 GB 的檔案,不需要變更此參數,因為預設值為 10 就已足夠。 對於大於 2.5 GB 的檔案,您應該使用 10 個線程作為前 2.5 GB 的基底,併為檔案大小增加每個額外 256 MB 新增 1 個線程。 如果您要複製具有大量檔案大小的資料夾,請考慮將它們分組為類似的檔案大小。 擁有不同的檔案大小可能會導致非最佳效能。 如果無法將類似的檔案大小分組,您應該根據最大的檔案大小來設定 PerFileThreadCount。
PerFileThreadCount = 10 threads for the first 2.5 GB + 1 thread for each additional 256 MB increase in file size
範例︰
假設您有 100 個檔案,範圍從 1 GB 到 10 GB,我們會使用 10 GB 作為方程式的最大檔案大小,如下所示。
PerFileThreadCount = 10 + ((10 GB - 2.5 GB) / 256 MB) = 40 threads
步驟 3:計算 ConcurrentFileCount - 使用總線程數和 PerFileThreadCount,根據下列方程式計算 ConcurrentFileCount:
Total thread count = PerFileThreadCount * ConcurrentFileCount
範例︰
根據我們所使用的範例值
96 = 40 * ConcurrentFileCount
因此,ConcurrentFileCount 是 2.4,我們可以捨入至 2。
您可能需要進一步調整,因為要處理各種不同的檔案大小。 如果所有檔案或大部分檔案都較大且接近 10 GB 範圍,則上述計算效果良好。 如果相反地,有許多不同的檔案大小,且許多檔案較小,則您可以減少 PerFileThreadCount。 藉由減少 PerFileThreadCount,我們可以增加 ConcurrentFileCount。 因此,如果我們假設大部分的檔案在 5 GB 範圍內較小,我們可以重做計算:
PerFileThreadCount = 10 + ((5 GB - 2.5 GB) / 256 MB) = 20
因此,ConcurrentFileCount 會變成 96/20,也就是 4.8,四捨五入為 4。
您可以根據檔案大小的分佈,上下調整 perFileThreadCount 來進一步調整這些設定。
檔案數目小於 ConcurrentFileCount:如果您要上傳的檔案數目小於您所計算的 ConcurrentFileCount,則您應該減少 concurrentFileCount 等於檔案數目。 您可以使用任何剩餘的執行緒來增加 perFileThreadCount。
太多線程:如果您增加線程計數太多,而不會增加叢集大小,則會執行效能降低的風險。 在CPU上切換上下文時,可能會發生爭用問題。
並行存取不足:如果並行不足,則叢集可能太小。 您可以增加叢集中的節點數目,這可提供您更多的並行存取。
限流錯誤:如果您的並行度過高,您可能會看到限流錯誤。 如果您看到限流錯誤,您應該減少併發量或與我們聯絡。