Thread: ERROR: out of memory

ERROR: out of memory

From
Alexander Kuprijanov
Date:
Добрый День

помогите разобраться...

пытаюсь ресторить такую вот табличку

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

Re: ERROR: out of memory

From
Alexey Klyukin
Date:
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.