Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Rendimiento en postgres

Estas en el tema de Rendimiento en postgres en el foro de PostgreSQL en Foros del Web. buenas estoy migrando una base de oracle a postgres y queria sacarme una duda para los que saben. Aclaro que tengo 0 experiencia en postgres ...
  #1 (permalink)  
Antiguo 19/08/2009, 07:22
 
Fecha de Ingreso: septiembre-2004
Mensajes: 407
Antigüedad: 20 años, 2 meses
Puntos: 1
Rendimiento en postgres

buenas estoy migrando una base de oracle a postgres y queria sacarme una duda para los que saben.
Aclaro que tengo 0 experiencia en postgres , puede ser que haya tanta diferencia en tre una oracle y posgres?

tengo una tabla con 235772 filas

y ej

select * from tabla where tab_estado='ALGO'

en oracle 37ms

y en postgres

47563 ms

y eso que las columnas estan indexadas y todo , es esta abismal difreencia entre una bd y otra? o se puede tocar algun parametro para hacerla anda ams rapido?

desde ya muchas gracias.
__________________
Mas vale morir de pie que vivir de rodillas :ojotes:
  #2 (permalink)  
Antiguo 19/08/2009, 18:59
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Rendimiento en postgres

Me parecen extremos los 2 resultados.
37 ms me parece un resultado muy pequeño para una busqueda en esa cantidad de datos.
Y por el lado de postgres, 47 segundos me parece un tiempo exagerado para esta consulta.

Debe haber algo mal.

Danos un poco mas de detalles.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 20/08/2009, 08:27
 
Fecha de Ingreso: septiembre-2004
Mensajes: 407
Antigüedad: 20 años, 2 meses
Puntos: 1
Respuesta: Rendimiento en postgres

es que como te dije no se si en sus paramatros de configuracion postgres tendra algo que limite la cpu u alguna otra cosa , probre con los de memoria que tiene pero sigue igual , no se la verdad porque tanta diferencia me da mucho miedo migrar algo asi.
__________________
Mas vale morir de pie que vivir de rodillas :ojotes:
  #4 (permalink)  
Antiguo 20/08/2009, 09:24
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Rendimiento en postgres

popopo...
Por oracle no tengo dudas que sea muy eficiente. (Oracle es Oracle)
Pero acabo de insertar en una tabla en postgres 500.000 registros ayudado de una función.
Para listar la totalidad de los 500.000 registros, tuvo un tiempo de 16594 ms.

Para listar un dato haciendo uso de una condición como lo dices tener, tuvo un tiempo de respuesta de 167 ms. (Como ve4s son tiempos de respuesta muy similares)

Definitivamente hay un problema con tu BD postgres.

se me ocurre que tal vez la ejecución de la consulta, dispare otras tareas que hagan este tiempo tan grande. (Triggers tal vez.)

haz un
explain analyze select *from tabla

y cuentanos que aparece.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 20/08/2009, 14:09
 
Fecha de Ingreso: septiembre-2004
Mensajes: 407
Antigüedad: 20 años, 2 meses
Puntos: 1
Respuesta: Rendimiento en postgres

esta tabla tiene 71 columnas no sera eso? pero asi y todo por mas que le haga select a una columna lo mismo es abismal la diferencia , cuantos campos probaste vos y que tipo de datos , decime mas o menos asi hago lo mismo a ver que puede ser.

esto es lo que me tira lo que vos me decis

explain analyze select com_codigo from comprobantes where com_estado='VIGENTE'

"Seq Scan on comprobantes (cost=0.00..42491.15 rows=207322 width=8) (actual time=0.015..1769.158 rows=205700 loops=1)"
" Filter: (com_estado = 'VIGENTE'::bpchar)"
"Total runtime: 1871.896 ms"

explain analyze select * from comprobantes where com_estado='VIGENTE'

"Seq Scan on comprobantes (cost=0.00..42491.15 rows=207322 width=11781) (actual time=0.013..641.338 rows=205700 loops=1)"
" Filter: (com_estado = 'VIGENTE'::bpchar)"
"Total runtime: 729.599 ms"
__________________
Mas vale morir de pie que vivir de rodillas :ojotes:
  #6 (permalink)  
Antiguo 21/08/2009, 06:51
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Rendimiento en postgres

No popopo.
El tiempo que pones en el rpimer post es un tiempo exagerado y 235772 no es un numero de registros grande para postgresql.

Te recomiendo indagar un poco acerca de como medir la actividad que tiene postgresql en este momento y lo que está pasando.

Para unificar ideas te cuento que hice para probar esto:

1. Crear la función:
Código sql:
Ver original
  1. CREATE OR REPLACE FUNCTION insertar_registros()
  2.   RETURNS NUMERIC AS
  3. $BODY$
  4. DECLARE
  5. i INTEGER;
  6. a DOUBLE PRECISION;
  7. BEGIN
  8. a:=1;
  9. i:=500000;
  10. FOR cont IN 1..i loop
  11.  INSERT INTO tabla VALUES(a,now(),'daniel');
  12.  a:=a+1;
  13. END loop;
  14. RETURN 23;
  15. END;
  16. $BODY$
  17.   LANGUAGE 'plpgsql' VOLATILE;

Como ves, la variable i tiene asignado el 500000 (Numero de registros) y en un loop realiza las inserciones correspondientes.

2. Ejecución de la función:
Código sql:
Ver original
  1. pruebas=> SELECT insertar_registros();
  2.  insertar_registros
  3. --------------
  4.            23
  5. (1 fila)
  6.  
  7. pruebas=> SELECT COUNT(*) FROM tabla;
  8.  COUNT
  9. --------
  10.  500000
  11. (1 fila)

El 23 se retorna cuando termina exitosamente la inserción.
Se hace un select count para corroborar que existan 500000 registros.

3. Hacer una consulta a la totalidad de registros de la tabla.

Código sql:
Ver original
  1. SELECT *FROM tabla;
Mi tiempo de respuesta para mostrar la totalidad de los registros fue de 16687 ms. (Cambia en pocos milisegundos cada que se corre).

4. hacer una consulta con condición:

Código sql:
Ver original
  1. SELECT *FROM tabla WHERE id=90645;
90645 es un numero aleatorio entre 1 y 500000 para ver el rendimiento de la consulta. El tiempo de respuesta fue de 297ms.

Consejo:
Realiza este mismo procedimiento en tu base de datos y compara mis resultados con tus resultados.
si son similares, el problema puede ser el numero de columnas como dices y se verifica el porque oracle vale unos cuantos millones
Si son totalmente diferentes a los que te pongo, definitivamente hay que hacer un análisis profundo a tu base de datos para ver que proceso se está comiendo todos los recursos.

Nos cuentas como te va.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 01/09/2009, 02:56
Avatar de pgsqlesorg  
Fecha de Ingreso: septiembre-2009
Ubicación: Noruega
Mensajes: 10
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Rendimiento en postgres

Tienes un articulo en PostgreSQL-es.org que te puede ayudar a identificar tus problemas de rendimiento. Lo tienes en: www . postgresql-es . org/node/329

--
Rafael Martinez
PostgreSQL-es.org
  #8 (permalink)  
Antiguo 01/09/2009, 10:48
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Rendimiento en postgres

http://www.postgresql-es.org/

que buena pagina.

es tuya?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 01/09/2009, 11:44
Avatar de pgsqlesorg  
Fecha de Ingreso: septiembre-2009
Ubicación: Noruega
Mensajes: 10
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Rendimiento en postgres

Cita:
Iniciado por huesos52 Ver Mensaje
que buena pagina.

es tuya?
Bueno yo la he abierto y soy el encargado de que funcione, pero espero que con el tiempo sea un recurso para todos los usuarios de PostgreSQL

un saludo
Rafael Martinez
PostgreSQL-es.org
  #10 (permalink)  
Antiguo 01/09/2009, 13:21
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Rendimiento en postgres

Pues si que le voy a sacar jugo. hay cosas bien interesantes.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #11 (permalink)  
Antiguo 01/09/2009, 13:52
 
Fecha de Ingreso: septiembre-2004
Mensajes: 407
Antigüedad: 20 años, 2 meses
Puntos: 1
Respuesta: Rendimiento en postgres

si me da lo mismo que vos , el problema es con todas las columnas me di cuenta porque probe la misma consulta que demoraba 47563 ms seleccionando una sola columna en vez de poner el * y me demoro 1650 ms en vez de 47653 ms , esa es una pequeña gran diferencia se ve que postgres con muchas columnas le cuenta un poco demasiado. Pero bueno es gratis una licencia de oracle enterprise esta cerca de 50 mil dolares por procesador asi que eso contra 0$ es una gran diferencia.
__________________
Mas vale morir de pie que vivir de rodillas :ojotes:
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:34.