2011-07-07 39 views
8

Bản sao Mercurial của tôi đã trở nên cực kỳ chậm, có lẽ do phân mảnh trên đĩa. Có cách nào để tối ưu hóa nó không?Tôi có thể tối ưu hóa bản sao Mercurial không?

Cách rõ ràng để tạo bản sao mới, sau đó sao chép MQ, gói đã lưu, hgrc, v.v ... vào bản sao mới và xóa bản sao cũ. Nhưng có vẻ như ai đó có thể đã gặp phải vấn đề này trước đây và thực hiện một phần mở rộng để làm điều đó?

+0

Từ những gì tôi biết về Mercurial, không có gì mà Mercurial làm điều đó sẽ làm cho nó chậm liên quan đến phân mảnh, vv Bạn đã thử chạy một trình chống phân mảnh đĩa bình thường trên đĩa của bạn? Ngoài ra, loại hoạt động nào chậm, và chậm như thế nào, v.v ...? –

+0

hg qref là điều thực sự chậm. Mất 50 giây trên một repo với 70000 cam kết. Tôi đồng ý rằng nó không phải là một vấn đề cụ thể của mercurial (mặc dù tôi nghĩ rằng mô hình truy cập thủy ngân làm trầm trọng thêm nó), nhưng Mac không có trình chống phân mảnh tích hợp (AFAICT). –

Trả lời

0

Tôi đã xóa repo và được lặp lại và hiệu suất được cải thiện.

+0

Có nghĩa là: bạn mất tất cả lịch sử. Đây là giải pháp hiếm khi và thuận lợi. – Abel

+0

Abel: tại sao bạn sẽ mất tất cả lịch sử? –

+0

Ồ, xin lỗi, tôi hiểu lầm, nghĩ rằng bạn có nghĩa là một bản sao của tip chỉ. Vẫn không chắc chắn làm thế nào bạn có thể reclone những gì bạn đã xóa. Hoặc bạn có nghĩa là để lại trạng thái máy chủ như là và chỉ cần lấy một bản sao mới? Tức là, bạn có nghĩa là xóa bản sao cục bộ của bạn chỉ? Đó không phải là giống như thanh trừng? – Abel

-2

Tắt giám sát chống vi-rút theo thời gian thực của thư mục mà repo được sao chép và chống phân mảnh. Bạn không thể làm được gì nhiều.

7

Nếu tệp kê khai đặc biệt lớn thì có thể dẫn đến hiệu suất chậm. Mercurial có một định dạng kho lưu trữ thay thế - generaldelta - thường có thể dẫn đến các biểu hiện nhỏ hơn nhiều.

Bạn có thể kiểm tra kích thước của biểu hiện của bạn sử dụng:

ls -lh .hg/store/*manifest*

Để có được giá trị tối đa từ generaldelta:

  1. Cài đặt Mercurial 2.7.2 hoặc mới hơn (2.7.2 bao gồm một sửa lỗi trong generaldelta có thể dẫn đến kích thước tệp kê khai lớn hơn - nhưng có khả năng bạn sẽ không gặp lỗi với phiên bản cũ hơn).

  2. Thực hiện hg --config format.generaldelta=1 clone --pull orig orig.gd.

Điều này có thể giúp cải thiện kích thước tệp kê khai nhưng không được hưởng đầy đủ.

  1. Thực hiện hg --config format.generaldelta=1 clone --pull orig.gd orig.gd.gd.

Bản sao của bản sao có thể cải thiện đáng kể kích thước tệp kê khai. Điều này là bởi vì khi kéo từ một thứ repald generaldelta sẽ được sắp xếp lại để tối ưu hóa kích thước biểu hiện.

Ví dụ về lợi ích tiềm năng của generaldelta, gần đây tôi đã chuyển đổi một repo là ~ 55000 SVN cam kết (kéo bằng cách sử dụng chuyển đổi) cộng ~ 1000 Mercurial commits/merges/grafts, vv Biểu hiện trong repo gốc là ~ 1,4 GB. Biểu hiện trong bản sao đầu tiên là ~ 600MB. Biểu hiện trong bản sao của bản sao là ~ 30MB.

Không có nhiều thông tin về generaldelta trực tuyến - vẫn còn nhiều việc phải làm trước khi nó có thể trở thành định dạng mặc định, nhưng nó hoạt động tốt cho nhiều dự án. Một vài kết quả tìm kiếm đầu tiên của Google có một số thông tin từ khi nó được giới thiệu lần đầu tiên và có một số cuộc thảo luận gần đây về danh sách gửi thư của mercurial-dev.

+0

+1 Ngay cả đối với repo nhỏ hơn ~ 3400 cam kết và kích thước bản kê ban đầu nhỏ hơn 17MB, hai bản sao đã cắt một số hoạt động hg xuống còn 1/3 thời gian gốc (bản kê khai cuối cùng là 11MB). –

Các vấn đề liên quan