Thread: ERROR: out of memory
Добрый День помогите разобраться... пытаюсь ресторить такую вот табличку CREATE TABLE awp_cards.idcard_idterm ( idcard int4 NOT NULL, idterm int4 NOT NULL, datetimerec timestamp NOT NULL DEFAULT ('now'::text)::timestamp(6) without time zone, CONSTRAINT idcard_idterm_pkey PRIMARY KEY (idcard, idterm), CONSTRAINT idcard_fkey FOREIGN KEY (idcard) REFERENCES awp_books.idcard (idcard) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT idterm_fkey FOREIGN KEY (idterm) REFERENCES awp_books.idterm (idterm) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITHOUT OIDS; ресторю след. образом: cat ./1732.dat | psql -h host -d Base -c 'COPY awp_cards.idcard_idterm (idcard, idterm, datetimerec) FROM stdin;' спустя некоторое время вываливается: ERROR: out of memory DETAIL: Failed on request of size 32. файлик 1732.dat весит >1,5GB (>44M records) какие параметры крутить чтоб не вываливалось? где накосячил? еще попутно вопрос - начиная с некоторых пор (недавно, но уже стабильно) все запросы тормозят, понимаю что накосячино, но непойму где ковырять... я так понимаю проблема с разделяемой памятью и иже с ней, так как довольно много таблиц перевалило за 10мега записей, и теперь посгресу тяжело... постоянно роется в свопе. Выставлял shared_memory в 1.5G - не помогло... где еще надо крутить? система: FreeBSD 5.4-RELEASE-p22 СУБД: PostgreSQL 8.1.10 железка с 2GB оперативки и 20G свопа sudo sysctl kern.ipc. kern.ipc.maxsockbuf: 262144 kern.ipc.sockbuf_waste_factor: 8 kern.ipc.somaxconn: 128 kern.ipc.max_linkhdr: 16 kern.ipc.max_protohdr: 40 kern.ipc.max_hdr: 56 kern.ipc.max_datalen: 152 kern.ipc.nmbclusters: 25600 kern.ipc.piperesizeallowed: 1 kern.ipc.piperesizefail: 0 kern.ipc.pipeallocfail: 0 kern.ipc.pipefragretry: 0 kern.ipc.pipekva: 409600 kern.ipc.pipes: 44 kern.ipc.maxpipekva: 16777216 kern.ipc.msgseg: 2048 kern.ipc.msgssz: 8 kern.ipc.msgtql: 40 kern.ipc.msgmnb: 2048 kern.ipc.msgmni: 40 kern.ipc.msgmax: 16384 kern.ipc.semaem: 16384 kern.ipc.semvmx: 32767 kern.ipc.semusz: 332 kern.ipc.semume: 40 kern.ipc.semopm: 100 kern.ipc.semmsl: 240 kern.ipc.semmnu: 120 kern.ipc.semmns: 240 kern.ipc.semmni: 40 kern.ipc.semmap: 256 kern.ipc.shm_allow_removed: 0 kern.ipc.shm_use_phys: 0 kern.ipc.shmall: 549011456 kern.ipc.shmseg: 128 kern.ipc.shmmni: 192 kern.ipc.shmmin: 1 kern.ipc.shmmax: 549011456 kern.ipc.numopensockets: 164 kern.ipc.maxsockets: 25600 kern.ipc.nsfbufsused: 0 kern.ipc.nsfbufspeak: 2 kern.ipc.nsfbufs: 6656 из postgresql.conf # RESOURCE USAGE (except WAL) #--------------------------------------------------------------------------- # - Memory - shared_buffers = 65536 work_mem = 20480 # - Free Space Map - max_fsm_pages = 256000 max_fsm_relations = 8000 -- Malsaĝulon favoras feliĉo
Alexander Kuprijanov wrote: > Добрый День > > помогите разобраться... > > пытаюсь ресторить такую вот табличку > > CREATE TABLE awp_cards.idcard_idterm > ( > idcard int4 NOT NULL, > idterm int4 NOT NULL, > datetimerec timestamp NOT NULL DEFAULT ('now'::text)::timestamp(6) without > time zone, > CONSTRAINT idcard_idterm_pkey PRIMARY KEY (idcard, idterm), > CONSTRAINT idcard_fkey FOREIGN KEY (idcard) > REFERENCES awp_books.idcard (idcard) MATCH SIMPLE > ON UPDATE NO ACTION ON DELETE NO ACTION, > CONSTRAINT idterm_fkey FOREIGN KEY (idterm) > REFERENCES awp_books.idterm (idterm) MATCH SIMPLE > ON UPDATE NO ACTION ON DELETE NO ACTION > ) > WITHOUT OIDS; > > ресторю след. образом: > > cat ./1732.dat | psql -h host -d Base -c 'COPY awp_cards.idcard_idterm > (idcard, idterm, datetimerec) FROM stdin;' > > спустя некоторое время вываливается: > > ERROR: out of memory > DETAIL: Failed on request of size 32. Если есть возможность посмотреть stderr от PG при возникновении этой ошибки - там должна быть статистика по использованию памяти, есть ли возможность ее прислать? В любом случае, скорее всего ошибка вызвана наличием FOREIGN KEY в таблице, если их убрать на время копирования - проблема должна исчезнуть. > > файлик 1732.dat весит >1,5GB (>44M records) > > какие параметры крутить чтоб не вываливалось? где накосячил? > > > еще попутно вопрос - начиная с некоторых пор (недавно, но уже стабильно) все > запросы тормозят, понимаю что накосячино, но непойму где ковырять... я так > понимаю проблема с разделяемой памятью и иже с ней, так как довольно много > таблиц перевалило за 10мега записей, и теперь посгресу тяжело... постоянно > роется в свопе. Выставлял shared_memory в 1.5G - не помогло... где еще надо > крутить? Как часто делается vacuum для тормозящих таблиц? Regards, Alexey.