Me sorprende cuánto tiempo se tarda en fusionar un cambio muy pequeño de cualquier rama en particular en el tronco; 1-2 minutos para fusionarse en unas pocas líneas de texto que han cambiado en un solo archivo de texto que tiene solo 2k de longitud.Lo que determina la velocidad de una operación de fusión de SVN 1.6
Me gustaría, si es posible, hacer una fusión mucho más rápida pero no sé por dónde empezar. He hecho un google rápido y las posibles razones de fusiones lentas parece incluir todas y cada una de las siguientes opciones: -
- gran tamaño de recompra (tanto en términos de tamaño en el disco y el número de revisiones).
- árbol de fuentes grande (aparentemente SVN tiene que arrastrarse por el árbol con el fin de trabajar a cabo cambios)
- La versión de SVN servidor/cliente
- archivos muy grandes (varios MB) (no tenemos muy grande solo archivos, así que dudo que esto nos afecte)
Supongo que realmente quiero saber cómo averiguar cuál de los puntos anteriores está haciendo que las fusiones sean tan lentas.
Ahora estoy a oscuras sobre si trabajar en el cliente o trabajar en el servidor es lo que más tiempo lleva (sospecho que es el cliente dado que el uso de la CPU no es masivo en el servidor). Pensé que podría ser la gran cantidad de mergeinfo que ha acumulado más de 100 de fusiones, pero hice una prueba en la que eliminé toda la información de fusión de un par de ramas y luego hice una fusión y encontré la misma lentitud.
Entonces, lo que me gustaría preguntar es: - * ¿Cómo se podría diagnosticar/perfilar la actividad de SVN? * Según la información a continuación, ¿hay algo realmente obvio que pueda estar causando el bajo rendimiento?
Gracias
Chris
Aquí están algunos hechos/cifras sobre nuestra configuración SVN
- repositorio SVN Nuestra cuenta con alrededor de 32.000 revisiones.
- tamaño Repo en el disco: 8,3 GB
- Nuestros ramas de desarrollo tienen cada uno alrededor de 1.400 carpetas con versiones (19.000 ficheros versionados)
- SVN servidor: 1.6.6 (r40053) (alojada en Apache que se ejecuta en Ubunto Lucid Lynx)
- Estoy usando tortuga 1.6.9 en Win7 (aunque otros miembros del equipo usan SmartSVN e informan el mismo tipo de velocidad).
Edición
Podría valer la pena añadir que cuando la rama/fusionar, nos rama desde el tronco y siempre fusionamos toda la rama de nuevo al tronco. Entonces todo mergeinfo está en la carpeta de troncales (y ramas).
Conclusiones
En mi caso, que parecía ser el acceso al disco que era el cuello de botella en el proceso de fusión - cuando moví mi árbol de código fuente de mi disco duro a mi SSD, la misma combinación fue de 50 +/- 5s a 7 +/- 1s.
Ver el proceso SVN de tortuga en el explorador de procesos durante la fusión fue bastante revelador: mientras hacía una fusión en mi HDD, los bytes de E/S estaban entre 500kb/sy 3Mb/s durante la mayor parte del tiempo. En la SSD, los bytes de E/S eran de hasta 10-20 Mb/s. [De manera bastante confusa, algunas fusiones en mi HDD eran de velocidad comparable (y los bytes de E/S eran similares) que los de mi SSD. En estos casos, supongo que muchos de los archivos que se estaban leyendo ya estaban en el caché de archivos de Windows. ]
encontré la siguiente todo aumento de la velocidad de combinación
- La fusión de & a una carpeta más profunda por la jerarquía de origen: esto no es realmente una opción para nosotros en la "vida real", porque seguimiento de la fusión se vuelve casi imposible si no se registra en la carpeta "trunk-level", pero muestra que la fusión de árboles mucho más pequeños hace que el proceso sea mucho más rápido.
- Reduciendo el tamaño del conjunto de trabajo que se combina con las ayudas (siempre que use la opción de combinación de profundidad de "conjunto de trabajo" y no completamente recursiva) - así que simplemente eliminando las carpetas (de mi conjunto de trabajo bajo el tronco) .
Parece ser el acceso al disco que lleva la mayor parte del tiempo con mi fusión, por lo que la fusión de árboles más pequeños es más rápida - ver comentarios al final de mi pregunta –