До финиша, сложно предсказать результат. Нужны тесты.
Задача
Провести тестирование методологии для оценки влияния оптимизации конфигурационных параметров СУБД на производительность СУБД.
Общий алгоритм действий и постановка эксперимента
Тестовый прогон нагрузочного тестирования по сценарию смешанной нагрузки с целью определения базовых показателей производительности, характерных ожиданий и нагрузки на СУБД соответствующей максимальной производительности (N_BASE) .
Изменение значений конфигурационных параметров. Нагрузочное тестирование с минимальной нагрузки до нагрузки N_BASE.
Сравнительный анализ изменения производительности и характерных ожиданий СУБД.
Конфигурация виртуальной машины
Эксперимент-1 : Тестовый прогон при базовых значениях конфигурационных параметров
shared_preload_libraries = 'pg_wait_sampling, pgpro_stats'
wipe_file_on_delete = 'off'
wipe_xlog_on_free = 'off'
wipe_heaptuple_on_delete = 'off'
wipe_memctx_on_free = 'off'
wipe_mem_on_free = 'off'
track_io_timing = 'on'
listen_addresses = '0.0.0.0'
logging_collector = 'on'
log_directory = '/log/pg_log'
log_destination = 'stderr'
log_rotation_size = '0'
log_rotation_age = '1d'
log_filename = 'name.postgresql-%u.log'
log_line_prefix = '%m| %d| %a| %u| %h| %p| %e| '
log_truncate_on_rotation = 'on'
log_checkpoints = 'on'
archive_mode = 'on'
archive_command = 'true'
max_connections = '1000'
log_connections = 'on'
log_disconnections = 'on'
Операционная скорость
Ось X - Нагрузка на СУБД. Ось Y - операционная скорость.
Нагрузка, соответствующая максимальной производительности (N_BASE) = 26
Эксперимент-2 : Оптимизация конфигурационных параметров - проход 1
Измененные параметры
random_page_cost = '1.1'
effective_io_concurrency = '300'
autovacuum_max_workers = '2'
autovacuum_work_mem = '256MB'
vacuum_cost_limit = '4000'
shared_buffers = '512MB'
effective_cache_size = '1536MB'
maintenance_work_mem = '128MB'
max_parallel_workers = '2'
max_parallel_workers_per_gather = '2'
wal_level = 'minimal'
max_wal_senders = '0'
Эксперимент-2 : Оптимизация конфигурационных параметров - проход 2
Измененные параметры
shared_buffers = '819MB'
checkpoint_timeout = '60'
\c test_pgbench_custom
ALTER TABLE pgbench_accounts SET (fillfactor = 50);
ALTER TABLE pgbench_tellers SET (fillfactor = 50);
ALTER TABLE pgbench_branches SET (fillfactor = 50);
VACUUM FULL pgbench_branches ;
VACUUM FULL pgbench_tellers ;
VACUUM FULL pgbench_accounts ;
Сравнительный анализ изменений производительности и характерных ожиданий СУБД
Операционная скорость
Ось X - нагрузка на СУБД. Ось Y - операционная скорость
Прирост скорости в эксперименте-1 по сравнению с базовыми показателями составил до 3.4% , в среднем 1.9%.
Прирост скорости в эксперименте-2 по сравнению с базовыми показателями составил до 4.7% , в среднем 2.3%.
Корреляция и абсолютные значения ожиданий СУБД
Корреляция ожидания СУБД - практически не изменилась
Абсолютные значения ожиданий IO - несколько снизились, LWLock - существенно снизились.
Ожидания типа IO
Ось X - точка наблюдения. Ось Y - количество ожидания типа IO.
Снижение ожиданий типа IO в эксперименте-1 по сравнению с базовыми значениями составило до -5.7% , в среднем -2.8%.
Снижение ожиданий типа IO в эксперименте-2 по сравнению с базовыми значениями составило до -11.3% , в среднем -4.4%.
Ожидания типа LWLock
Ось X - точка наблюдения. Ось Y - количество ожидания типа LWLock.
Снижение ожиданий типа LWLock в эксперименте-1 по сравнению с базовыми значениями составило до -40.5% , в среднем -7.7%.
Снижение ожиданий типа LWLock в эксперименте-2 по сравнению с базовыми значениями составило до -66.7% , в среднем -54.3%.
Итог
Для данной СУБД для сценария синтетической нагрузки оптимальными значениями конфигурационных параметров СУБД и хранения таблиц являются:
random_page_cost = '1.1'
effective_io_concurrency = '300'
autovacuum_max_workers = '2'
autovacuum_work_mem = '256MB'
vacuum_cost_limit = '4000'
effective_cache_size = '1536MB'
maintenance_work_mem = '128MB'
max_parallel_workers = '2'
max_parallel_workers_per_gather = '2'
wal_level = 'minimal'
max_wal_senders = '0'
shared_buffers = '819MB'
checkpoint_timeout = '60'
fillfactor = 50
При необходимости тонкая настройка конфигурации СУБД и параметров хранения таблиц - может быть продолжена .