350 GB SVN Repo creado al menos 1 MB de revisión, incluso para una tarea sencilla como rama / etiqueta

StackOverflow https://stackoverflow.com/questions/3910387

  •  29-09-2019
  •  | 
  •  

Pregunta

Todo esto comenzó cuando me di cuenta de que mi tamaño del repositorio está aumentando a una tasa diaria de 1 GB. Hice una prueba sencilla. Creado a / etiqueta de la rama de una carpeta existente que tenía un tamaño de 35 KB. Tomé nota de número de revisión y fui a $REPO/db/revs/<K-rev>/rev-number/ y comprobado el tamaño de la revisión. Fue 1 byte Mega. Eso suena a pescado. ¿Alguna idea sobre lo que podría ser mal aquí. Mi repo se trata de 350 GB en tamaño, con cerca de 600.000 revisiones.

P.S. Ya he comenzado una reconstrucción de todo el repositorio para ver si hay alguna diferencia, pero es probable que tome días en completarse.

¿Fue útil?

Solución

Publicado misma pregunta a users@subversion.sapache.org y obtuvo esta respuesta de B Smith-Mannschott - lo que explica todo. Tengo un directorio en la ruta que contiene 16000 carpetas - para cada confirmación. Gracias B Smith-Mannschott para la respuesta detallada. Publicar la respuesta aquí para beneficio de los demás.


¿Tiene su repositorio contiene un directorio con muchas entradas? Son los cambios que se producen los grandes commit que se realizan en o por debajo de tales un directorio?

Vamos a suponer para cometer un solo cambio en un solo archivo a su repositorio. Asumamos aún más el archivo se encuentra aquí, en su repositorio:

/project/trunk/some-really-large-directory/notes/blah.txt

Cuando se confirma el cambio a blah.txt, la nueva revisión volverá a escribir los nodos del directorio entre 'blah.txt' y la raíz del repositorio: / tronco / some-muy-grande-directorio / proyecto / notas, / Proyecto / tronco / some-muy-grande-directorio, / proyecto / tronco, / proyecto, /. Cuando la reescritura de un nodo de directorio, FSFS siempre almacena la nueva versión en su totalidad. (Esto es diferente de la forma en que son cambios en los archivos almacenado, que en general son como las diferencias en alguna versión anterior de el mismo archivo.)

Si / proyecto / tronco / some-muy-grande-directorio / contiene, por ejemplo 10000 archivos, entonces cada uno se comprometen a blah.txt almacenará una copia completa de este directorio (con sus nombres 10'000) en su repositorio.

Me dio cuenta de esto cuando empecé a mantener un wiki personal bajo la versión controlar hace unos años. Fue un directorio plano de más de 10'000 texto archivos. Rápidamente me di cuenta que compromete eran bastante grandes. (Desde entonces, he cambiado a git para esa tarea, para esta y otras razones.)

véase también http: //svn.apache.org/repos/asf/subversion/trunk/notes/subversion-design.html#server.fs.struct.bubble-up

Otros consejos

Hay una solución muy simple. Asumiendo que su repositorio contiene una gran cantidad de etiquetas históricas, puede moverlos a /tags-archive y hacer que este directorio de sólo lectura. Cuando va a crear nuevas etiquetas bajo /tags hay problema no se producirá nunca más.

Tenga en cuenta que es necesario utilizar el URL para URL movimiento. Por ejemplo.

svn move https://svn.example.com/MyRepo/tags https://svn.example.com/MyRepo/tags-archive -m "Your Log Message"

Esta solución ayudó a resolver el problema de un repositorio que contenía aproximadamente 350.000 etiquetas en un solo directorio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top