|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
Доброго времени суток дорогие форумчане. Помогите настроить postgresql.conf для 20GB памяти ,по моим расчетам и с помощью online pgtune получается такой конфиг : Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
К базе подключен OpenERP и ORM очень часто использует ORDER BY и GROUP BY. Посоветуйте пожалуйста какой конфиг сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2016, 13:42 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
+1 к вопросу ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2016, 14:45 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
NewBie77, А вас производительность беспокоит или просто так спрашиваете? Покажите vmstat -SM 2 и iostat 2. Без этого советы про shared_buffers нельзя раздавать. work_mem кажется очень большим, но на этот счет нужно смотреть ваши запросы. -- Вам бы обновиться прежде всего, 9.2 - старая. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2016, 14:53 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
tadminNewBie77, А вас производительность беспокоит или просто так спрашиваете? Покажите vmstat -SM 2 и iostat 2. Без этого советы про shared_buffers нельзя раздавать. work_mem кажется очень большим, но на этот счет нужно смотреть ваши запросы. -- Вам бы обновиться прежде всего, 9.2 - старая. Да для производительности, на данный момент память 12GB ночью планируем поднять до 24GB и 20GB дать базе Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
avg-cpu: %user %nice %system %iowait %steal %idle 11.92 0.00 2.10 1.34 0.00 84.63 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 2.50 40.00 0.00 80 0 sdb 0.00 0.00 0.00 0 0 avg-cpu: %user %nice %system %iowait %steal %idle 28.39 0.00 2.44 1.30 0.00 67.87 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 1.50 96.00 0.00 192 0 sdb 0.00 0.00 0.00 0 0 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2016, 15:01 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
NewBie77, Теоретически память у вас еще есть, но лучше сильно выше 6-8G buffer cache не задирать (если сейчас 12Gb RAM). Процент попаданий в кеш можно посмотреть так: Код: plsql 1.
Если у вас база небольшая, то и shared_buffers большой не нужен. Вот так совсем детально, только нужно ставить модуль. Код: plsql 1. 2. 3. 4. 5.
Сколько у вас реально клиентских процессов pg? При max_connections = 100 и work_mem = 52428kB у вас половина памяти может быть прихвачена одними лишь клиентскими соединениями. Стоит смотреть планы медленных запросов (log_min_duration = 100)и решать, можно ли уменьшить для них work_mem в пользу shared_buffers Обновитесь! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2016, 16:09 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 03:23 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 03:33 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
NewBie77, Начнём с ядра. Я смотрю на вывод: Код: sql 1. 2.
Параметры `vm.overcommit_memory = 2` и `vm.swappiness=0` можно прописать в /etc/sysctl.conf, vm.dirty% там же (советую почитать про эти параметры детальней). “Прозрачные гигантские страницы” выключаются как-то так: Код: sql 1. 2. 3.
Теперь база. Для 20Гб я бы начал с `shared_buffers=2GB`, не больше. Тут несколько причин: весь ввод-вывод идёт только через шареные буфера Postgres работает через кэш операционки, поэтому горячие данные будут в кэше (либо там, либо тут) в любом случае Если у вас высокая пишущая нагрузка, то в кэше очень быстро накапливаются грязные станицы. Это приводит к: (1) более интенсивным контрольным точкам, (2) читающие сессии могут тормозить, ибо вынуждены сбрасывать грязные страницы из кэша Проще заставить писателей конкурировать за "холодную" часть кэша и пистаь на диск грязные страницы. Я предпочитаю дать базе меншье шаренных буферов, нежели отдать "как можно больше" — так меньше шансов схлопотать "затыки", когда система "внезапно" блокируется на IO. Понятно, что решение основывается на нагрузочных тестах. (Кстати, тут подход "как в ORACLE" не работает, совсем.) Независимо от размера шареных буферов, я настраиваю bgwriter как можно более аггресивно и растягиваю чекпойнты: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Обязательно аггресивный autovacuum и логгирование: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
И ещё, про память: `maintenance_work_mem` требуется (у меня) в основном при создании индексов, что нечасто. Ставлю в 1GB. `autovacuum_work_mem` ставлю так, чтобы autovacuum_max_workers * autovacuum_work_mem оставляло бы достаточно памяти для нормальной работы базы, и в тоже время позволяло бы не тормозить на больших таблицах. `effective_cache_size` не сильно влияет, потому ставлю в 80% от реально свободной памяти (free -m) для системы, проработавшей какое-то время. `work_mem` показывает сколько памяти может съесть каждый узел в плане. Т.е. если у вас сложный запрос с хэшами и сортировками, то этот параметр можно умножать на 5,7,... — по потребности (понятно, что это для каждой сессии ). Соответственно, если держать его "высоко", то можно легко уйти в своп. Параметр планировщика, т.е. на этапе планирования выбирается либо более долгий алгоритм, работающий с диском (временные файлы), либо более шустрый, но жадный до памяти. При исполнении запроса переключения на что-то другое не произойдёт (не реализовано совсем). Этот параметр самый "опасный" что-ли. И т.к. он пользовательского контекста (можно в сессии поменять), то я держу его на 6MB и выкручиваю по необходимости для индивидуальных запросов. Обязательно настраиваю мониторинг, чтобы видеть дисковую нагрузку, нагрузку от контрольных точек и bgwriter-а. Анализирую логи и самые проблемные (индивидуально и суммарно) запросы, правлю настройки соответственно. Тюнерами не пользуюсь. Предпочитаю делать так для новых систем: настраиваю логи, bgwriter, checkpoint'ы и autovacuum как выше собираю анамнез несколько типичных дней правлю память по необходимости. Настройка базы (особенно в случае Postgres'а) требует настройки также ОСи, поэтому надо ещё и в железе, и в ОСи разбираться. Или сисадминов привлекать... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 11:03 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
vyegorov, ради интереса: log_min_messages = 'info', log_min_error_statement = 'warning' помогают что-то полезное отловить? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 11:41 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
Alexius, Не даёт особо ничего. Это больше моя паранойя — проект развивался 4 года без ДБА (совсем), и сейчас я хочу видеть любой возможный писк в логах, чтобы проще было отстаивать своё мнение, которое ну очень не нравиться разработчикам... Эти параметры можно оставить как есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 12:05 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
vyegorov , Огромное вам спасибо за такой ответ , теперь разобрался во многом. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 14:47 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
vyegorovAlexius, Не даёт особо ничего. Это больше моя паранойя — проект развивался 4 года без ДБА (совсем), и сейчас я хочу видеть любой возможный писк в логах, чтобы проще было отстаивать своё мнение, которое ну очень не нравиться разработчикам... Эти параметры можно оставить как есть. Спасибо, добрый человек!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2016, 15:33 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
> alter system set bgwriter_delay = '100ms'; зачем его тормозить. 10ms -- и пусть решедулится, это же всего один поток. далее смотрим дерти память в линуксе и смотрим > alter system set checkpoint_completion_target to 0.8; тоже не понимал этого. 1.0 -- пусть все время использует > alter system set checkpoint_segments to 64; > alter system set checkpoint_timeout to '15min'; ту выкручивать, чтобы только по времени триггерилось (alter system set log_checkpoints = on; и смотреть прчину, там видно). 15мин -- почему не 30? или не час? размазывать так уж размазывать. вопрос тока в размере xlog > alter system set autovacuum = on; по автовакууму. надо тоже его делать с минимальным временем решедулинга, далее костами (сколько за раз вакуум может сделать работы) настраивать возможные локи при записи. минимальное время на решедулинг -- повышает скорость вакуума (таблицы не пухнут при отсутствии долгих транзакций), но и повышает вал траффик. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2016, 16:39 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
Misha Tyurin, Я со всем согласен. Только это уже “тонкая” (по моему разумению) настройка базы, которая была какое-то время в работе и есть понимание того, как оно всё вращается там, внутри. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2016, 18:37 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
vyegorov, Можно один вопрос Код: plsql 1. 2. 3. 4.
Эти параметры сильно зависят от оперативной памяти ? Например можно использовать его в таком виде на 4-6 ГБ памяти ? Или лучше изменить scale_factor ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 09:13 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
NewBie77, Надо смотреть на то, как часто и как долго работают autovacuum-ы. Scale -- это проценты от размера таблицы (в записях). Чем больше будет таблица, тем реже будет AV её подхватывать. Для "особых" таблиц (больших, или меняемых раз в сутки с принудительным вакуумом) надо прописывать индивидуальные для таблицы параметры через `ALTER TABLE`. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 12:28 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
vyegorovNewBie77, Надо смотреть на то, как часто и как долго работают autovacuum-ы. Scale -- это проценты от размера таблицы (в записях). Чем больше будет таблица, тем реже будет AV её подхватывать. Для "особых" таблиц (больших, или меняемых раз в сутки с принудительным вакуумом) надо прописывать индивидуальные для таблицы параметры через `ALTER TABLE`. В среднем 5-10 секунд длится вакуум таблицы , редко но бывает что на одну таблицу нужно 40-50 сек и ниже Warning : There is already transaction in progress ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 14:42 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
NewBie77, В моменты, когда работает AV есть ошибки в логах? Или может он влияет на запросы? Если нет, то я бы не дёргался. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 14:50 |
|
Настройка postgresql.conf для 20GB памяти
|
|||
---|---|---|---|
#18+
vyegorovNewBie77, В моменты, когда работает AV есть ошибки в логах? Или может он влияет на запросы? Если нет, то я бы не дёргался. Ошибок нету только Warning : There is already transaction in progress . Спасибо значит не нужно трогать ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 14:56 |
|
|
start [/forum/topic.php?fid=53&msg=39264354&tid=1996780]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 156ms |
0 / 0 |