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