Могу ли я оптимизировать клон Mercurial?

Мой клон Mercurial стал невероятно медленным, предположительно из-за фрагментации на диске. Есть ли способ оптимизировать его?

Очевидный способ сделать новый клон, затем скопировать мой MQ, сохраненные пакеты, hgrc и т. д. в новый клон и удалить старый. Но похоже, что кто-то, возможно, сталкивался с этой проблемой раньше и сделал расширение, чтобы сделать это?


person Paul Biggar    schedule 07.07.2011    source источник
comment
Из того, что я знаю о Mercurial, Mercurial не должен делать ничего такого, что замедляло бы его в отношении фрагментации и т. д. Пробовали ли вы запускать обычную дефрагментацию диска на своем диске? Кроме того, какие виды операций медленные, насколько медленные и т. д.?   -  person Lasse V. Karlsen    schedule 08.07.2011
comment
hg qref действительно медленная вещь. Занимает около 50 секунд на репо с 70000 коммитами. Я согласен, что это не специфическая проблема ртути (хотя я думаю, что шаблоны доступа ртути усугубляют ее), но у Mac нет встроенного дефрагментатора (AFAICT).   -  person Paul Biggar    schedule 08.07.2011


Ответы (3)


Если манифест становится особенно большим, это может привести к снижению производительности. У Mercurial есть альтернативный формат репозитория — generaldelta, который часто может привести к намного меньшим манифестам.

Вы можете проверить размер своего манифеста, используя:

ls -lh .hg/store/*manifest*

Чтобы получить максимальное значение от generaldelta:

  1. Установите Mercurial 2.7.2 или более позднюю версию (2.7.2 включает исправление ошибки в generaldelta, которая могла привести к увеличению размера манифеста, но есть большая вероятность, что вы не столкнетесь с этой ошибкой в ​​более ранней версии).

  2. Выполнить hg --config format.generaldelta=1 clone --pull orig orig.gd.

Это может дать некоторое улучшение размера манифеста, но не все преимущества.

  1. Выполнить hg --config format.generaldelta=1 clone --pull orig.gd orig.gd.gd.

Клон клона может дать гораздо большее улучшение размера манифеста. Это связано с тем, что при извлечении из репозитория generaldelta порядок вещей будет изменен для оптимизации размера манифеста.

В качестве примера потенциальных преимуществ generaldelta я недавно преобразовал репозиторий, в котором было ~55000 коммитов SVN (полученных с помощью hgsubversion) плюс ~1000 коммитов/слияний/трансплантатов Mercurial и т. д. Манифест в исходном репо весил ~1,4 ГБ. Манифест в первом клоне весил ~600 МБ. Манифест в клоне клона был ~30 МБ.

В Интернете не так много информации о generaldelta — еще многое предстоит сделать, прежде чем он станет форматом по умолчанию, но он хорошо работает для многих проектов. Первые несколько результатов поиска Google содержат некоторую информацию о том, когда он был впервые представлен, и недавно было обсуждение в списке рассылки mercurial-dev.

person Tim Delaney    schedule 10.10.2013
comment
+1 Даже для меньшего репозитория ~ 3400 коммитов и гораздо меньшего исходного размера манифеста ~ 17 МБ два клона сократили некоторые операции hg до трети исходного времени (окончательный манифест был 11 МБ). - person J Trana; 23.05.2014

Я удалил репозиторий и повторно клонировал его, что улучшило производительность.

person Paul Biggar    schedule 08.07.2011
comment
Что означает: вы теряете всю историю. Это редкое и выгодное решение. - person Abel; 10.01.2017
comment
Авель: зачем тебе терять всю историю? - person Paul Biggar; 10.01.2017
comment
О, извините, я неправильно понял, думал, что вы имели в виду только копию чаевых. Все еще не уверен, как вы можете повторно клонировать то, что вы удалили. Или вы имеете в виду оставить состояние сервера как есть и просто взять новый клон? То есть вы имели в виду только удаление вашего локального клона? Разве это не то же самое, что чистка? - person Abel; 10.01.2017
comment
Идея состоит в том, что когда вы делаете клон, они будут создаваться на диске с низкой фрагментацией (то есть они будут рядом друг с другом, что означает, что к ним будет быстрый доступ). Однако при последующем добавлении новых файлов они будут храниться в другой части диска, доступ к которой будет медленнее. Со временем это станет медленным. Начав заново, вы можете получить все файлы в одной и той же части диска, что значительно ускорит процесс (вроде как дефрагментация в Windows). - person Paul Biggar; 11.01.2017
comment
Ах, может быть, это должно быть отражено в вашем ответе)). Однако в моей ситуации не помогло бы использование оперативной памяти. - person Abel; 11.01.2017

Отключите антивирусный мониторинг в реальном времени папки, в которую клонируется репозиторий, и выполните дефрагментацию. Там не так много еще вы можете сделать.

person Sumo    schedule 12.07.2011