Re: es posible acelerar un update?

From: Ernesto Quiñones <ernestoq(at)gmail(dot)com>
To: ListaPostGres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: es posible acelerar un update?
Date: 2008-01-30 00:28:52
Message-ID: 2ba222580801291628x70888ae7oda1e940fe55bf32f@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Alvaro, justo para descartar que sea e procedido a eliminar mis
FK y ver si por ahi esta el problema, y no va por ese lado, demora tan
igual con ella que isn ellas (con ellas seguro demorara un poco mas)

tengo 6 indices en esa tabla, no son demasiado grandes, solo 1 o 2
columnas...podria ser eso?

estuve probando haciendo el update sobre la misma tabla pero con solo
500 registros que tenian un valor especifico y fue casi inmediato,
pero el otro update que tiene hace los 180k registros es el que demora
infinidad

saludos

2008/1/29, Alvaro Herrera <alvherre(at)commandprompt(dot)com>:
> Ernesto Quiñones escribió:
> > Hola amigos
> > tengo una tabla de 250k registros, tengo que correrle un update de mas
> > o menos 180k registros, el problema es que esta tomando bastante
> > tiempo, a veces mas de 15minutos, la tabla pasa por vacumm
> > continuamente y no tiene deletes solo procedimientos de insert diarios
> > que suben algo de 1000 registros nuevos diariamente
>
> Hmm, 250k registros deberian actualizarse mucho mas rapido que eso.
>
> alvherre=# create table foo (a int);
> CREATE TABLE
> alvherre=# insert into foo select * from generate_series(1, 250000);
> INSERT 0 250000
> alvherre=# \timing
> Mostrar tiempos está activado.
> alvherre=# update foo set a = a + 1;
> UPDATE 250000
> Duración: 3518,455 ms
> alvherre=# vacuum foo;
> VACUUM
> Duración: 281,051 ms
>
>
> Quizas tu problema tiene que ver con chequeos de FKs. ¿Tiene alguna FK
> la tabla? (En realidad creo que el problema pueden ser otras tablas que
> apunten a esta). Prueba un EXPLAIN ANALYZE del update: deberia mostrar
> el tiempo usado en revisar esto. Por ej
>
> alvherre=# explain analyze update foo set a = a + 10000000 where a > 200000;
> QUERY PLAN
> ---------------------------------------------------------------------------------------------------------------------------------
> Index Scan using foo_a_key on foo (cost=0.00..5182.19 rows=49640 width=10) (actual time=238.221..2111.175 rows=248000 loops=1)
> Index Cond: (a > 200000)
> Trigger for constraint bar_a_fkey: time=85402.641 calls=248000
> Total runtime: 97699.408 ms
> (4 filas)
>
>
> Ojo, hazlo en una transaccion y luego haz ROLLBACK, porque las acciones
> del UPDATE son ejecutadas.
>
> --
> Alvaro Herrera http://www.CommandPrompt.com/
> The PostgreSQL Company - Command Prompt, Inc.
>

--
Inscribete en las listas de APESOL
http://listas.apesol.org/mailman/listinfo

Visita
http://www.eqsoft.net
Manuales, noticias, foros, etc.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2008-01-30 00:44:54 Re: comandos en postgresql
Previous Message Manu 2008-01-30 00:28:09 Ayuda con el API de pgsql