AzCopy 是命令列公用程式,可讓您在儲存體帳戶之間複製 Blob 或檔案。 本文可協助您最佳化效能。
注意
如需協助您開始使用 AzCopy 的內容,請參閱開始 使用 AzCopy。
您可以對效能進行基準測試,然後使用命令和環境變數來找出效能和資源使用量之間的最佳取捨。
執行效能評定測試
您可以在特定的 Blob 容器或檔案共用上執行效能評定測試,以檢視一般效能統計資料,並識別效能瓶頸。 您可以透過上傳或下載產生的測試資料來執行測試。
使用下列命令來執行效能評定測試。
語法
azcopy benchmark 'https://<storage-account-name>.blob.core.windows.net/<container-name>'
範例
azcopy benchmark 'https://mystorageaccount.blob.core.windows.net/mycontainer/myBlobDirectory?sv=2018-03-28&ss=bjqt&srs=sco&sp=rjklhjup&se=2019-05-10T04:37:48Z&st=2019-05-09T20:37:48Z&spr=https&sig=/SOVEFfsKDqRry4bk3qz1vAQFwY5DDzp2%2B/3Eykf/JLs%3D'
提示
此範例會以單引號 ('') 括住路徑引數。 除了 Windows 命令殼層 (cmd.exe) 以外,在所有命令殼層中使用單引號。 如果您使用 Windows 命令殼層 (cmd.exe),請使用雙引號 ("") 括住路徑引數,而非單引號 ('')。
此命令會透過將測試資料上傳至指定目的地來執行效能評定。 測試資料會在記憶體中產生、上傳至目的地,然後在測試完成之後從目的地刪除。 您可以使用選擇性命令參數來指定要產生的檔案數目,以及您所需的大小。
如果您想要透過下載資料來執行此測試,請將 mode 參數設定為 download。 如需詳細的參考文件,請參閱 azcopy benchmark (部分機器翻譯)。
將大量檔案最佳化
傳輸大量檔案時,輸送量可能會降低。 每個複製作業都會轉譯為儲存體服務必須執行的一或多個交易。 當您傳輸大量檔案時,請考慮需要執行的交易數目,以及儲存體帳戶中同時發生其他活動時,這些交易可能產生的潛在影響。
若要將效能最大化,您可以限制在單一工作中複製的檔案數目,以減少每一個工作的大小。 針對下載和上傳作業,視需要增加並行、減少記錄活動,並關閉會產生高效能成本的功能。
縮減每個作業的大小
若要達到最佳效能,請確保每個工作傳輸的檔案少於一千萬個。 傳輸超過 5 千萬個檔案的作業執行效能不佳,因為 AzCopy 作業追蹤機制會產生大量額外負荷。 若要減少額外負荷,請考慮將大型作業分成較小的作業。
縮減作業大小的方法之一是限制作業所影響的檔案數目。 您可以使用命令參數來執行該動作。 例如,作業可以使用 include path 參數作為 azcopy copy 命令的一部分,只複製目錄子集。
使用 include-pattern 參數來複製具有特定副檔名的檔案 (例如:*.pdf)。 在個別作業中,使用參數 exclude-pattern 複製所有沒有 *.pdf 副檔名的檔案。 如需範例,請參閱上傳特定檔案 (部分機器翻譯) 和下載特定 Blob (部分機器翻譯)。
決定如何將大型工作分割成較小的工作之後,請考慮在多個虛擬機器 (VM) 上執行工作。
增加並行
如果您要上傳或下載檔案,請使用 AZCOPY_CONCURRENCY_VALUE 環境變數,來增加可在機器上發生的並行要求數目。 在不危及機器效能的情況下,請盡可能將此變數設為最高。 若要深入了解此變數,請參閱此文章的增加並行要求數目一節。
如果您要在儲存體帳戶之間複製 Blob,請考慮將 AZCOPY_CONCURRENCY_VALUE 環境變數的值設定為大於 1000 的值。 您可以將此變數設定為高,因為 AzCopy 會使用伺服器對伺服器 API,因此資料會直接在儲存體伺服器之間複製,而且不會使用機器的處理能力。
減少產生的記錄數目
您可以透過減少 AzCopy 在完成作業時所建立的記錄項目數目來改善效能。 根據預設,AzCopy 會記錄與某個作業相關的所有活動。 為達到最佳效能,請考慮將 copy、sync 或 remove 命令的 --log-level 參數設定為 ERROR。 如此一來,AzCopy 就只會記錄錯誤。 根據預設,值記錄層級會設定為 INFO。
關閉長度檢查
如果您要上傳或下載檔案,請考慮將 copy 和 sync 命令的 --check-length 設定為 false。 此設定可防止 AzCopy 在傳輸之後驗證檔案的長度。 根據預設,AzCopy 會檢查長度,以確保在傳輸完成之後,來源和目的地檔案會相符。 AzCopy 會在每次檔案傳輸之後執行此檢查。 當作業大量傳輸小型檔案時,此檢查可能會使效能降低。
開啟並行本機掃描 (Linux)
某些 Linux 系統上的檔案掃描速度不足以使所有平行網路連線達到飽和。 在這些情況下,您可以將 AZCOPY_CONCURRENT_SCAN 設定為較高的數字。
增加並行要求數目
您可以透過設定 AZCOPY_CONCURRENCY_VALUE 環境變數來增加輸送量。 此變數會指定可發生的並行要求數。
如果您的電腦的 CPU 少於 5 個,則此變數的值會設定為 32。 否則,預設值會等於 16 乘以 CPU 數目。 此變數的預設值上限為 300,但您可以手動將此值設得更高或更低。
export AZCOPY_CONCURRENCY_VALUE=<value>
使用 azcopy env 來檢查此變數目前的值。 如果值為空白,您可以查看任一 AzCopy 記錄檔的開頭,讀取正在使用的值。 選取的值及選取的原因會在該處回報。
設定此變數之前,建議您先執行基準測試。 基準測試程序會報告建議的並行值。 或者,如果您的網路狀況和承載不同,請將此變數設定為 AUTO 這個字,而不是特定數字。 該設定會導致 AzCopy 一律執行其在基準測試中使用的相同自動微調程式。
限制輸送量資料速率
使用命令中的標誌 cap-mbps 為吞吐量速率設定上限。 例如,下列命令會繼續作業,並將輸送量上限設定為每秒 10 Mb。 此功能僅支援上傳或下載文件,不支援在帳戶之間複製。
azcopy jobs resume <job-id> --cap-mbps 10
將記憶體使用量最佳化
設定 AZCOPY_BUFFER_GB 環境變數,以指定在下載和上傳檔案時,您想要 AzCopy 用來進行緩衝處理的系統記憶體數量上限。 以 GB 表示此值。
export AZCOPY_BUFFER_GB=<value>
注意
作業追蹤會增加記憶體使用量的負擔。 數量會根據作業中的傳輸數目而有所不同。 緩衝區是記憶體使用量的最大元件。 您可以使用 AZCOPY_BUFFER_GB 來協助控制額外負擔,以便大致符合您的需求,但沒有標記可用來嚴格限制整體記憶體使用量。
將檔案同步最佳化
sync 指令會識別目的地的所有檔案,然後在開始同步作業之前比較檔案名稱和上次修改的時間戳記。 如果您有大量檔案,您可以透過消除此前期處理來改善效能。
若要達成此目標,請改用 azcopy copy 命令,並將旗標設定 --overwrite 為 ifSourceNewer。 AzCopy 會在複製檔案時比較檔案,而不執行任何前期掃描和比較。 此方法在有大量檔案要比較的情況下提供效能優勢。
azcopy copy 命令不會從目的地刪除檔案。 如果您想在來源不再存在時刪除目的地的檔案,請使用 azcopy sync 命令,並將 --delete-destination 旗標設定為 true 或 prompt 的值。
使用多個用戶端平行執行作業
只有一個執行個體在用戶端上執行時,AzCopy 會執行最佳效能。 如果您想要平行傳輸檔案,請使用多個用戶端,並在每個用戶端上只執行一個 AzCopy 實例。