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.

Consulte também