2012-07-11 456 views
2

在我們的實時服務器上運行svn update有時需要15分鐘以上才能完成。svn更新緩慢(在1Mb存儲庫上15分鐘以上)

  1. 我們的倉庫是非常小的,約爲1 MB,約100個文件(這是一個小網站)
  2. 我們有幾個開發商一舉兩得提交/更新,這是工作非常好
  3. 我們更新我們的服務器上的所有更改(只做svn update),這是運行非常緩慢
  4. 我們從來沒有做過從服務器svn commit(它應該是一個只讀版本我們網站)

隨着時間的推移,服務器上的svn update似乎變得越來越慢,即使它只是一個需要更新的文件。我開始認爲服務器上的存儲庫的「年齡」與它的速度有多慢有關?如果是這樣,我們可以做些什麼來加速它?

更新#1

我仍然認爲「年齡」有事情做與svn update是緩慢的,但可能要考慮什麼是真正發生時倉庫「年齡」在服務器上...

究其原因,我認爲這是如下:

  1. 我們自2010年1月
  2. 上定期(使用 svn update)簽出庫上WebsiteA(使用 svn checkout)和更新它
  3. 我們還檢查了在WebsiteZ同一個版本庫以同樣的方式,但這種情況發生短短數天前,即2012
  4. 兩個WebsiteA和WebsiteZ是同一物理服務器上月和兩者都使用相同的庫
  5. 在WebsiteA運行svn update從版本100到101來更新需要20多分鐘
  6. 上WebsiteZ運行svn update從版本100到101更新只需要幾秒鐘

這些網站,我可以看到的唯一區別是WebsiteA存在的時間更長一些。 WebsiteA可能有一些額外的文件(緩存內容),儘管這是非常小的(少於20個文件),並且包含緩存文件的目錄已被設置爲忽略使用svn:ignore的所有文件。

我想我不能排除網絡問題,但我認爲WebsiteA和WebsiteZ會運行相同的防火牆設置,如果有規則,它將是一個「塊」而不是「延遲」。由於這兩個網站都在同一臺服務器上,因此我認爲它們應該在網絡問題方面同時更新。

更新#2

這可能是值得一提的是,如果我們svn update file.txt它運行速度非常快。就好像svn正在比較目錄中的所有內容,只是想知道要更新什麼。

更新#3

我們結束了升級SVN和升級所有檢查了修訂。svn update現在似乎跑得快很多,而手指越過它就保持這種狀態。謝謝大家的幫助!

更新#4

當然,做一個新鮮結帳解決了這個問題,但只有幾天/周。我認爲今天我們終於找到了svn緩慢的原因。我們使用Zend_Auth並在每個頁面上調用Zend_Auth :: hasIdentity()來檢查用戶是否已登錄。此調用創建會話,然後在服務器上創建會話文件。如果瀏覽器(或googlebot)瀏覽時關閉cookie,我們會爲每個請求創建一個會話文件。因此我們的會話目錄有數百萬個文件。我們刪除了目錄中的文件,並通過在調用hasIdentity()之前檢查cookie是否已設置來確定用戶是否已登錄。 svn更新現在運行在< 30秒。

+0

你使用什麼協議?在此之前,我遇到過一些情況,有人在網絡驅動器上設置了svn repo,而人們使用file://協議訪問,性能非常糟糕。一旦我幫助啓動svnserve並且使用svn://協議的人們,一切都變得合理。 – 2012-07-11 08:09:49

+0

感謝您的快速回復。我們使用svn:// – user1493124 2012-07-11 08:13:09

+0

在我看來,它是介於您的「服務器」和導致問題的svn回購之間的東西,因爲我剛剛發現您說開發人員正在進行svn更新而沒有問題。如果緩慢是由svn回購引起的,你的開發人員也會受到影響,但事實並非如此。 – 2012-07-11 08:18:01

回答

0

SVN將源文件和等量的元數據(.svn目錄)寫入本地磁盤。如果網絡不是問題,您還可以檢查磁盤性能如何。我遇到過SAN磁盤很慢的情況(網絡延遲,本地和遠程數據之間的錯誤檢查等),並導致SVN延遲。通常在這種情況下,本地磁盤應該更好。你可以嘗試以下操作:

  • 如果可能的話到同一臺服務器作爲存儲庫和svn守護進程正在運行做svn export。如果它在那裏運行得更快,那麼它就是網絡或磁盤。
  • 如果其他客戶端/ dev機器上的svn export運行速度更快,那麼它應該是磁盤。

我懷疑倉庫的年齡與性能有什麼關係。

希望這會有所幫助。

+0

謝謝你的回覆。我做了你建議的測試,並不認爲我可以排除任何事情。我已經更新了有關正在發生的事情的更多細節的原始問題。我希望這解釋得更多。我非常感謝您的反饋,並花時間幫助我們! – user1493124 2012-07-12 09:25:01

1

我會建議通過使用svnadmin dumpsvnadmin load(例如在manual中所述)重建Subversion存儲庫(在備份之後!)。可能是由於舊版本升級導致版本庫中存在一些異常情況。你說這是一箇舊的存儲庫,所以這可能就是這種情況。執行轉儲 - >加載循環意味着Subversion可以使用當前格式創建更優化的存儲庫。

+0

謝謝您的回覆!這絕對是這種情況。自從我們檢出網站的第一個版本以來,我們已經升級了SVN服務器2-3次,並且還移動了服務器。將提出你的建議,讓你知道,謝謝! – user1493124 2012-07-13 11:27:50