Привет всем!
Недавно столкнулся с проблемой использования памяти СУБД Postgresql. Проблема заключается не в том, что постгресс ест много памяти, а как раз-таки в обратном.
Я использую win-версию postgresql-9.2.4-1-windows.exe под ОС Windows Server 2008 Enterprise SP2
При выставленном shared_buffers = 512MB, в памяти висит 8 процессов postgresql.exe каждый из которых потребляет максимум 8Мб ОЗУ и не более.
При запуске сложных запросов и обработке больших массивов данных проц забивается под 100% и так на несколько минут. Получается что все операции происходят на стороне жесткого диска, что заметно влияет на производительность СУБД.
До этого я использовал версию Postgresql, которая шла с Денвером. Возникла та же проблема, но после изменения параметра shared_buffers все заработало как часики: память выделялась с избытком, производительность возросла в разы.
Ниже приведу кусок конфиг-файла актуального для моей системы сейчас:
#------------------------------------------------------------------------------
# RESOURCE USAGE (except WAL)
#------------------------------------------------------------------------------
# - Memory -
shared_buffers = 512MB # min 128kB
# (change requires restart)
#temp_buffers = 8MB # min 800kB
#max_prepared_transactions = 0 # zero disables the feature
# (change requires restart)
# Note: Increasing max_prepared_transactions costs ~600 bytes of shared memory
# per transaction slot, plus lock space (see max_locks_per_transaction).
# It is not advisable to set max_prepared_transactions nonzero unless you
# actively intend to use prepared transactions.
#work_mem = 1MB # min 64kB
#maintenance_work_mem = 16MB # min 1MB
#max_stack_depth = 2MB # min 100kB
# - Disk -
#temp_file_limit = -1 # limits per-session temp file space
# in kB, or -1 for no limit
# - Kernel Resource Usage -
#max_files_per_process = 1000 # min 25
# (change requires restart)
#shared_preload_libraries = '' # (change requires restart)
# - Cost-Based Vacuum Delay -
#vacuum_cost_delay = 0ms # 0-100 milliseconds
#vacuum_cost_page_hit = 1 # 0-10000 credits
#vacuum_cost_page_miss = 10 # 0-10000 credits
#vacuum_cost_page_dirty = 20 # 0-10000 credits
#vacuum_cost_limit = 200 # 1-10000 credits
# - Background Writer -
#bgwriter_delay = 200ms # 10-10000ms between rounds
#bgwriter_lru_maxpages = 100 # 0-1000 max buffers written/round
#bgwriter_lru_multiplier = 2.0 # 0-10.0 multipler on buffers scanned/round
# - Asynchronous Behavior -
#effective_io_concurrency = 1 # 1-1000; 0 disables prefetching
После изменения
После изменения shared_buffers систему перезапускали?
Логи postgresql читали - может в них что полезное?
Память памятью, а индексы у вас есть к таблицам какие необходимы?
Да, естественно
Да, естественно перезапускали.
Индексы все в порядке.
Логи:
2013-06-14 16:34:08 MSK ОТМЕТКА: система БД была выключена: 2013-06-14 16:32:15 MSK
2013-06-14 16:34:08 MSK ВАЖНО: система баз данных запускается
2013-06-14 16:34:08 MSK ОТМЕТКА: система БД готова принимать подключения
2013-06-14 16:34:08 MSK ОТМЕТКА: процесс запуска автоочистки создан
2013-06-14 16:55:22 MSK ОТМЕТКА: неверная длина стартового пакета
2013-06-14 16:55:39 MSK ОТМЕТКА: неверная длина стартового пакета
2013-06-14 17:04:00 MSK ОТМЕТКА: неверная длина стартового пакета
2013-06-14 17:04:41 MSK ОТМЕТКА: неверная длина стартового пакета
2013-06-14 17:06:17 MSK ОТМЕТКА: неверная длина стартового пакета
2013-06-14 17:10:22 MSK ОТМЕТКА: неверная длина стартового пакета
2013-06-14 17:14:34 MSK ОТМЕТКА: получен запрос на быстрое выключение
2013-06-14 17:14:34 MSK ОТМЕТКА: прерывание всех активных транзакций
2013-06-14 17:14:34 MSK ОТМЕТКА: процесс запуска автоочистки завершается
2013-06-14 17:14:34 MSK ОШИБКА: выполнение оператора отменено по запросу пользователя
2013-06-14 17:14:34 MSK ОШИБКА: выполнение оператора отменено по запросу пользователя
2013-06-14 17:14:34 MSK ОШИБКА: выполнение оператора отменено по запросу пользователя
2013-06-14 17:14:34 MSK ОШИБКА: выполнение оператора отменено по запросу пользователя
2013-06-14 17:14:35 MSK ОТМЕТКА: процесс запуска автоочистки завершается
2013-06-14 17:14:35 MSK ОТМЕТКА: выключение
2013-06-14 17:14:35 MSK ОТМЕТКА: система БД выключена