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

RE: Rendimiento sin COMMIT

From: "Juan Carlos Barranco de Paz" <jcb(at)greccosoft(dot)es>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Rendimiento sin COMMIT
Date: 2008-06-13 12:56:50
Message-ID: 004d01c8cd54$f2aed470$d80c7d50$@es (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
<jcb(at)greccosoft(dot)es> escribió:
> Hola, despues de darme bastantes porrazos intentando hacer un commit en
> pl/pgsql, veo que ya se ha hablado bastante y veo que no se puede.

>No te sientas solo, yo también invertí tiempo en eso inútilmente. Cada
>llamado a pl es una transacción en sí.

>
> Tengo un proceso en pl/pgsql que me crea 4 tablas de datos, de estas 2 de
> ellas pueden tener unos 6 millones de registros cada una

>Si no tienen constraints, todo bien. De todas formas, no creo que sea
>una buena idea crear tablas dentro de un sp..

> y posteriormente
> tengo que leer datos de una de las grandes , utilizar una temporal y
> actualizar la otra apoyándome en esta temporal.
>
> Mi preguta es , si hasta que no ha terminado de hacer la función no hace
el
> commit, ¿Qué rendimiento tendrá?, ¿tiene estadísticas de esas tablas?,
> ¿utiliza los índices?

No, no utilizará las estadísticas. El motor va a pensar que las tablas
están vacías.

>
> ¿obtendria un mejor rendimiento creando funciones independientes para
crear
> cada tabla (y asi hacer el commit) y llamarlas una a una desde sql?

Definitivamente, sí.
En mi opinión, creo que lo mejor es
1) crear las tablas y llenarlas
2) commitear, vacuum analyze
3) correr la actualización desde tablas temporales de la que hablás.

Saludos,
Silvio

´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´
´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´
He probado en una función pl/pgsql  haciendo un ANALYZE como me apunto Jaime
y tarda mas o menos igual que haciéndolo por separado desde SQL.

Pero quiero probar modificar mediante un cursor pero me esto volviendo loco
con la definición, no se donde esta mal :

CREATE OR REPLACE FUNCTION prueba_1(dw01 dw01conf)
  RETURNS smallint AS
$BODY$
DECLARE
jcb	cursor for 	select  *  
			 from dw21vent  
			 where	empresa = dw01.empresa 
			 order by empresa,articulo,tiempo for update;

dw21		dw21vent%ROWTYPE;
......
BEGIN
		

	OPEN jcb;

	LOOP		
		FETCH jcb INTO dw21; 
		EXIT WHEN NOT FOUND;	
..........		
........
		update	dw21vent 		
		set		ult_compra		=	t.ult_compra
		where 	CURRENT OF  jcb;

	END LOOP;

	CLOSE jcb;

	RETURN 1;
END;

Obtengo este error :

ERROR:  error de sintaxis en o cerca de «OF»
LINE 1: update dw21vent set ult_compra =  $1  where CURRENT OF  $2 
                                                            ^
QUERY:  update dw21vent set ult_compra =  $1  where CURRENT OF  $2 
CONTEXT:  SQL statement in PL/PgSQL function "prueba_1" near line 85

********** Error **********

ERROR: error de sintaxis en o cerca de «OF»
Estado SQL:42601
Contexto:SQL statement in PL/PgSQL function "prueba_1" near line 85



 

__________ Information from ESET NOD32 Antivirus, version of virus signature
database 3184 (20080613) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com
 


In response to

Responses

pgsql-es-ayuda by date

Next:From: Alvaro HerreraDate: 2008-06-13 15:28:38
Subject: Re: Rendimiento sin COMMIT
Previous:From: Silvio QuadriDate: 2008-06-13 12:22:42
Subject: Re: Consulta teoria SQL (FK a dos tablas).

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