Re: Trabajando con Grandes BD

From: Vida Luz <vlal(at)ns(dot)ideay(dot)net(dot)ni>
To: Leonel <lnunez(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Trabajando con Grandes BD
Date: 2007-03-14 19:54:11
Message-ID: Pine.LNX.4.64.0703141353370.13024@ns.ideay.net.ni
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

con explain este es el costo que se tiene: aporx unos 2.7 minutos.

c=# explain analyze SELECT count(distinct cliente_cod) FROM dm.venta GROUP
BY geren_cod;
QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------------
GroupAggregate (cost=421813.88..437247.45 rows=3 width=14) (actual
time=159638.993..165536.431 rows=3 loops=1)
-> Sort (cost=421813.88..426958.39 rows=2057804 width=14) (actual
time=152000.054..158792.629 rows=2057804 loops=1)
Sort Key: geren_cod
-> Seq Scan on venta (cost=0.00..180972.04 rows=2057804
width=14) (actual time=3.358..29855.519 rows=2057804 loops=1)
Total runtime: 166281.479 ms
(5 rows)

On Thu, 15 Mar 2007, Leonel wrote:

> On 3/15/07, Vida Luz <vlal(at)ns(dot)ideay(dot)net(dot)ni> wrote:
>> Hola a todos, tengo una BD de aproximadamente 3 GB, el postgresql esta en
>> un fedora core 6 que tiene:
>>
>> Intel(R) Xeon(TM) CPU 2.80GHz
>> 2 GB de memoria
>> 80 GB de disco duro
>>
>> El equipo es un dell
>>
>> en el psotgresql.cong afine la variables
>>
>> shared_buffers = 26214
>> effective_cache_size = 26214
>>
>> estas dos quedaron ajustado a un 20% de lo que tengo de memoria RAM, y
>> ademas ajuste otra variable:
>>
>> work_mem = 83886
>>
>> Tengo creados los idnices segun el uso que hare en los queries, sin
>> embargo cada consulta tarda aprox unos 3 minutos., por ejemplo la
>> siguiente tabla tiene 2057804 registros y su tamaño es como de 8 GB, al
>> hacer la consulta:
>>
>> SELECT count(distinct cliente_cod) FROM dm.venta GROUP BY geren_cod;
>>
>> tarda como 4 a 5 minutos.
>>
>> Que sugerencias me dan con BD grandes ?
>> ---------------------------(fin del mensaje)---------------------------
>> TIP 2: puedes desuscribirte de todas las listas simultáneamente
>> (envíe "unregister TuDirecciónDeCorreo" a majordomo(at)postgresql(dot)org)
>>
>
> y el EXPLAIN que dice ?
>
>
>
>From pgsql-es-ayuda-owner(at)postgresql(dot)org Wed Mar 14 17:03:12 2007
Received: from localhost (maia-1.hub.org [200.46.204.191])
by postgresql.org (Postfix) with ESMTP id 32FB49FB3A5
for <pgsql-es-ayuda-postgresql(dot)org(at)postgresql(dot)org>; Wed, 14 Mar 2007 17:03:11 -0300 (ADT)
Received: from postgresql.org ([200.46.204.71])
by localhost (mx1.hub.org [200.46.204.191]) (amavisd-new, port 10024)
with ESMTP id 90729-01 for <pgsql-es-ayuda-postgresql(dot)org(at)postgresql(dot)org>;
Wed, 14 Mar 2007 17:03:06 -0300 (ADT)
X-Greylist: domain auto-whitelisted by SQLgrey-1.7.4
Received: from web34711.mail.mud.yahoo.com (web34711.mail.mud.yahoo.com [209.191.68.160])
by postgresql.org (Postfix) with SMTP id 8655A9FB208
for <pgsql-es-ayuda(at)postgresql(dot)org>; Wed, 14 Mar 2007 17:03:06 -0300 (ADT)
Received: (qmail 4195 invoked by uid 60001); 14 Mar 2007 20:03:05 -0000
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
s=s1024; d=yahoo.com;
h=X-YMail-OSG:Received:Date:From:Subject:To:Cc:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-ID;
b=5Sle3H0nqG+Qrt049LO7SeuiudFuBVgl7m+DMuYcoYlTSPJmNwC+xqUV6K52dXBMiXIV4+5KmhlVCa5NQTN1SCX/i7S7v52MbbiozsuCDJ7XPf5zk/QrK6fAcLxhFbob6/AK11TH9lm8TUmZ7O3lSo2UCjkMYItroldvX9NnPVc=;
X-YMail-OSG: .5xn9ToVM1mG8aLAMvVbr6CNHTx517QfibseCFqI
Received: from [190.64.29.209] by web34711.mail.mud.yahoo.com via HTTP; Wed, 14 Mar 2007 15:03:05 CDT
Date: Wed, 14 Mar 2007 15:03:05 -0500 (CDT)
From: Gabriel Colina <colina_movil(at)yahoo(dot)com>
Subject: Re: Simbolos dentro de cadenas y el codigo propuesto
To: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
Cc: Gabriel Ferro <gabrielrferro(at)yahoo(dot)com(dot)ar>, pgsql-es-ayuda(at)postgresql(dot)org
In-Reply-To: <20070314190543(dot)GQ11837(at)alvh(dot)no-ip(dot)org>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Message-ID: <474935(dot)2416(dot)qm(at)web34711(dot)mail(dot)mud(dot)yahoo(dot)com>
X-Virus-Scanned: Maia Mailguard 1.0.1
X-Spam-Status: No, hits=3.201 tagged_above=0 required=5 tests=AWL, BAYES_50,
DNS_FROM_RFC_ABUSE, DNS_FROM_RFC_POST, DNS_FROM_RFC_WHOIS
X-Spam-Level: ***
X-Archive-Number: 200703/432
X-Sequence-Number: 25687

--- Alvaro Herrera <alvherre(at)commandprompt(dot)com>
escribió:
> Humm, quizas me perdi ese mail, cuales eran esas
> alternativas?

No tengo por que no creerte creo que sos un gran
aporte a PostgreSQL te envio esas propuestas tal cual
las escribi, pongo lo que hago en Visual y lo que hago
del lado de PostgreSQL

Ejemplo 1
Para mi muy apropiado.

Creo una funcion en el lenguaje PLPGSQL, en
postgresql, (aclaro que si alguna palabra no la pongo
bien por ejemplo plpgsql no se escribe asi, me importa
poco, debatan sobre conceptos por favor).
Retomando el tema aca hay una funcion a la que
pasandole parametros desde visual borra una tabla
auxiliar, la llena de datos le hace algun insert y
podria ser un update en fin todo.
Incluso uno de los select de la insercion invoca otra
funcion.

CREATE OR REPLACE FUNCTION
"central"."fnc_imp_ficha_articulo" (text, date,
integer) RETURNS boolean AS
$body$
begin
delete from central.imp_ficha_stock;
insert into central.imp_ficha_stock
(id_local,sucursal,
empresa,id_lin,documento,serie,numero,fecha,
id_articulo,entradas,salidas,saldos)
select id_local,sucursal,
empresa,id_lin,documento,serie,numero,fecha,
id_articulo,entradas,salidas,saldos from
central.fnc_ficha_articulo($1,$2,$3);
return true;
end;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT
SECURITY INVOKER;

Llamada desde visual

DtaSysGeGcFunc.central_fnc_imp_ficha_articulo
TxtDatos.Text, DTPDESDE.Value,
Val(DataComboLocal.BoundText)

Donde dtasysgegcfunc es igual a un dataenviroment
es un procedimiento del dataenviroment que llama a la
funcion, cuando creas el dataenviroment y su conecion
al DSN podes definir comando o procedimiento,
eligiendo procdimiento nos muestras las funciones de
la base de datos y elgiendo ejecuta esta pasando los
parametros que la funcion exige. aca se representa por
.central_fnc_imp_ficha_articulo, donde central_ es el
nombre del esquema y el punto visual lo representa con
_
TxtDatos.Text = textbox
DTPDESDE.Value = dtpicker
Val(DataComboLocal.BoundText) el valor numerico del
boundtext de un datacombobox.

Esto es facil y muy simple, se usa igual que en M$.

Ejemplo 2.

Se crea la funcion en pgplsql en este caso pongo otra
de ejemplo, pero puedo usar la misma

CREATE OR REPLACE FUNCTION
"central"."fnc_ing_lineas_doc" (bigint) RETURNS date
AS
$body$
declare
v_id_cab alias for $1;
curtime date;
BEGIN
curtime :='now';
delete from central.documentos where id_cab = $1;
insert into central.documentos
(id_cab,id_articulo,id_presupuesto,cantidad,fob,cif,costo_unitario,

costo_unit_final,precio_venta_unitario,dto1,dto2,impuesto_col_1,impuesto_col_2,ubicacion,

conteo)
select
id_cab,id_articulo,id_presupuesto,cantidad,fob,cif,costo_unitario,

costo_unit_final,precio_venta_unitario,dto1,dto2,impuesto_col_1,impuesto_col_2,ubicacion,

conteo from central.aux_lineas_doc where id_cab = $1;

delete from central.aux_lineas_doc where id_cab = $1;

RETURN curtime;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT
SECURITY INVOKER;

y desde un adodatacontrol, desde una conexion definida
por codigo o desde un dataenviroment como es este caso
ejecuto esto.

DtaSysGc.cnSysGeGc.Execute "select * from
central.fnc_ing_lineas_doc(" &
AdoCabezales.Recordset.Fields("id_cab") & ")"

Es Facil.

3 Metodo parecido al que plantea mi tocayo Gabriel
Ferro, a quien confieso le debo el hecho de darle una
mano mejor, que la que le di en la pregunta anterior y
por lo cual le pido disculpas y espero compenzarlo con
esto.

Desde visual y sin crear una funcion en postgresql.

DtaSysGc.cnSysGeGc.Execute "insert into
central.documentos (id_articulo,id_cab,cantidad)
select '" & TxtDatos(0).Text & "' as id_articulo, " &
nCabezales & " as id_cab, " &
Abs(Val(Lbldatos(4).Caption)) & " as cantidad;"

Las comillas dobles encierran todo lo que se va a
ejecuttar, pero si miras esto previamente de un msgbox
o desde el depurador verias que lo que pasa es esto
insert into central.documentos
(id_articulo,id_cab,cantidad) select 'PH8' as
id_articulo, 924,123.45 as cantidad;

> > A mi tambien, quiza por que muchos tenemos la
> > necesidad de usar cotidanamente herramientas
> > productivas, puesto que somos varios (la manga de
> > profesionales trasnochados) que vos
> despectivamente
> > tratas, que usamos el tiempo de transoche por que
> en
> > el dia trabajamos para comer.
>
> Vamos, que no era despectiva la intencion, no tienes
> para que tomartelo
> a mal.

Bien pero asi parecia la respuesta, me alegro Alvaro
de que no sea asi por que te tengo en buena estima y
este tipo de cosas me llevo a apasionarme un poco
puesto que soy un militante en la vida.


> > Espero que no sea la luz del encandilameinto. Yo
> no
> > cambie Access por PostgreSQL vengo de M$ SQL que a
> > decir verdad cuenta con un Transform y un Pivot
> Table
> > y un trabajo de DataWorkHouse facil de implementar
> y
> > no hay que modificar un contrib para obtener n
> > columnas.

> Esta claro que hay algunas cosas que faltan en
> Postgres, de lo contrario
> yo no tendria nada que hacer. Pero trabajamos en
> ello ... supongo que
> si no tenemos PIVOT TABLE todavia es porque no ha
> habido presion
> suficiente de los usuarios. La siguiente pregunta,
> entonces, seria: ¿es
> PIVOT TABLE parte del estandar SQL? Si no lo es,
> cual es el constructo
> equivalente? Con eso ya podemos empezar a
> aproximarnos a los hackers
> para decir: "hey, falta esto, hagamoslo". Y si es
> bueno, no te quepa
> duda que alguien lo hara eventualmente (mas temprano
> que tarde si es que
> motivas a alguien para que lo haga, ya sea
> convenciendole de lo util que
> es o bien poniendo $$$).

Bien Alvaro, esto me pone contento, ya casi me mando
un unsuscribe por que no me bancaba lo que me parecia
algo arrogante, pero vamos bien y me quedo a dar
contribuciones entonces.

Resolvi algo en Pl/pgsql que hace algo similar al
PivotTable y en honor a la verdad las claves me la
dieron tu y Jaime, cuando andaban respondiendo sobre
el contrib de crosstab, el cual cuenta con dos
crosstab,1 crosstab2,1 crosstab3 y 1 crosstab4,
funciones que hacen tablas cartesianas, todas ellas
limitadas a la cantidad de columnas que sepas que va a
mostrar, puesto que apriori tenes que saber la
cantidad de datos diferentes que tiene la tabla para
los que van a formar las columnas.

Bueno yo cree contribm y contribn, me falta un poquito
de prolijidad para presentarlo, un poco a falta de
horas ya que eso lo hago desde las 23 en adelante
robandole horas al suenio. Pero creo que resuelve el
problema.

Tambien recuerdo haberte preguntado como se publica y
no encontre la respuesta, pero me parece esta una
buena oportunidad para que lo pongamos de nuevo en el
tapete.

> Tenias esa oportunidad cuando trabajabas con SQL
> Server? OK, tenias
> TRANSFORM pero si hubieras querido, no se, algo
> tipico de Postgres como
> por ej. la capacidad de hacer CREATE AGGREGATE,
> habrias podido ir donde
> el equipo de desarrollo a decirles "me gustaria
> agregar tal cosa..."??
Si.
En mi caso, caso particular podia escalar a los
laboratios de Microsoft. Microsoft Uruguay esta aca
solo por la gente que da soporte a estas tecnologias.
Y hay tres empresas que ayudan desde aca al soporte de
America del Sur y America Latina, el grupo Expert y el
grupo de InfoCorp. con excelentes tecnicos capacitados
en "ciudad microsoft" como se conoce en la interna.

Pero no es el punto, por que mi partiuclaridad no
resuelve la de la sociedad ni de que el concepto del
Software Libre es un concepto mejor.


> > El otro dia hablabas despectivamente de PHP,
> > refiriendote a una aplicacion, creo que PHP no es
> de
> > M$.
>
> Obviamente no todo lo malo viene de MS ;-) Mi
> opinion personal de PHP
> es bastante baja; habiendo sido un entusiasta, me
> decepcionaron los
> resultados que obtuve y hoy por hoy usaria otros
> lenguajes.
>
> > De todos modos comparto contigo con liberarnos de
> M$,
> > pero a esta altura se que por otros motivos,
> puesto
> > que la gente con que me comunico normalmente,
> respetan
> > a los tranochados, esos que con desprecio hace 14
> > anios vos te sentabas al lado,
>
> Ja ja ja ... no, yo no me sentaba con desprecio al
> lado de ellos. Me
> acuerdo que varios de ellos preguntaban si desde VB
> podia uno conectarse
> a ODBC, y yo quedaba "marcando ocupado" porque no
> sabia lo que era ODBC.
> Si dije que eran trasnochados, es porque tenian
> bastante cara de haber
> estado trabajando todo el dia y el cansancio les
> salia por los poros,
> mientras que yo no tenia nada que hacer en todo el
> dia. Y por otro
> lado, mientras todos ellos tenian un motivo para
> hacer el curso y cosas
> con las que experimentar cuando llegaran a sus
> trabajos, yo estaba ahi
> solo para ver que podia sacar del curso.

Que suerte que decis eso, puesto que en mi
consideracion vos estas entre los mejores de Latam y
la linea de la genialidad y la soberbia es muy delgada
y la verdad que en vez de tratar de aportar, mi
proximo aporte seria unsuscribe, si entendia que aca
el intercambio era de forma clasista, por que
estariamos cambiando a M$ comercial, por Veleidad
personalista.

Ademas yo segui con la idea del encuentro de linux y
postgreSql y lo pantee en el foro de la gente de Linux
Uruguay, para ver de plantearle al gobierno y otras
instituciones aportaran infraestructura para hacer uno
aqui, justo donde M$ expone sus lanzamientos al
mercado.

La idea es invitar buenos exponentes de latam y pense
en gente como Alvaro, Jaime y algun otro de la lista,
y hacer un gran esfuerzo para que ustedes pudieran
venir y exponer.

Por Linux me gustaria tener a Gunnar y a alguien de
UTUTO.

Sinceramente ya he organizado eventos informaticos y
deportivos obteniendo apoyo del gobierno y no lo veo
dificil por la campania que el mismo esta haciendo de
Linux en Uruguay a nivel educativo.

Aprovecho que con este e-mail entendi tu espiritu y te
lo panteo.

Atte. Gabriel Colina

__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
Regístrate ya - http://correo.espanol.yahoo.com/

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Vida Luz 2007-03-14 19:56:47 Re: Trabajando con Grandes BD
Previous Message Miguel Bernilla Sánchez 2007-03-14 19:49:15 Re[4]: Simbolos dentro de cadenas