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

Re: es posible acelerar un update?

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Ernesto Quiñones <ernestoq(at)gmail(dot)com>
Cc: ListaPostGres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: es posible acelerar un update?
Date: 2008-01-30 00:13:11
Message-ID: 20080130001311.GD27546@alvh.no-ip.org (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
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.

In response to

Responses

pgsql-es-ayuda by date

Next:From: ManuDate: 2008-01-30 00:26:30
Subject: Nuevo en el foro
Previous:From: Henrry Joshney Servitá SánchezDate: 2008-01-30 00:01:06
Subject: comandos en postgresql

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