Как обеспечить быстрое время запуска Mnesia - PullRequest
5 голосов
/ 28 декабря 2008

Erlang с mnesia / dets славится медленным временем запуска после сбоя. В основном та же проблема, что и с fsck на старых файловых системах.

Но я также испытываю медленное время запуска после регулярного выключения: около 8 минут для 250 МБ данных на диске на мощной машине.

Так что я должен сделать что-то особенное при выключении, кроме того, чтобы набрать q ().? Есть ли способ ускорить время запуска?

Ответы [ 4 ]

3 голосов
/ 21 января 2009

Вещи, которые я узнал до сих пор:

  • disk_only_tables, кажется, приводит к намного более длительное время запуска, чем disk_tables
  • вызова mnesia:create_table() с новым типом таблицы недостаточно для изменения типа таблицы. Используйте mnesia:change_table_copy_type()
  • Кажется, что disk_only_tables не сжимаются и не загружаются быстрее, если вы удаляете элементы.

Я решил проблему, решив проблему с типом таблицы в двух таблицах и уменьшив размер базы данных до 4 МБ.

1 голос
/ 24 июля 2009

Из документов Mnesia:

-mnesia no_table_loaders NUMBER указывает номер параллельной таблицы грузчики во время старта. Больше грузчиков может хорошо, если задержка в сети высокая или если много таблиц содержит мало записей. Значение по умолчанию: 2.

Если у вас много таблиц, это позволит вам загружать их параллельно. Но это не ускорит время запуска для одного стола. Для этого лучше всего иметь маленькие таблицы, которые можно выполнить, фрагментировав их.

1 голос
/ 02 января 2009

q () должен отправить сигнал остановки в приложение mnesia, которое совпадает с командой application: stop (mnesia). Я бы порекомендовал попытаться использовать команду mnesia: stop (), чтобы красиво ее выключить.

1 голос
/ 28 декабря 2008

В вашем супервизоре, после того, как все процессы, которые пишут в mnesia, остановлены, вы должны позвонить:

application:stop(mnesia)

Это правильно отключит мнезию на этом узле.

...