Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
RESTORE больших таблиц
|
|||
|---|---|---|---|
|
#18+
День добрый всем! Ситуация. В базе есть довольно большая таблица (несколько десятков миллионов записей). Делаю backup в формате plain text (хотя, пробовал потом и compressed, результат тот же). По умолчанию pg_backup формирует такой файл, при restore которого заполнение таблиц данными происходит при помощи COPY (а не INSERT). Всё вроде бы нормально. Но! Когда я делаю restore этого бекапа происходит вот что: restore при обработке COPY этой большой таблицы постепенно сжирает всю память, и физическую, и виртуальную. В итоге – вываливается нафиг. И всё. Я конечно понимаю, что допустим, мог бы создать своп побольше. Но это же не выход. А если бы таблица была ещё больше? Ситуацию в итоге разрулил, отказавшись от бекапа с COPY, и применив бекап с INSERTами. Но такой restore ресторится сутки. То есть, очень долго. Никто с такой фигнёй не сталкивался? Или, может, кто что подскажет? :) Что стоит: Postgesql 8.2.6 на Centos 5.1 x86_64. Дело было в январе. Тогда это был самый распоследний постгрес. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2008, 21:54 |
|
||
|
RESTORE больших таблиц
|
|||
|---|---|---|---|
|
#18+
вообще не должно такого происходитъ. восстановление осуществляет psql и эта утилита память не жрет. Память кушает бакенд постгреса к которому конектится psql. Сколько памяти будет кушатъ бакенд посгреса и в каких случаях -- это определяет postgresql.conf. я у себя посмотрел: во время восстановления базы ~10G ( COPY) бакенд занимает в примерно 500М. RHEL 4.6 x86_64, postgresql-8.1.11 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2008, 00:24 |
|
||
|
RESTORE больших таблиц
|
|||
|---|---|---|---|
|
#18+
Совершенно верно, восстановление осуществляет psql, и память ест процесс постгреса, я это и имел в виду. Сейчас ещё раз просмотрел доку по конфигурации сервера, и не нашёл, чтобы где-то задавалось количество памяти, которую будет кушать сервер. Подскажи, если знаешь, pls. Единственное, что каким-то боком похоже, это настройка количества памяти, доступной процессу – параметр ОС, настраиваемый с помощью ulimit. Попробую ограничить, хотя, почему-то сомневаюсь, что поможет. В принципе, и давно это было, и проблему, вроде бы, кое-как решил, но что-то здесь не то :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2008, 11:53 |
|
||
|
RESTORE больших таблиц
|
|||
|---|---|---|---|
|
#18+
324f4 Всё вроде бы нормально. Но! Когда я делаю restore этого бекапа происходит вот что: restore при обработке COPY этой большой таблицы постепенно сжирает всю память, и физическую, и виртуальную. В итоге – вываливается нафиг. И всё. Интересен следующий вопрос: а бэкап/восстановление делается целиком всей базы Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2008, 13:27 |
|
||
|
RESTORE больших таблиц
|
|||
|---|---|---|---|
|
#18+
Sad Spirit кстати хороший вопрос. Т.е, вопрос к автору: создается-ли таблица заново или COPY/INSERT идет в стартую таблицу? Даже не обязательно триггеры могут быть причиной, всякие CHECK constrains тоже могут "помочь". разница тут такая: COPY: одна транзакция, INSERT: много разных транзакций. 324f4 по поводу памяти с конфиге. там всего несколько параметров которые имеют значение, гляньте что у вас стоит в этих параметрах (см.ниже). Размер таблиц (без индексов) о которых удет речь у вас какой, 1-10 GB? Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2008, 01:45 |
|
||
|
RESTORE больших таблиц
|
|||
|---|---|---|---|
|
#18+
PS: ulimit тут не поможет. бакенд постгреса просто зависнет при копировании или вообще упадет с ошибкой вроде ENOMEM 'cannot allocate'. вообще гляньте на .sql файл из которого вы восстанавливаете. правильный порядок действий там должен быть такой: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2008, 02:02 |
|
||
|
RESTORE больших таблиц
|
|||
|---|---|---|---|
|
#18+
Sad Spirit А ведь таки да! Хитрый потабличный бекап. И, действительно, сначала создаются триггеры, constraints и пр., а затем заливаются данные COPY. И хотя на "большую" таблицу триггеров нет, а есть только PK, FK и индексы, но мысль понятна. Спасибо. Konstantin~ По поводу названных вами параметров – не менял, все по умолчанию. Да и порядок величин этих параметров никак не сравним с общим объёмом ОЗУ. Размер большой таблицы, о которой идёт речь, без индексов около 7 ГБ. Ещё раз, всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2008, 22:09 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=264&tid=2004145]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
28ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 307ms |

| 0 / 0 |
