Анатомия упаковки
Упаковка ZODB FileStorage - это процесс выборочного копирования данных из одного файла в другой (только транзакции, которые «моложе» указанного возраста).Перед началом копирования в память встроена некоторая программная часть индекса.Таким образом, вся упаковка ZODB содержит следующие шаги:
- Индекс пакета сборки
- Копирование транзакций во временный файл
- Добавление транзакций, которые были выполнены после начала упаковки
- Замена исходного FileStorage упакованным и повторное его открытие в режиме чтения / записи
Обычно я наблюдаю за процессом с помощью комбинации top
, vmstat
/ dstat
, watch ls -la var/filestorage
.
Как уже упоминал Гейр, у вас может быть отдельный ZEO-клиент, посвященный упаковке.Это было разумно, так как вы вызывали упаковку из заблокированного до завершения упаковки.Теперь нет необходимости, если вы используете ZEO.ZEO-сервер предоставляет утилиту zeopack
, которая подключается напрямую к ZEO (нет необходимости в выделенном клиенте ZEO) и инициирует упаковку FileStorage.Одним из преимуществ является отсутствие необходимости в пароле, только правильные разрешения для доступа к сокету управления ZEO.
Процесс упаковки
Поскольку упаковка выполняется сервером ZEO (даже не сервером, а самим FileStorage), возможностьправильное сообщение о прогрессе клиенту ZEO ограничено.Протокол ZEO не был предназначен для передачи информации такого типа.
IMHO FileStorage сам по себе может быть более многословным при передаче через файл журнала того, что он делает прямо сейчас.Может быть встроен какой-то прогресс. И если вы чувствуете, что вам нужен индикатор прогресса, то вы можете создать какой-то канал обратной связи через модуль регистрации обратно в ZEO-клиент / Zope-экземпляр, чтобы передать его обратно в браузер.
Производительность при упаковке
Поскольку упаковка FileStorage является довольно интенсивной работой с диском, она снижает пропускную способность дисковой подсистемы.Кроме того, он удаляет дисковый кэш (в случае большего FileStorage), который влияет на производительность диска даже после завершения упаковки, так как кэши должны быть снова разогреты.Возможные улучшения, которые приводят к увеличению времени упаковки, но меньшему влиянию на систему в FileStorage:
- возврат к
O_DIRECT
операциям (не трогать файловый кеш) - уменьшение приоритета планирования диска (
ionice
в Linux) для потока, выполняющего упаковку - скорость дросселирования упаковки