LINUX.ORG.RU

Избранные сообщения disarmer

Специфичный тюнинг postgresql

Форум — Admin

Всем привет. Я надеюсь призвать в этот тред богов постгреса, которые подскажут мне секреты его тюнинга.
Итак, есть сервер, который будет обслуживать чисто каталог bacula (который на mysql с innodb занимал 120Гб, из которых 95Гб было в одной таблице), на postgresql.
В сервере установлен не слабый CPU:

Intel(R) Core(TM) i7-3820 CPU @ 3.60GHz 
1 package(s) x 4 core(s) x 2 SMT threads
и 64Gb RAM

Требования у bacula таковы:
- очень сложные многоэтажные селекты, для примера:

SELECT Path.Path, Filename.Name, T1.FileIndex, T1.JobId, LStat, DeltaSeq FROM ( SELECT FileId, Job.JobId AS JobId, FileIndex, File.PathId AS PathId, File.FilenameId AS FilenameId, LStat     , File.DeltaSeq AS DeltaSeq, Job.JobTDate AS JobTDate FROM Job, File, ( SELECT MAX(JobTDate) AS JobTDate, PathId, FilenameId, DeltaSeq FROM ( SELECT JobTDate, PathId, FilenameId, DeltaSeq FROM File JOIN Job USING (JobId) WHERE File.JobId IN(3401,3532,3614,3694,3774,3858,4048,4127,4215,4297,4377,4568,4652,4751,4833) UNION ALL SELECT JobTDate, PathId, FilenameId, DeltaSeq FROM BaseFiles JOIN File USING (FileId) JOIN Job  ON    (BaseJobId = Job.JobId) WHERE BaseFiles.JobId IN(3401,3532,3614,3694,3774,3858,4048,4127,4215,4297,4377,4568,4652,4751,4833) ) AS tmp GROUP BY PathId, FilenameId, DeltaSeq ) AS T1 WHERE (Job.JobId IN ( SELECT DISTINCT BaseJobId FROM BaseFiles WHERE JobId IN (3401,3532,3614,3694,3774,3858,4048,4127,4215,4297,4377,4568,4652,4751,4833)) OR Job.JobId IN(3401,3532,3614,3694,3774,3858,4048,4127,4215,4297,4377,4568,4652,4751,4833)) AND T1.JobTDate = Job.JobTDate AND Job.JobId = File.JobId AND T1.PathId = File.PathId AND T1.FilenameId = File.FilenameId ) AS T1 JOIN Filename ON (Filename.FilenameId = T1.FilenameId) JOIN Path ON (Path.PathId = T1.PathId) WHERE FileIndex > 0 ORDER BY T1.JobTDate, FileIndex ASC

- ну и многочисленные параллельные insert-ы во время выполнения ежесуточного бекапа большого количества файлов;

Интересует, как бы оптимальнее настроить postgres для такой вот единственной базы? Пока остановился на следующем:

max_connections = 150 # в bacula director стоит max concurrent 150
shared_buffers = 15GB
temp_buffers = 8GB
wal_buffers = 16MB
work_mem = 512MB
maintenance_work_mem = 1GB 
effective_cache_size = 42GB
fsync = off
synchronous_commit = off
wal_sync_method = fsync 
random_page_cost = 2.0
cpu_tuple_cost = 0.001
cpu_index_tuple_cost = 0.0005
track_counts = on
update_process_title = off
autovacuum = on
autovacuum_vacuum_threshold = 5000
autovacuum_analyze_threshold = 2500 
default_statistics_target = 50
constraint_exclusion = on
checkpoint_segments = 16

Что в этом конфиге кажется вам диким? Или просто неоптимальным? Подскажите, т.к не имею большого опыта в настройке Постгреса. Версия PG: postgresql-server-9.2.1

Все это стоит на FreeBSD, там установил вот что:

kern.ipc.shm_use_phys=1
kern.ipc.semmni=256
kern.ipc.semmns=1024
kern.ipc.somaxconn=4096
kern.ipc.shmmax=17179869184
kern.ipc.shmall=15395266600
kern.maxfiles=256000
kern.maxfilesperproc=240000
kern.maxvnodes=500000
kern.threads.max_threads_per_proc=4096
vm.pmap.shpgperproc=4900
vm.pmap.pv_entry_max=32000000

Опять же, может с чем переборщил, или забыл что важное? Скорректируйте с высоты вашего опыта =) Буду благодарен любым замечаниям.

 ,

Komintern
()

Книжки по СУБД.

Форум — Talks

Добрый день. Всю жизнь использовал mysql.. ну как - писал что-то, хранил статистику, данные.. писал под отчеты и т.д..
Сейчас в очередной раз задумался, что пора бы начать новый проект с postgresql...
Книжек про нее нет - все на английском.
Что в принципе, не проблема.. но сперва задался вопросом:
А нет ли каких-либо книжек по теории СУБД?
Ну, и может, уважаемые специалисты подскажут книжку для начала работы с postgresql? (Думаю, что после полной теории начну с документации самого postgresql, но а вдруг)

 , , ,

fjfalcon
()