it-swarm-pt.tech

Como posso acelerar as atualizações do SVN?

Temos um repositório SVN bastante grande. As atualizações de SVN estão demorando cada vez mais, quanto mais adicionamos código. Nós adicionamos svn:externals para pastas que foram repetidas em alguns projetos como o FCKeditor em vários sites. Isso ajudou, mas não muito.

Qual é a melhor maneira de reduzir o tempo de atualização e aumentar a velocidade do SVN?

26
EtienneT

Se for um repositório SVN mais antigo (ou mesmo bastante novo, mas não foi configurado de forma otimizada), talvez use o estilo BDB mais antigo de banco de dados de repositório. http://svn.Apache.org/repos/asf/Subversion/trunk/notes/fsfs tem notas sobre o novo. Mudar de um para outro não é muito difícil - esvazie o histórico inteiro, reinicialize-o com o novo formato svn do sistema de arquivos e importe novamente. Também pode ser útil ao mesmo tempo filtrar o repo-dump para remover check-ins inteiros de informações inúteis (eu, por exemplo, removi 20 MB + arquivos tarball que alguém fez check-in).

No que diz respeito à velocidade geral - um disco rígido de qualidade (veloz) e memória extra para cache baseado em sistema operacional seria difícil de falhar em termos de aumento da velocidade de funcionamento do SVN.

No lado do cliente, se você tiver configurado o tortoisesvn por meio do PuttyAgent para acesso SSH a uma máquina de repositório externa, também poderá ativar a compactação SSH, o que também pode ajudar.

Editar: SVN v1.5 também tem a ferramenta fsfs-reshard.py que pode ajudar a dividir um repositório svn baseado em FSFS em vários diretórios - que podem ser vinculados a diferentes eixos de acionamento. Se você tiver milhares de revisões, isso também pode ajudar - se por nenhuma outra razão do que encontrar um arquivo entre milhares leva tempo (e você diz se isso é um problema olhando os tempos de IOwait)

14
Alister Bulman

Desative a verificação de vírus em pastas que contêm código de cópia de trabalho. Isso fez com que minhas atualizações fossem duas vezes mais rápidas.

10
Lee Englestone

Não é realmente uma resposta, mas pode ser interessante saber que uma das razões pelas quais o svn é tão pesado em I/O é o fato de que ele armazena uma cópia extra de cada arquivo no diretório .svn/text-base. Isso torna as operações locais diff rápidas, mas consome muito espaço no disco rígido e E/S.

http://Subversion.tigris.org/issues/show_bug.cgi?id=525 tem os detalhes.

5
Erik Forsberg

Parece que você tem vários projetos em um repositório. Dividi-los quando apropriado lhe dará um grande impulso.

Supostamente, o Git é muito mais rápido que o Subversion devido à maneira como ele armazena/processa mudanças, mas não tenho experiência em primeira mão com ele.

4
ceejayoz

Existem alguns ajustes de desempenho comuns. O SVN é muito pesado em I/O, então discos rígidos mais rápidos são uma opção (em ambas as extremidades). Adicione mais memória ao seu servidor. Certifique-se de que seus clientes tenham um disco rígido desfragmentado (para Windows).

O método de acesso que você usa também é importante. Repositórios armazenados em sistemas de arquivos remotos (usando file: /// access) serão muito mais lentos do que svnserve ou Apache com mod_svn. Considere usar um dos últimos se você tiver o repositório em um compartilhamento de arquivo simples.

3
Yann Ramin

Certifique-se de que sua conexão com o servidor seja a mais rápida possível (gigabit ethernet). Certifique-se de que o servidor tenha discos rápidos em uma matriz. E, claro, verifique apenas o que você precisa.

3
WildJoe

O TotoiseSVN, por padrão, analisa as alterações de arquivo em segundo plano e vi isso tornar minha máquina mais lenta. Mudei a configuração para excluir tudo e, em seguida, incluir apenas os diretórios onde tenho checkouts. Você também pode desativar as verificações de antecedentes. Ambas as configurações estão no nó de configurações de Sobreposições de ícone.

2
James A. N. Stauffer

Às vezes, a operação lenta do svn, especialmente com muitos externos, está relacionada ao DNS. Parece que o svn executa a pesquisa de DNS para cada svn: external, mesmo para os relativos. Adicionar o nome do host do servidor svn a/etc/hosts ou consertar o resolv.conf pode ser útil.

2
Vasily Redkin

Descobri em minha própria experiência (ou seja: não por meio de nenhum teste real ) que, especialmente se o servidor de repo SVN for remoto, o uso de externos parece desacelerar as coisas. Se você tem código duplicado (como seu editor FCK) em vários lugares, eu tenderia a usar externos, pois manter esses arquivos sincronizados e gerenciáveis ​​é mais importante do que a velocidade de atualização - embora, você possa usar links simbólicos para trazer em código duplicado. (Se estiver usando o Windows XP, você pode usar pontos de junção ).

1
nickf

Usar direitos de acesso de leitura (ou seja, restringir o acesso de leitura a certas pessoas/grupos) tornará o repositório muito mais lento. Especialmente quando a autenticação é feita de alguma forma especial, por exemplo, contra um domínio do Windows. O mesmo vale para direitos de acesso de gravação, é claro, mas escrever é menos frequente do que ler. E restringir o acesso de gravação pode ser mais importante do que restringir o acesso de leitura

1
anonymous

Dividimos nossa base de código em vários módulos irmãos e escrevemos os scripts Ant para que um desenvolvedor possa trabalhar em um módulo por vez sem se preocupar muito com o que está acontecendo nos outros módulos.

  • um script de construção de nível superior aciona todos os scripts de construção de módulos
  • bibliotecas externas são não armazenadas no Subversion, mas extraídas de uma unidade de rede usando o Apache Ivy. (pense nisso como um repositório Maven interno).
  • dependências entre os módulos também são gerenciadas usando Ivy.

Normalmente, os desenvolvedores precisam atualizar sua árvore inteira algumas vezes por semana, mas isso pode ser feito facilmente antes de ir para o almoço/café.

1
Vladimir

Se você tiver muitas pastas na raiz do repositório e sua cópia local refletir o repositório, tente dividir a cópia local monolítica em muitas pastas separadas para download e atualizar essas pastas separadamente também. Será muito mais rápido do que uma pasta grande.

0
noetic