Конфигурирование PostgreSQL для соответствия конфигурации сервера

Мы в настоящее время запускаем веб-приложение, и сервер базы данных на ожоге выделил машину. Это - аппаратная конфигурация - http://www.hetzner.de/en/hosting/produkte_rootserver/ex10. Приблизительно 50 ГБ поршня свободны. PostgresSQL берет только 600 МБ, в то время как процессы веб-сервера берут 7 ГБ. Средняя загрузка ЦП составляет 25%.

Программным обеспечением является Ubuntu 12.04 и Пост-ГРЭС 9.1. Размер базы данных составляет 15 ГБ.

Поскольку загрузка увеличила наше время отклика приложений, увеличенное с 230 мс до 450 мс за последние несколько месяцев. Приложение берет 40%-ю долю, в то время как DB берет 60% времени отклика.

Мы кэшировали много вещей, но задавались вопросом, могли ли мы получить что-то путем тонкой настройки конфигурации Пост-ГРЭС. После бита исследуемых мы нашли, что конфигурация PostgreSQL по умолчанию (https://gist.github.com/darkofabijan/9453c793ceec1ac6274d) действительно консервативна и что мы должны определенно настроить нашу конфигурацию.

После выполнения pgtune мы получили следующие рекомендуемые значения.

maintenance_work_mem = 1GB 
checkpoint_completion_target = 0.7 
effective_cache_size = 44GB 
work_mem = 288MB 
wal_buffers = 4MB 
checkpoint_segments = 8 
shared_buffers = 15GB 
max_connections = 200 

После того как мы начали выполнять наш сервер PostgreSQL с рекомендуемыми значениями, мы получили так или иначе регулярные скачки, когда время отклика приложений перешло к 2 000 мс +, в то время как увеличение было во время отклика базы данных. После выполнения его в течение нескольких часов мы вернулись к исходной конфигурации Ubuntu 12.04/PostgreSQL 9.1.

Очевидно, у нас нет большого опыта с выполнением DBS. И конкретные рекомендации относительно pgtune предложили, значения и указатели на хорошие ресурсы будут очень цениться.

Редактирование 1:

            name            |         current_setting          |        source
----------------------------+----------------------------------+----------------------
 application_name           | psql                             | client
 client_encoding            | UTF8                             | client
 DateStyle                  | ISO, MDY                         | configuration file
 default_text_search_config | pg_catalog.english               | configuration file
 external_pid_file          | /var/run/postgresql/9.1-main.pid | configuration file
 lc_messages                | en_US.UTF-8                      | configuration file
 lc_monetary                | en_US.UTF-8                      | configuration file
 lc_numeric                 | en_US.UTF-8                      | configuration file
 lc_time                    | en_US.UTF-8                      | configuration file
 log_line_prefix            | %t                               | configuration file
 log_timezone               | localtime                        | environment variable
 max_connections            | 100                              | configuration file
 max_stack_depth            | 2MB                              | environment variable
 port                       | 5432                             | configuration file
 shared_buffers             | 24MB                             | configuration file
 ssl                        | on                               | configuration file
 TimeZone                   | localtime                        | environment variable
 unix_socket_directory      | /var/run/postgresql              | configuration file
2
08.01.2020, 00:25
1 ответ

Это - довольно широкая тема. Я предлагаю, чтобы Вы забрали копию превосходной книги Greg Smith "Высокая производительность PostgreSQL 9.0" и работа через нее. http://www.packtpub.com/postgresql-90-high-performance/book

Можете Вы показывать вывод следующего запроса:

SELECT name, current_setting(name), source
FROM pg_settings
WHERE source NOT IN ('default', 'override');

Вещи протестировать:

wal_buffers = 16MB
checkpoint_segments = 32 #(or higher)
shared_buffers = 6GB
random_page_cost = 2.0 # not the first choice of things to tune

Каковы Ваши настройки входа? Есть ли очевидные медленные запросы? Если так, можно выполнить их через pgbadger, чтобы дать Вам хорошую идею запросов предназначаться.

Вот некоторые настройки, которые можно протестировать, учитывая текущие настройки и что Вы упомянули о своей системе.

log_line_prefix = '%t [%p] (user=%u) (db=%d) (rhost=%h) [vxid:%v txid:%x] [%i] '
shared_buffers = '6GB' # requires cluster restart
checkpoint_completion_target = 0.8
checkpoint_segments = 32
effective_io_concurrency = <lesser of cpus and disks/channels>
log_destination = stderr    # This and the log_directory are what I use,
log_directory = pg_log      # it is up to you whether or not you want to change them
logging_collector = 'on'
log_filename = 'postgresql-%Y-%m-%d.log'
log_min_duration_statement = '2s' # Set this as necessary, set lower per role
random_page_cost = 2.5 # If faster disks, drop to 2.0
track_activity_query_size = 4096
work_mem = '50MB'   # Adjust this as necessary.
                    # Be aware this is a per-action setting,
                    # eg. aggregation, sorts, etc can each consume up to
                    # this amount of RAM

Необходимо будет перезапустить базу данных для некоторых из тех настроек для вступления в силу.

0
22.02.2020, 23:28
  • 1
    я обновил вопрос с выводом от Вашего запроса настроек. Журналирование медленных запросов не настроено. Я протестирую Вашу предложенную конфигурацию. Tnx! –  darkofabijan 19.08.2013, 22:28

Теги

Похожие вопросы