Более интерактивная упаковка ZODB

Текущая функциональность "Pack database" для управления ZMI немного грубовата.

1) Возможно ли иметь какой-то индикатор прогресса для веб-интерфейса? Например. один сообщает, сколько минут / часов осталось, давая хотя бы какую-то оценку

2) Как упаковка ZODB влияет на отзывчивость сайта? Все транзакции заблокированы?

3) Доступны ли какие-либо сценарии командной строки с индикатором выполнения, чтобы вы могли сделать это из клиента командной строки ZEO?

4) Хоть какой-то маркер лога для выхода из системы... [ИНФО] Готово 30%... Осталось 3:15


person Mikko Ohtamaa    schedule 02.03.2011    source источник


Ответы (4)


Анатомия упаковки

Упаковка ZODB FileStorage — это процесс выборочного копирования данных из одного файла в другой (только транзакции «моложе» указанного возраста). Перед началом копирования в память встраивается некоторый программный индекс, чтобы помочь в этом процессе. Таким образом, вся упаковка ZODB состоит из следующих шагов:

  1. Указатель строительного пакета
  2. Копирование транзакций во временный файл
  3. Добавление транзакций, которые были выполнены после начала упаковки
  4. Замена оригинального 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

Рекомендуемый способ упаковки для больших сайтов — запускать ее на отдельном экземпляре ZEO, выделенном для таких задач, и при этом вообще не прослушивать http-запросы.

Это также устранит необходимость в каких-либо запрошенных функциях.

person Geir Bækholt    schedule 03.03.2011
comment
Есть ли где-нибудь инструкции, как выделить один экземпляр ZEO для упаковки? Можно ли таким образом получать отчеты о состоянии? - person Mikko Ohtamaa; 04.03.2011

Это не вопрос, а запрос функции. Его следует ввести по адресу http://plone.uservoice.com/ или еще лучше по адресу https://bugs.launchpad.net/zope2, поскольку ZMI является специфической функцией Zope 2.

person Hanno Schlichting    schedule 02.03.2011
comment
Это был вопрос, пока я не получил ответ, что такой функции нет :) Это очень простая функция, поэтому пользователи могут предположить, что она просто есть :) - person Mikko Ohtamaa; 04.03.2011

1) Такого индикатора нет, и, возможно, будет сложно его реализовать (хотелось бы увидеть хоть какой-нибудь индикатор прогресса через систему логирования Zope)

2) не заблокирован, но в зависимости от фазы упаковки вы можете увидеть высокую загрузку операций ввода-вывода и ЦП

3) no

4) no

person Andreas Jung    schedule 03.03.2011