分享方式:


使用 Azure 儲存體將 AzCopy 的效能最佳化

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 (部分機器翻譯)。

將大量檔案最佳化

傳輸大量檔案時,輸送量可能會降低。 每個複製作業都會轉譯成一或多個必須在儲存體服務中執行的交易。 當您傳輸大量檔案時,請考慮需要執行的交易數目,如果儲存體帳戶中同時發生其他活動,這些交易可能會有任何潛在影響。

若要將效能最大化,您可以藉由限制在單一作業中複製的檔案數目來減少每個作業的大小。 針對下載和上傳作業,視需要增加並行、減少記錄活動,並關閉會產生高效能成本的功能。

縮減每個作業的大小

為達到最佳效能,請確定每個作業所傳送的檔案少於 1 千萬個。 傳輸超過 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 數目。 此變數的預設值上限為 3000,但您可以手動將此值設得更高或更低。

作業系統 Command
Windows set AZCOPY_CONCURRENCY_VALUE=<value>
Linux export AZCOPY_CONCURRENCY_VALUE=<value>
macOS 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 表示此值。

作業系統 Command
Windows set AZCOPY_BUFFER_GB=<value>
Linux export AZCOPY_BUFFER_GB=<value>
macOS export AZCOPY_BUFFER_GB=<value>

注意

作業追蹤總是會在記憶體使用量中導致額外負荷。 數量會根據作業中的傳輸數目而有所不同。 緩衝區是記憶體使用量的最大元件。 您可以使用 AZCOPY_BUFFER_GB 來盡可能滿足您的需求以協助控制額外負荷,但沒有任何可用旗標能夠嚴格限制整體記憶體使用量的上限。

將檔案同步最佳化

Sync (部分機器翻譯) 命令會識別目的地的所有檔案,然後在開始同步作業之前,比較檔案名稱和上次修改的時間戳記。 如果您有大量檔案,則可透過消除此預先處理來改善效能。

若要完成此動作,請改為使用 azcopy copy 命令,並將 --overwrite 旗標設定為 ifSourceNewer。 AzCopy 將在複製檔案時加以比較,而不會執行任何預先掃描和比較。 如果有大量檔案要比較,這可提供效能優勢。

Azcopy copy (部分機器翻譯) 命令不會刪除目的地檔案,因此,如果您想要在檔案不再存在於來源時將那些檔案刪除,請使用 azcopy sync (部分機器翻譯) 命令,並將 --delete-destination 旗標設定為 trueprompt 的值。

使用多個用戶端平行執行作業

只有一個執行個體在用戶端上執行時,AzCopy 會執行最佳效能。 如果您想要平行傳輸檔案,請使用多個用戶端,並在每個用戶端上只執行一個 AzCopy 執行個體。

另請參閱