2009-04-22 40 views
12

Tenga en cuenta que soy un novato en el mundo de SQL/bases de datos.Ajuste de rendimiento PostgreSQL

Estoy insertando/actualizando miles de objetos por segundo. Esos objetos se están consultando activamente en múltiples intervalos de segundos.

¿Cuáles son algunas de las cosas básicas que debo hacer para ajustar el rendimiento de mi base de datos (postgres)?

+0

Es necesario configurar el archivo postgresql.conf. Y reinicie la base de datos. Consulte este enlace para obtener la configuración de configuración detallada: http://tekadempiere.blogspot.ae/2014/09/tuning-postgresql-for-better-performance.html – Sajeev

Respuesta

13

Es un tema amplio, así que aquí hay muchas cosas para leer.

  • EXPLAIN and EXPLAIN ANALYZE es extremadamente útil para la comprensión de lo que está pasando en su base de datos con motor
  • Hacer columnas relevantes estén indexados
  • Hacer columnas Seguro irrelevantes son no indexados (insertar/actualizar rendimiento puede bajar el drenaje si demasiados índices deben actualizarse)
  • Asegúrese de que su postgres.conf está sintonizada correctamente
  • Sepa lo que es work_mem, y cómo afecta a sus consultas (sobre todo útil para consultas más grandes)
  • Asegúrese de que su base de datos está correctamente normalizada
  • VACUUM para la limpieza de los datos antiguos
  • ANALYZE para la actualización (objetivo estadísticas para la cantidad de estadísticas) estadísticas
  • Las conexiones persistentes (se puede utilizar un administrador de conexión como pgpool o pgbouncer)
  • Comprender cómo se construyen las consultas (combinaciones, sub-selecciones, cursores)
  • Almacenamiento en caché de datos (es decir,memcached) es una opción

Y cuando haya agotado esas opciones: agregue más memoria, subsistema de disco más rápido, etc. El hardware importa, especialmente en conjuntos de datos más grandes.

Y por supuesto, lea todos los otros hilos en postgres/bases de datos. :)

1

El mínimo absoluto que recomendaré es el EXPLAIN ANALYZE comando. Mostrará un desglose de subconsultas, combinaciones, y otros, todo el tiempo que muestra la cantidad real de tiempo consumido en la operación. También lo alertará sobre escaneos secuenciales y otros problemas desagradables.

Es el mejor manera de comenzar.

5

En primer lugar, lea el manual oficial de Performance Tips.

Ejecutando EXPLAIN en todas sus consultas y entendiendo su resultado le permitirá saber si sus consultas son lo más rápidas posible y si debe agregar índices.

Una vez que haya hecho eso, le sugiero que lea la parte Server Configuration del manual. Hay muchas opciones que se pueden ajustar para mejorar aún más el rendimiento. Sin embargo, asegúrese de comprender las opciones que está configurando, ya que podrían dificultar fácilmente el rendimiento si se configuran incorrectamente.

Recuerde que cada vez que se cambia una consulta o una opción, prueba y referencia para que sepa los efectos de cada cambio.

-2

Put fsync = apagado en su posgresql.conf, si confía en su sistema de archivos, de lo contrario cada operación de PostgreSQL se escribirá Protected en el disco (con la llamada al sistema fsync). Tenemos esta opción desactivada en muchos servidores de producción desde hace 10 años, y nunca tuvimos daños en los datos.

+2

Este es un MAL consejo. Corres el riesgo de corromper tus datos. Por supuesto, podrías tener suerte por algunos años, como lo has hecho. Se puede obtener la misma ganancia utilizando un controlador de incursiones con un caché de escritura respaldado por batería, sin riesgo adicional. – tommym

+0

Confiamos en nuestros sistemas de archivos ext3. Una memoria caché de escritura es limitada. Por ejemplo, mantenemos la base de datos de Century21 Francia desde hace 8 años; más de 3000 personas están escribiendo en esta base de datos en tiempo real. Tenemos un middleware hecho en casa para reflejar todas las consultas en otra base de datos en caso de caída del servidor, pero nunca tuvimos ningún problema. Ver: http://www.postgresql.org/docs/8.1/interactive/runtime-config-wal.html – fredz

+0

Generalmente malos consejos. Postgres no puede garantizar la coherencia con esta configuración. Al apagar fsync, es posible que nunca se escriba en la memoria caché de los discos. No lo hagas Solo porque no hayas observado la corrupción significa muy poco ... especialmente si nunca has tenido un accidente. –

3

En realidad, hay algunas reglas simples, que pueden ayudarle en la mayoría de los casos el rendimiento suficiente:

  1. Los índices son la primera parte. Las claves primarias se indexan automáticamente. Recomiendo poner índices en todas las claves foráneas. Además coloque índices en todas las columnas que se consultan con frecuencia, si hay consultas muy utilizadas en una tabla donde se consulta más de una columna, coloque un índice en esas columnas juntas.

  2. Configuraciones de memoria en su instalación de postgresql. Establezca los siguientes parámetros superiores:

.

shared_buffers, work_mem, maintenance_work_mem, temp_buffers 

Si se trata de una máquina de base de datos dedicado usted puede configurar fácilmente los 3 primeros de éstos a la mitad de la RAM (sólo estar cuidado en Linux con tampones compartidos, puede ser que tenga que ajustar el parámetro shmmax), en cualquier otro casos depende de la cantidad de ram que le gustaría dar a postgresql.

http://www.postgresql.org/docs/8.3/interactive/runtime-config-resource.html

+0

Los PK se indexan automáticamente? ¿Cómo es que no aparecen en la lista de "índices" en la herramienta pgAdmin? – systemoutprintln

+0

Voto a favor de la pluralización correcta de la palabra 'índice' del propio capitán Pedantic. Gracias @Mauli! – Rastus7

Cuestiones relacionadas