Re: Problema con insert en tabla particionada

From: Miguel Angel Hernandez Moreno <miguel(dot)hdz(dot)mrn(at)gmail(dot)com>
To: Juan Carlos Ramirez Zambrano <juancarlosrz(dot)78(at)gmail(dot)com>
Cc: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Problema con insert en tabla particionada
Date: 2012-03-23 17:04:26
Message-ID: CAGYOd3o49d1naw=6sNaUSmeuv2HGgytjf2Cf1wW5NA7Ai3ykMA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola

Al parecer yo veo un select a information_schema checa el mantenimiento a
tu BD por que puede que
sea lento el select por lo mismo (SELECT * FROM information_schema.tables
WHERE table_name = nombre_tabla)

Gracias y excelente dia

El 22 de marzo de 2012 17:10, Juan Carlos Ramirez Zambrano <
juancarlosrz(dot)78(at)gmail(dot)com> escribió:

> Hola Lista, quiero consultar y ver si me pueden orientar con un problema
> que se me presento con los insert en una tabla particionada
>
> El problema se presento de la nada, se implemento un trigger para insertar
> los datos en tablas por dia, esta tabla recibio hasta las 14:00 horas
> 4,951,257 millones de registros, esto se implemento a las 00:00 horas y
> todo iva bien hasta las 14:00 horas cuando los inserte se empezaron hacer
> muy lentos, es decir a tardar casi 1 segundo por insert.
>
> Agradezco cualquier ayuda que me puedan proporcionar para poder solucionar
> este problema. Aqui dejo el trigger implementado.
>
> CREATE OR REPLACE FUNCTION monterrey.tabla_x_dia_v1()
> RETURNS trigger AS
> $BODY$
> DECLARE
> nombre_tabla text:='';
> BEGIN
> --Se obtiene la fecha a concatenar al nombre de la tabla
> select 'tabla_'||substr(NEW.recibo::text,1,4)
> ||'_'||substr(NEW.recibo::text,6,2) ||'_'|| substr(NEW.recibo::text,9,2)
> into nombre_tabla;
>
> --Validamos si existe la tabla continuamos solo con el insert
> IF NOT EXISTS (SELECT * FROM information_schema.tables WHERE table_name =
> nombre_tabla) THEN
> raise notice 'No existe la tabla, se crea como %',nombre_tabla;
>
> --Se ejecuta la creacion de la tabla correspondiete al dia
> EXECUTE 'CREATE TABLE monterrey.' || nombre_tabla || '( CHECK( recibo >=
> '''||
> substr(NEW.recibo::text,0,11)||' 00:00:00''' ||' and recibo<= '''||
> substr(NEW.recibo::text,0,11) ||' 23:59:59'')) INHERITS (esquema.tabla);';
>
> --Se asignan los permisos correspondientes
> EXECUTE 'GRANT ALL ON TABLE esquema.'||nombre_tabla||' TO " usuario ";';
> EXECUTE 'GRANT ALL ON TABLE esquema .'||nombre_tabla||' TO usuario ;';
> EXECUTE 'GRANT ALL ON TABLE esquema .'||nombre_tabla||' TO usuario ;';
> EXECUTE 'GRANT ALL ON TABLE esquema .'||nombre_tabla||' TO usuario ;';
> EXECUTE 'GRANT SELECT, UPDATE, INSERT ON TABLE
> esquema .'||nombre_tabla||' TO usuario;';
> EXECUTE 'GRANT SELECT, UPDATE, INSERT ON TABLE
> esquema .'||nombre_tabla||' TO usuario ;';
> EXECUTE 'GRANT SELECT, UPDATE, INSERT ON TABLE
> esquema .'||nombre_tabla||' TO usuario ;';
>
> --Se agrega la llave primaria de tabla
> EXECUTE 'ALTER TABLE esquema.'||nombre_tabla||' ADD PRIMARY KEY (unidad,
> economico, linea, hreal, recibo) USING INDEX TABLESPACE idx';
> --Se agregan sus indices
> EXECUTE 'CREATE INDEX idx_fecins'||nombre_tabla||' ON
> esquema.'||nombre_tabla||' USING btree
> (fecins) TABLESPACE idx;';
>
> EXECUTE 'CREATE INDEX idx_hreal_lin_eco'||nombre_tabla||' ON
> esquema.'||nombre_tabla||' USING btree
> (hreal, linea, economico) TABLESPACE idx;';
>
> END IF;
>
> --Ejecutamos el insert del regsitro nuevo
> EXECUTE 'insert into esquema.'|| nombre_tabla ||
> '(campo, campo1,
> campo2,fecha,lati,long,paro,distancia,causa,velp,velm,alarma,hora,
>
> recibo,operador,campo1,campo2,pasarela,momento,sub_del,baj_del,blo_del,ala_del,sub_tra,
> baj_tra, blo_tra,ala_tra,tipo,xy, panicos, aux_d, aux_t,oreja)
> values ('''|| NEW.unidad || ''','|| NEW.economico || ',' || NEW.linea ||
> ','''|| NEW.hreal || ''','|| NEW.lat || ','|| NEW.lon ||','|| NEW.paro
> ||','|| NEW.distancia ||
> ','''|| NEW.causa ||''',' || NEW.velp || ',' || NEW.velm || ',''' ||
> NEW.alarma || ''',' || NEW.hora || ',''' || NEW.recibo || ''',' ||
> NEW.operador || ',' || NEW.campo1 ||
> ',' || NEW.campo2 || ',' || NEW.pasarela || ',' || NEW.momento || ',' ||
> NEW.sub_del || ',' || NEW.baj_del || ',' || NEW.blo_del || ',' ||
> NEW.ala_del || ',' || NEW.sub_tra ||
> ',' || NEW.baj_tra || ',' || NEW.blo_tra || ',' || NEW.ala_tra || ','''
> || NEW.tipo || ''',''' || NEW.xy || ''',' || NEW.panicos || ',' ||
> NEW.aux_d || ',' || NEW.aux_t || ',' || NEW.oreja ||
> ');';
>
> RETURN NULL;
> END;
> $BODY$
> LANGUAGE plpgsql VOLATILE
> COST 100;
>
>
>
>
> Saludos.
>
> LI. Juan Carlos Ramirez Z.
>
> j <juancarlosrz(dot)78(at)gmail(dot)com>
>

--
ISC Miguel Angel Hernandez Moreno

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Juan Carlos Ramirez Zambrano 2012-03-23 17:10:03 Re: Problema con insert en tabla particionada
Previous Message ruben avila galindo 2012-03-23 16:48:47 Re: Ayuda para elegir hardware