2010-06-28 55 views
5

Tengo dos bases de datos de Postgres. En uno tengo dos tablas, cada una con aproximadamente 8,000,000 filas, y un recuento en cada una de ellas toma alrededor de un segundo. En otra base de datos, también Postgres, hay tablas que son 1,000,000 filas, y un recuento toma 10s, y una tabla eso es aproximadamente 6,000,000 filas, y el recuento demora 3 minutos en ejecutarse. ¿Qué factores determinan cuánto tiempo llevará esto? Están en máquinas diferentes, pero la base de datos que lleva más tiempo está en una máquina más rápida.¿Por qué el recuento (*) tarda demasiado en una base de datos PostgreSQL pero no en otra?

He leído acerca de cómo el recuento de postgres es lento en general, pero esto me parece extraño. Realmente no puedo usar una solución, porque estoy usando django, y hace un recuento en el administrador, lo que lleva una eternidad y es difícil de usar.

Cualquier información sobre esto sería útil.

+2

Haga una aspiradora llena en ambas bases de datos y vuelva a intentarlo. – Elijah

+0

Es lento, ya que tiene que leer cada fila activa en la tabla, no puede usar el índice, ya que puede contener filas muertas. –

Respuesta

4

La velocidad de conteo depende no solo del número de filas en la tabla, sino del tiempo necesario para leer los datos del disco. El tiempo depende de muchas cosas:

  • Número de filas en la tabla, como ya ha mencionado.
  • El número de registros por página (si cada registro ocupa más espacio, necesita leer más páginas para leer el mismo número de filas).
  • Si las páginas están parcialmente llenas, tiene que leer más páginas.
  • Si las tablas ya están almacenadas en la memoria caché (tener más memoria disponible ayuda aquí).
  • Si la tabla está indexada con un índice pequeño (el índice se puede contar en su lugar).
  • Diferencias de hardware.
  • etc ....
+0

Si el vacío es muy necesario, puede afectarlo mucho en Postgres. Indique la ayuda en los recuentos para Postgres, pero el índice en sí no puede contabilizarse únicamente porque necesita verificar la información de visibilidad en la tabla. – rfusca

0

Los índices, cachés, velocidad del disco, para empezar, todos tienen un impacto.

0

es la "tabla lento" adecuadamente la aspiradora?

Do no use VACUUM FULL, solo crea inflado de tabla e índice. VACUUM es absolutamente suficiente. VACUUM ANALYZE sería incluso mejor.

Y asegúrese de que autovacuum esté encendido y configurado correctamente

+0

ejecuté un VACUUM ANALYZE y sigue siendo tan lento – Stephen

Cuestiones relacionadas