Политика хранения на сервере поиска кода TFS (Elastic Search)
У нас есть TFS 2017.3 с отдельным сервером поиска кода. У нас огромная БД TFS (около 1,6 ТБ), на сервере поиска кода у нас 700 ГБ дискового пространства. Через несколько недель дисковое пространство заканчивается, и поиск кода не работает в tfs. После увеличения дискового пространства поиск возобновляется. Как мы можем сделать политику хранения, чтобы удалить старые данные поиска кода (индекс)? мы не хотим увеличивать больше дискового пространства.
2 ответа
Индекс поиска (код и рабочий элемент) работает в 2 этапа:
- Массовое индексирование (BI), где индексируются весь код и артефакты рабочих элементов во всех проектах / репозиториях в коллекции. Это
трудоемкая операция и зависит от размера артефактов
под коллекцией.- Непрерывная индексация (CI), которая обрабатывает все инкрементные обновления артефактов (добавляет / обновляет / удаляет) и индексирует их. Это модель на основе уведомлений, где индексатор прослушивает события TFS и работает на основе этих уведомлений о событиях. CI выполняет практически все операции обновления, включая операции CRUD на уровне Project/Repository/Collection (такие как переименование репозитория, добавление / удаление проекта и т. Д.). Время работы этих CI снова будет зависеть от размера инкрементного обновления. BI всегда предшествует CI, т.е. CI никогда не будет выполняться в проекте / хранилище, пока BI не будет завершен для того же.
Как очистить данные индекса и переиндексировать, пожалуйста, выполните следующие действия:
- Пауза индексирования для всех коллекций. Запустите следующий сценарий в БД конфигурации TFS https://github.com/Microsoft/Code-Search/blob/master/PauseIndexing.ps1
- Войдите в систему, на которой запущен Elasticsearch (ES)
- Остановить службу ES
- Удалите всю папку Search Index (что-то вроде C:\TfsData\Search\IndexStore или где бы вы ни настроили ее)
- Перезапустите службы агента заданий TFS на машинах AT.
- Удалите следующие таблицы из каждой базы данных коллекции.
DELETE FROM [Search].[tbl_IndexingUnit]
DELETE FROM [Search].[tbl_IndexingUnitChangeEvent]
DELETE FROM [Search].[tbl_IndexingUnitChangeEventArchive]
DELETE FROM [Search].[tbl_JobYield]
DELETE FROM [Search].[tbl_TreeStore]
DELETE FROM [Search].[tbl_DisabledFiles]
DELETE FROM [Search].[tbl_ResourceLockTable]
- Перезапустите службу ES
- Запустите этот скрипт в базе данных конфигурации TFS: https://github.com/Microsoft/Code-Search/blob/master/ResumeIndexing.ps1
- Запустите этот сценарий (выберите из правильной папки выпуска TFS) для каждой из коллекций: https://github.com/Microsoft/Code-Search/blob/master/TFS_2017Update2/MissingIndexFolderTriggerCollectionIndexing.ps1
- Сначала попробуйте последний сценарий для небольшой коллекции (в которой меньше репозиториев), чтобы можно было убедиться, что индексация прошла правильно и результаты доступны для запросов.
Подробнее см. Этот блог в MSDN: Сброс поискового индекса в Team Foundation Server
Мне удалось уменьшить размер диска после удаления папок ES, переустановки расширения поиска кода, и иногда приходилось запускать MissingIndexFolderTriggerCollectionIndexing.ps1
,
Но - я пришел к выводу, что делать это не стоит, размер диска быстро увеличивался и достигал первоначального размера, поэтому я ничего не сохранил.
Хотя Microsoft рекомендует выделить на диске 35% БД, этого нам недостаточно, и мы увеличиваем размер, когда диск заполнен до конца (в настоящее время около 45% от размера БД).
Вывод - не трогайте ES, если диск заполнится, увеличьте размер диска.