Ver Mensaje Individual
  #6 (permalink)  
Antiguo 21/08/2009, 06:51
Avatar de huesos52
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