2015-10-10 3 views
-1

Мой сервер имеет следующие ресурсы:настройка PostgreSQL производительность при большой нагрузке

[[email protected] ~]$ free -m 
      total  used  free  shared buffers  cached 
Mem:   15929  15118  810  142   12  219 
-/+ buffers/cache:  14885  1043 
Swap:   8031  2007  6024 



[[email protected] ~]$ cat /proc/cpuinfo | grep processor | wc -l 
    8 



[[email protected] postgres]# sysctl kernel.shmall 
kernel.shmall = 4194304 
[[email protected] postgres]# sysctl kernel.shmmax 
kernel.shmmax = 17179869184 

и мой PostgreSQL конф:

default_statistics_target = 100 
maintenance_work_mem = 1GB 
checkpoint_completion_target = 0.9 
effective_cache_size = 12GB 
work_mem = 32MB 
wal_buffers = 16MB 
shared_buffers = 3840MB 
max_connections = 500 
fsync = off 
temp_buffers=32MB 

Но его получение ошибка "слишком много подключения". Страница nginx_status веб-сервера показывает около 500 активных соединений, когда это происходит. На сервере размещается api severver, поэтому каждый «HTTP-запрос» неизменно инициирует «чтение» базы данных. Его не «пишут» тяжелую вещь, а очень «читают» тяжело.

Возможно, что я превысил наш ранг, но все же я ожидал немного больше от ящика с сердечником 16G/8 с учетом «только для чтения» характера приложения. Могу ли я нажать PostgreSQL в любом другом возможном направлении?

+1

16GB/8 Core на самом деле не является «большой коробкой» и определенно не является «высокопроизводительным» сервером БД. Это больше подходит для хорошо оборудованного ПК или ноутбука. Но вы должны действительно изучить пул соединений, как предположил Мэтт. Либо внутри приложения, либо используя что-то вроде pgBouncer или pgPool –

ответ

2

PostgreSQL основан на технологическом процессе на основе потоков, поэтому он, как правило, не работает с множеством подключений.

Я бы посмотрел на использование чего-то вроде PgBouncer. PgBouncer - легкий пул соединений для PostgreSQL.

Смежные вопросы