Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / наличие ошибок выделения памяти в postgresql.conf / 3 сообщений из 3, страница 1 из 1
07.10.2015, 12:06
    #39070392
gk2
gk2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
наличие ошибок выделения памяти в postgresql.conf
Добрый день, хочу показать свои конфиги постгре и узнать не допустил ли я каких грубых ошибок по выделению памяти, буду рад любым советам.
В целом система справляется, но после запуска нового проекта, в котором большое число селектов с сортировкой из партицированых таблиц (2-4Гб), система стала подтормаживать.


Железо:
материнка - intel S2600CP
DDR - 64Gb
CPU - Intel Xeon CPU E5-2609 v2 @ 2.50GHz
HDD - HDD 1 Tb SAS 2.0 Toshiba < MG03SCA100 > 3.5" 7200rpm 64Mb

Система работает только для postgresql, больше никаких приложений не установлено.
С сервером бд в основном работают веб-приложения, а также синхронизация.

postgresql.conf:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
shared_buffers = 12GB
temp_buffers = 128MB  
work_mem = 1024MB                       # min 64kB
maintenance_work_mem = 10GB             # min 1MB
max_stack_depth = 6MB                   # min 100kB

# - Cost-Based Vacuum Delay -
#vacuum_cost_delay = 0                  # 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

# WRITE AHEAD LOG
#------------------------------------------------------------------------------
# - Settings -
wal_level = hot_standby                 # minimal, archive, or hot_standby
                                        # (change requires restart)
fsync = on                              # turns forced synchronization on or off
#synchronous_commit = on                # synchronization level;
                                        # off, local, remote_write, or on
#wal_sync_method = fsync                # the default is the first option
                                        # supported by the operating system:
                                        #   open_datasync
                                        #   fdatasync (default on Linux)
                                        #   fsync
                                        #   fsync_writethrough
                                        #   open_sync
#full_page_writes = on                  # recover from partial page writes
#wal_buffers = -1                       # min 32kB, -1 sets based on shared_buffers
                                        # (change requires restart)
#wal_writer_delay = 200ms               # 1-10000 milliseconds
#commit_delay = 0                       # range 0-100000, in microseconds
#commit_siblings = 5                    # range 1-1000

# - Checkpoints -
checkpoint_segments = 128               # in logfile segments, min 1, 16MB each
#checkpoint_timeout = 5min              # range 30s-1h
#checkpoint_completion_target = 0.5     # checkpoint target duration, 0.0 - 1.0
#checkpoint_warning = 30s               # 0 disables

# - Archiving -
#archive_mode = off             # allows archiving to be done
                                # (change requires restart)
#archive_command = ''           # command to use to archive a logfile segment
                                # placeholders: %p = path of file to archive
                                #               %f = file name only
                                # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
#archive_timeout = 0            # force a logfile segment switch after this
                                # number of seconds; 0 disables
#------------------------------------------------------------------------------
# AUTOVACUUM PARAMETERS
#------------------------------------------------------------------------------
autovacuum = on                         # Enable autovacuum subprocess?  'on'
                                        # requires track_counts to also be on.
#log_autovacuum_min_duration = -1       # -1 disables, 0 logs all actions and
                                        # their durations, > 0 logs only
                                        # actions running at least this number
                                        # of milliseconds.
#autovacuum_max_workers = 3             # max number of autovacuum subprocesses
                                        # (change requires restart)
#autovacuum_naptime = 1min              # time between autovacuum runs
#autovacuum_vacuum_threshold = 50       # min number of row updates before
                                        # vacuum
#autovacuum_analyze_threshold = 50      # min number of row updates before
                                        # analyze
#autovacuum_vacuum_scale_factor = 0.2   # fraction of table size before vacuum
#autovacuum_analyze_scale_factor = 0.1  # fraction of table size before analyze
#autovacuum_freeze_max_age = 200000000  # maximum XID age before forced vacuum
                                        # (change requires restart)
#autovacuum_vacuum_cost_delay = 20ms    # default vacuum cost delay for
                                        # autovacuum, in milliseconds;
                                        # -1 means use vacuum_cost_delay
#autovacuum_vacuum_cost_limit = -1      # default vacuum cost limit for
                                        # autovacuum, -1 means use
                                        # vacuum_cost_limit
# - Planner Cost Constants -
#seq_page_cost = 1.0                    # measured on an arbitrary scale
#random_page_cost = 4.0                 # same scale as above
#cpu_tuple_cost = 0.01                  # same scale as above
#cpu_index_tuple_cost = 0.005           # same scale as above
#cpu_operator_cost = 0.0025             # same scale as above
#effective_cache_size = 128MB
...
Рейтинг: 0 / 0
07.10.2015, 12:35
    #39070447
vyegorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
наличие ошибок выделения памяти в postgresql.conf
gk2,

У вас всего 64гб памяти. 12 вы отдали шареным буферам — 52гб.

Оставшаяся память используется сессиями по необходимости и регулируется параметром `work_mem`. Это то кол-во памяти, которое может использовать _узел_ в плане запроса, т.е. если у вас есть Hash Join с последующей сортировкой, то бует использоваться `work_mem` * 2 памяти.

Вы почему-то не показали `max_connections`, но при умолчательных 100, вы должны иметь хотя бы 100гб свободной памяти, хотя лучше умножать на 2 — 200гб. У вас же — всего 52гб, свопинг будет при даже не пиковых нагрузках.

Я бы сделал следующее:
`work_mem` уменьшил, где-то до 16Mb. Для больших запросов можно поменять параметр в рамках сессии

`checkpoint_completion_target` увеличил бы до 0.8

обязательно бы использовал pooler (pgbouncer, pg_pool), если его еще нет — открытие новых сессий к Postgres'у происходит долго

уменьшил бы `autovacuum_%_scale_factor` параметры, на порядок

увеличил бы `autovacuum_max_workers`, раза в 2
...
Рейтинг: 0 / 0
08.10.2015, 16:59
    #39072201
gk2
gk2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
наличие ошибок выделения памяти в postgresql.conf
vyegorov, большое спасибо за ответ! Моя ошибка, что я не учёл своё кол-во соединений (max_connections=400). Я ориентировался по примерным данным из доки Васильева... Сейчас я выставил work_mem в 64Mb теперь кол-во свободной памяти на сервере в районе 2Gb, а раньше 200-300Mb. Прям большой производительности не получили, но вроде чуть-чуть быстрее стало работать новое приложение.
Еще выставил по вашей рекомендации checkpoint_completion_target = 0.8, скоро собираюсь заняться настройками автовакуума.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / наличие ошибок выделения памяти в postgresql.conf / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]