Оптимизация производительности AzCopy при работе со службой хранилища Azure
AzCopy — это служебная программа командной строки, которую можно использовать для копирования больших двоичных объектов или файлов в учетную запись хранения или из нее. Эта статья поможет оптимизировать производительность этой программы.
Примечание.
Если требуется информация, которая поможет приступить к работе с 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.
Оптимизация для большого количества файлов
Пропускная способность может уменьшиться при передаче большого количества файлов. Каждая операция копирования преобразуется в одну или несколько транзакций, которые должны выполняться в службе хранилища. При передаче большого количества файлов рассмотрите количество транзакций, которые необходимо выполнить, и любое потенциальное влияние этих транзакций может иметь, если другие действия происходят в учетной записи хранения одновременно.
Чтобы повысить производительность, можно уменьшить размер каждого задания, ограничив количество файлов, скопированных в одном задании. Для операций загрузки и отправки увеличьте параллелизм по мере необходимости, уменьшите активность журнала и отключите функции, которые несут высокие затраты на производительность.
Уменьшение размера каждого задания
Для достижения оптимальной производительности убедитесь, что для каждого задания передается менее 10 млн файлов. Задания, передающие более 50 млн файлов, могут работать плохо, так как механизм отслеживания заданий AzCopy приводит к значительным издержкам. Чтобы снизить накладные расходы, проанализируйте возможность разделения больших заданий на меньшие.
Одним из способов уменьшения размера задания является ограничение количества файлов, затрагиваемых заданием. Для этого можно использовать параметры команды. Например, при использовании параметра include path
в команде azcopy copy задание может копировать только подмножество каталогов.
Используйте параметр include-pattern
для копирования файлов с конкретным расширением (например, *.pdf
). В отдельном задании используйте параметр exclude-pattern
, чтобы скопировать все файлы, у которых отсутствует расширение *.pdf
. Примеры см. в статьях Отправка конкретных файлов и Скачивание конкретных BLOB-объектов.
Решив, как разделить крупные задания на более мелкие, рассмотрите возможность запуска заданий на нескольких виртуальных машинах.
Увеличение параллелизма
При отправке или скачивании файлов используйте переменную среды AZCOPY_CONCURRENCY_VALUE
, чтобы увеличить количество запросов, которые могут выполняться на компьютере одновременно. Присвойте этой переменной максимально высокий уровень, не ухудшающий производительность компьютера. Дополнительные сведения об этой переменной см. в разделе Увеличение количества одновременных запросов этой статьи.
При копировании BLOB-объектов между учетными записями хранения рекомендуется присвоить переменной среды AZCOPY_CONCURRENCY_VALUE
значение, превышающее 1000
. Можно назначить этой переменной высокое значение, так как AzCopy использует API-интерфейсы "сервер — сервер", поэтому данные копируются непосредственно между серверами хранилища, не используя вычислительные ресурсы компьютера.
Уменьшение количества создаваемых журналов
Производительность можно повысить, уменьшив количество записей журналов, создаваемых AzCopy при выполнении операции. По умолчанию AzCopy записывает в журнал все действия, связанные с операцией. Для достижения оптимальной производительности рассмотрите возможность задания параметра --log-level
для команд копирования, синхронизации или удаления равным ERROR
. При этом AzCopy регистрирует только ошибки. По умолчанию для уровня ведения журнала задано значение INFO
.
Отключение проверки длины
При отправке или скачивании файлов попробуйте задать значение --check-length
для команд копирования и синхронизации равным false
. Это предотвращает проверку AzCopy длины файла после передачи. По умолчанию AzCopy проверяет длину, чтобы гарантировать совпадение исходного и целевого файлов после завершения передачи. AzCopy выполняет эту проверку после каждой передачи файлов. Эта проверка может привести к снижению производительности, если в задании передается большое количество небольших файлов.
Включение параллельной локальной проверки (Linux)
Проверка файлов в некоторых системах Linux выполняется недостаточно быстро, чтобы нагрузить все параллельные сетевые подключения. В таких случаях можно задать для AZCOPY_CONCURRENT_SCAN
более высокое значение.
Увеличение количества одновременных запросов
Пропускную способность можно увеличить, задав переменную среды AZCOPY_CONCURRENCY_VALUE
. Эта переменная указывает количество одновременных запросов, которые могут быть выполнены.
Если на компьютере установлено менее 5 ЦП, эта переменная получает значение 32
. В противном случае значение по умолчанию равно 16, умноженному на число ЦП. Максимальное значение по умолчанию для этой переменной — 3000
. Это значение можно увеличить или уменьшить вручную.
Операционная система | Get-Help |
---|---|
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
мегабит (Мбит) в секунду.
azcopy jobs resume <job-id> --cap-mbps 10
оптимизация использования памяти,
Задайте переменную среды AZCOPY_BUFFER_GB
, чтобы указать максимальный объем памяти системы, который должен использоваться AzCopy для буферизации при скачивании и отправке файлов. Выразите это значение в гигабайтах (ГБ).
Операционная система | Get-Help |
---|---|
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
значение true
или prompt
.
Использование нескольких клиентов для параллельного выполнения заданий
AzCopy лучше всего выполняется, если на клиенте выполняется только один экземпляр. Если вы хотите передать файлы параллельно, используйте несколько клиентов и запустите только один экземпляр AzCopy на каждом из них.