Я создал файл дампа размером 21 МБ или около того:
pg_dump --format=tar --verbose --file=database.backup mydatabase
Когда я импортирую этот файл в Windows, выполняю:
pg_restore --dbname mydatabase --verbose database.backup
Это займет 1 час.
То же самое на 64-битных системах Ubuntu 10.10 займет около 7 часов!
Конечно, я говорю о тех же аппаратных характеристиках (Dell Studio XPS). Та же RAM, CPU и т. Д.
В обоих случаях я использую готовые конфигурации для PostgreSQL 8.4.7.
Возможно, конфигурация дистрибутивов другая ... Возможно, некоторая оптимизация, которую делает только дистрибутив Windows?
Дополнительная информация: В Windows 7 -> NTFS. В Ubuntu 10.10 -> ext4
Когда я делаю
pg_dump --format=tar --verbose --file=workspace/work/dumps/loaded.backup mydb
У меня занимает всего 5 секунд! Если я восстановлю пустой новый БД, сделав:
pg_restore --dbname mydb-2 --verbose workspace/work/dumps/loaded.backup
У меня всего 10 секунд. (Проблема решена? ... почти) Кажется, ребята из db экспортировали исходный дамп, используя разные параметры. Возможно, опция --inserts?
Большая разница между Windows и Ubuntu с использованием исходного дампа все еще беспокоит меня. Есть мысли по этому поводу?
Даже один час - это очень много для небольшого файла дампа размером 21 МБ. Мы восстанавливаем базы данных из сжатого файла дампа размером 2 ГБ примерно за 30 минут, но у нас может быть лучшее оборудование ;-)
Что следует прочитать в первую очередь:
http://www.postgresql.org/docs/8.4/static/populate.html
Все дело в твоей проблеме. Он расскажет вам, как быстро заполнить базу данных.
Дополнительный чаевые:
Для дополнительной информации:
Редактировать: Я упустил из виду, что вы сказали, что дамп занимает всего 21 МБ и даже не сжат. Даже 1 час - это очень много времени, чтобы восстановить этот объем данных. Не могли бы вы пролить свет на то, что находится на свалке? Какая структура таблицы, сколько индексов и какие? Функциональные показатели? Индексы GiST / GIN? Сколько данных создается после восстановления дампа?
Список рассылки PostgreSQL может быть лучшим местом для обсуждения этого.
Конфигурация PostgreSQL по умолчанию очень консервативна с точки зрения требований к ресурсам. Это означает, что во время массовой загрузки он должен выполнять очень частые контрольные точки (ваши журналы Postgres, вероятно, полны предупреждений контрольных точек).
Я подозреваю, что PostgreSQL в Windows может неправильно сбрасывать все на диск, поэтому контрольные точки не сильно влияют на производительность. Если это правда, это, конечно, плохо для целостности базы данных.
Если мои предположения верны, натыкаясь checkpoint_segments
до 50 в конфигурации Ubuntu должны заставить его работать аналогично Windows. (Есть много других настроек, но это самая важная для массовой загрузки)
Кроме того, что делает SHOW wal_sync_method
скажите об установке Ubuntu? Так должно быть fdatasync
для оптимальной производительности, но в некоторых версиях по умолчанию open_datasync
.
Попробуйте отключить автоочистку в своем postgresql.conf.
Если это не помогает, попробуйте дефрагментировать свой диск ...
Кроме того, мне интересно, какова была файловая система в обоих случаях?