Skip site navigation (1) Skip section navigation (2)

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:44:33
Message-ID: CAGYOd3oipK7RiK6jmHA1-b-2MvwPV+Bg6y3tx0WwpEAb_3jQig@mail.gmail.com (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
Si puede ser k crearas un script que se llamara por cron
unos mometos ates para crear la tabla

Y pues has tus pruebas y comentanos como te fue!! gracias y excelente dia!!
=)

El 23 de marzo de 2012 11:34, Juan Carlos Ramirez Zambrano <
juancarlosrz(dot)78(at)gmail(dot)com> escribió:

> tienes razon, de acuerdo a lo que estado revisando en manuales y foros, se
> recomienda tener el indice del campo con el que realizas la aprticion.
>
> Voy a agregar el indice y a realizar pruebas, para ver que tal se comporta.
>
> O la otra opcion seria separa el proceso de crear la tabla o solo dejar el
> trgger para el insert de la tabla del dia.
>
> El 23 de marzo de 2012 11:13, Miguel Angel Hernandez Moreno <
> miguel(dot)hdz(dot)mrn(at)gmail(dot)com> escribió:
>
> Fijate que hay otro dato
>>
>> Tu haces el select con base a tu campo "recibo"
>>
>> select 'tabla_'||substr(NEW.recibo::text,1,4) ||'_'||substr(NEW.recibo::text,6,2)
>> ||'_'|| substr(NEW.recibo::text,9,2) into nombre_tabla;
>>
>> Y tus indices estan
>> -fecins
>> -hreal, linea, economico
>>
>> Te falta el ndice para tu campo recibo que es por donde partcionas
>>
>> --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;';
>>
>> Puede ser eso
>> El 23 de marzo de 2012 11:10, Juan Carlos Ramirez Zambrano <
>> juancarlosrz(dot)78(at)gmail(dot)com> escribió:
>>
>> Ok deja revisar lo que comentas, en cuanto al mantenimiento no creo ya
>>> que se tiene activo el autovaccum.
>>>
>>> Saludos.
>>>
>>> LI. Juan Carlos Ramirez Z.
>>>
>>>
>>>
>>> El 23 de marzo de 2012 11:04, Miguel Angel Hernandez Moreno <
>>> miguel(dot)hdz(dot)mrn(at)gmail(dot)com> escribió:
>>>
>>> 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
>>>>
>>>>
>>>
>>
>>
>> --
>> ISC Miguel Angel Hernandez Moreno
>>
>>
>


-- 
ISC Miguel Angel Hernandez Moreno

In response to

Responses

pgsql-es-ayuda by date

Next:From: maria teresa tarquino chavezDate: 2012-03-23 19:54:36
Subject: Generar numeros aleatorios enteros de 4 digitos
Previous:From: Juan Carlos Ramirez ZambranoDate: 2012-03-23 17:34:41
Subject: Re: Problema con insert en tabla particionada

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group