Estamos ejecutando Postgres 9.1.3 y recientemente hemos comenzado a tener problemas de rendimiento en uno de nuestros servidores.Problemas de rendimiento de Postgres
Nuestras consultas corrieron bien por un tiempo, pero a partir del 1 de agosto, se han reducido drásticamente. Parece que la mayoría de las consultas problemáticas son consultas Select (las consultas con count (*) son especialmente malas), pero en general, la base de datos se está ejecutando muy lento.
Corrimos this consulta en el servidor y estos fueron los cambios que hemos realizado en el archivo de configuración por defecto (Nota: El servidor funcionó muy bien con estos cambios antes, por lo que, es probable que no importan mucho):
name | current_setting
---------------------------+---------------------------------------------------------------------------------------------------------------
version | PostgreSQL 9.1.2 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-51), 64-bit
autovacuum | off
bgwriter_delay | 20ms
checkpoint_segments | 6
checkpoint_warning | 0
client_encoding | UTF8
default_statistics_target | 1000
effective_cache_size | 4778MB
effective_io_concurrency | 2
fsync | off
full_page_writes | off
lc_collate | en_US.UTF-8
lc_ctype | en_US.UTF-8
listen_addresses | *
maintenance_work_mem | 1GB
max_connections | 100
max_stack_depth | 2MB
port | 5432
random_page_cost | 2
server_encoding | UTF8
shared_buffers | 1792MB
synchronous_commit | off
temp_buffers | 16MB
TimeZone | US/Eastern
wal_buffers | 16MB
wal_level | minimal
wal_writer_delay | 10ms
work_mem | 16MB
(28 rows)
Time: 210.231 ms
Normalmente, cuando surgen problemas como este, lo primero que la gente recomienda es aspirar y lo hemos intentado. Analizamos al vacío la mayor parte de la base de datos, pero no ayudó.
Utilizamos Explain
en algunas de nuestras consultas y notamos que Postgres recurría a escaneos secuenciales aunque las tablas tenían índices.
Desactivamos el análisis secuencial para forzar al planificador de consultas a usar índices, pero tampoco ayudó.
Luego probamos la consulta this para ver si teníamos mucho espacio en disco sin utilizar que Postgres estaba atravesando para encontrar lo que estaba buscando. Desafortunadamente, aunque algunas de nuestras tablas sí tenían un poco de volumen, no parecía lo suficientemente importante como para ralentizar el rendimiento general del sistema.
Creemos que la ralentización podría estar relacionada con E/S, pero no podemos encontrar los detalles. ¿Postgres es tonto y, si es así, qué parte? ¿Hay algo mal con la VM, o tal vez algo malo con el hardware físico en sí?
¿Ustedes tienen alguna otra sugerencia para cosas que podamos probar o ver?
EDIT:
lo siento por no actualizar esto antes. Me quedé atrapado en otras cosas.
En esta máquina en particular, nuestro rendimiento mejoró enormemente al realizar una pequeña modificación en la configuración de la máquina virtual.
Hay una configuración que trata con el almacenamiento en caché de IO. Originalmente se estableció en ON. Supusimos que constantemente el almacenamiento en caché estaba ralentizando las cosas y teníamos razón. Lo apagamos, y las cosas mejoraron drásticamente.
Curiosamente, la mayoría de nuestros otros servidores ya tenían esta configuración desactivada.
Hay otros problemas, y estoy seguro de que tomaremos muchas de sus sugerencias, por lo tanto, muchas gracias por ayudar.
¿Alguna de estas consultas molestas es seleccionar desde una sola tabla? Si es así, ¿puedes soltar índices y luego crearlos nuevamente como prueba? (No hay nada especial en una sola tabla, excepto que es más fácil de probar). –
¿Es este un servidor de base de datos dedicado? ¿Cuánta memoria RAM está instalada? –
@Catcall El servidor no es un servidor dedicado. Se ejecuta en la parte frontal y posterior de nuestra aplicación. Es una imagen virtual (en KVM) con 8 GB de RAM, pero no estamos siendo muertos de hambre, estamos siendo muy pobres. El uso de IO a menudo llega al 100% durante las consultas. No creo que la recreación de los índices haya hecho mucha diferencia, pero tendré que volver sobre usted al respecto. – zermy