Otimizar o desempenho do AzCopy com o Armazenamento do Microsoft Azure
O AzCopy é um utilitário da linha de comandos que pode utilizar para copiar blobs ou ficheiros de/para uma conta de armazenamento. Este artigo ajuda-o a otimizar o desempenho.
Nota
Se você estiver procurando conteúdo para ajudá-lo a começar a usar o AzCopy, consulte Introdução ao AzCopy
Pode comparar o desempenho e, em seguida, utilizar comandos e variáveis de ambiente para encontrar um compromisso ideal entre desempenho e consumo de recursos.
Executar testes de benchmark
Você pode executar um teste de benchmark de desempenho em contêineres de blob específicos ou compartilhamentos de arquivos para exibir estatísticas gerais de desempenho e identificar gargalos de desempenho. Você pode executar o teste carregando ou baixando dados de teste gerados.
Use o comando a seguir para executar um teste de benchmark de desempenho.
Sintaxe
azcopy benchmark 'https://<storage-account-name>.blob.core.windows.net/<container-name>'
Exemplo
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'
Gorjeta
Este exemplo inclui argumentos de caminho com aspas simples (''). Use aspas simples em todos os shells de comando, exceto no Shell de Comando do Windows (cmd.exe). Se você estiver usando um Shell de Comando do Windows (cmd.exe), coloque argumentos de caminho entre aspas duplas ("") em vez de aspas simples ('').
Este comando executa um benchmark de desempenho carregando dados de teste para um destino especificado. Os dados de teste são gerados na memória, carregados para o destino e, em seguida, excluídos do destino após a conclusão do teste. Você pode especificar quantos arquivos gerar e qual o tamanho desejado usando parâmetros de comando opcionais.
Se preferir executar esse teste baixando dados, defina o mode
parâmetro como download
. Para documentos de referência detalhados, consulte azcopy benchmark.
Otimizar para um grande número de arquivos
A taxa de transferência pode diminuir ao transferir um grande número de arquivos. Cada operação de cópia se traduz em uma ou mais transações que devem ser executadas no serviço de armazenamento. Quando você estiver transferindo um grande número de arquivos, considere o número de transações que precisam ser executadas e qualquer impacto potencial que essas transações podem ter se outras atividades estiverem ocorrendo na conta de armazenamento ao mesmo tempo.
Para maximizar o desempenho, você pode reduzir o tamanho de cada trabalho limitando o número de arquivos copiados em um único trabalho. Para operações de download e upload, aumente a simultaneidade conforme necessário, diminua a atividade de log e desative os recursos que incorrem em custos de alto desempenho.
Reduzir o tamanho de cada trabalho
Para obter o desempenho ideal, certifique-se de que cada trabalho transfira menos de 10 milhões de arquivos. Trabalhos que transferem mais de 50 milhões de arquivos podem ter um desempenho ruim porque o mecanismo de rastreamento de tarefas AzCopy incorre em uma quantidade significativa de despesas gerais. Para reduzir as despesas gerais, considere dividir os grandes trabalhos em trabalhos menores.
Uma maneira de reduzir o tamanho de um trabalho é limitar o número de arquivos afetados por um trabalho. Você pode usar parâmetros de comando para fazer isso. Por exemplo, um trabalho pode copiar apenas um subconjunto de diretórios usando o include path
parâmetro como parte do comando azcopy copy .
Use o include-pattern
parâmetro para copiar arquivos que tenham uma extensão específica (por exemplo: *.pdf
). Em um trabalho separado, use o exclude-pattern
parâmetro para copiar todos os arquivos que não têm *.pdf
extensão. Consulte Carregar arquivos específicos e Baixar blobs específicos para obter exemplos .
Depois de decidir como dividir trabalhos grandes em trabalhos menores, considere executar trabalhos em mais de uma máquina virtual (VM).
Aumentar a simultaneidade
Se você estiver carregando ou baixando arquivos, use a AZCOPY_CONCURRENCY_VALUE
variável de ambiente para aumentar o número de solicitações simultâneas que podem ocorrer em sua máquina. Defina esta variável o mais alto possível sem comprometer o desempenho da sua máquina. Para saber mais sobre essa variável, consulte a seção Aumentar o número de solicitações simultâneas deste artigo.
Se você estiver copiando blobs entre contas de armazenamento, considere definir o AZCOPY_CONCURRENCY_VALUE
valor da variável de ambiente como um valor maior que 1000
. Você pode definir essa variável como alta porque o AzCopy usa APIs de servidor para servidor, portanto, os dados são copiados diretamente entre os servidores de armazenamento e não usam o poder de processamento da sua máquina.
Diminuir o número de logs gerados
Você pode melhorar o desempenho reduzindo o número de entradas de log que o AzCopy cria à medida que conclui uma operação. Por padrão, o AzCopy registra todas as atividades relacionadas a uma operação. Para obter o desempenho ideal, considere definir o --log-level
parâmetro do comando copiar, sincronizar ou remover como ERROR
. Dessa forma, o AzCopy registra apenas erros. Por padrão, o nível do log de valores é definido como INFO
.
Desativar a verificação de comprimento
Se estiver carregando ou baixando arquivos, considere definir os --check-length
comandos copiar e sincronizar como false
. Isso impede que o AzCopy verifique o comprimento de um arquivo após uma transferência. Por padrão, o AzCopy verifica o comprimento para garantir que os arquivos de origem e de destino correspondam após a conclusão de uma transferência. AzCopy executa essa verificação após cada transferência de arquivo. Essa verificação pode degradar o desempenho quando trabalhos transferem um grande número de arquivos pequenos.
Ativar a verificação local simultânea (Linux)
As verificações de arquivos em alguns sistemas Linux não são executadas com rapidez suficiente para saturar todas as conexões de rede paralela. Nesses casos, você pode definir o AZCOPY_CONCURRENT_SCAN
para um número maior.
Aumentar o número de solicitações simultâneas
Você pode aumentar a taxa de transferência definindo a AZCOPY_CONCURRENCY_VALUE
variável de ambiente. Esta variável especifica o número de pedidos simultâneos que podem ocorrer.
Se o computador tiver menos de 5 CPUs, o valor dessa variável será definido como 32
. Caso contrário, o valor predefinido é igual a 16 vezes o número de CPUs. O valor padrão máximo dessa variável é 3000
, mas você pode definir manualmente esse valor maior ou menor.
Sistema operativo | Comando |
---|---|
Windows | set AZCOPY_CONCURRENCY_VALUE=<value> |
Linux | export AZCOPY_CONCURRENCY_VALUE=<value> |
macOS | export AZCOPY_CONCURRENCY_VALUE=<value> |
Use o para verificar o azcopy env
valor atual dessa variável. Se o valor estiver em branco, você poderá ler qual valor está sendo usado observando o início de qualquer arquivo de log AzCopy. O valor selecionado, e o motivo pelo qual foi selecionado, são relatados lá.
Antes de definir essa variável, recomendamos que você execute um teste de benchmark. O processo de teste de referência informará o valor de simultaneidade recomendado. Como alternativa, se as condições de rede e as cargas úteis variarem, defina essa variável como a palavra AUTO
em vez de para um número específico. Isso fará com que o AzCopy execute sempre o mesmo processo de ajuste automático que usa em testes de benchmark.
Limitar a taxa de dados de taxa de transferência
Você pode usar o cap-mbps
sinalizador em seus comandos para colocar um limite na taxa de dados de taxa de transferência. Por exemplo, o comando a seguir retoma um trabalho e limita a taxa de transferência a 10
megabits (Mb) por segundo.
azcopy jobs resume <job-id> --cap-mbps 10
Otimize o uso da memória
Defina a variável de ambiente para especificar a quantidade máxima de memória do sistema que você deseja que o AZCOPY_BUFFER_GB
AzCopy use para buffering ao baixar e carregar arquivos. Expresse esse valor em gigabytes (GB).
Sistema operativo | Comando |
---|---|
Windows | set AZCOPY_BUFFER_GB=<value> |
Linux | export AZCOPY_BUFFER_GB=<value> |
macOS | export AZCOPY_BUFFER_GB=<value> |
Nota
O rastreamento de tarefas sempre incorre em sobrecarga adicional no uso de memória. O valor varia de acordo com o número de transferências em um emprego. Os buffers são o maior componente do uso de memória. Você pode ajudar a controlar a sobrecarga usando AZCOPY_BUFFER_GB
para atender aproximadamente às suas necessidades, mas não há nenhum sinalizador disponível para limitar estritamente o uso geral de memória.
Otimizar a sincronização de arquivos
O comando sync identifica todos os arquivos no destino e, em seguida, compara nomes de arquivo e carimbos de data/hora modificados pela última vez antes de iniciar a operação de sincronização. Se você tiver um grande número de arquivos, poderá melhorar o desempenho eliminando esse processamento inicial.
Para fazer isso, use o comando azcopy copy em vez disso e defina o --overwrite
sinalizador como ifSourceNewer
. O AzCopy irá comparar ficheiros à medida que são copiados sem realizar quaisquer verificações e comparações iniciais. Isso fornece uma vantagem de desempenho nos casos em que há um grande número de arquivos para comparar.
O comando azcopy copy não exclui arquivos do destino, portanto, se você quiser excluir arquivos no destino quando eles não existirem mais na origem, use o comando azcopy sync com o --delete-destination
sinalizador definido como um valor de true
ou prompt
.
Usar vários clientes para executar trabalhos em paralelo
AzCopy funciona melhor quando apenas uma instância é executada no cliente. Se você quiser transferir arquivos em paralelo, use vários clientes e execute apenas uma instância do AzCopy em cada um.