Изучаем Linux. Настройка Ubuntu Server 18.04 для работы PostgreSQL

16.06.20

Администрирование - Linux

После того, как в прошлой публикации меня закидали помидорами за использование Windows+PostgreSQL, решил установить Ubuntu Server 18.04 на тестовую машину и пощупать загадочный для меня мир Линукса. В процессе изучения решил написать все нюансы, что насобирал, для следующих целей: 1) Шпаргалка для себя, чтобы, когда понадобится, опять не собирать информацию по разным источникам. 2) Получить новую порцию помидоров и осознать, что сделал неверно, дабы не переносить это на боевой сервер, если соберусь.

Оглавление.

  • Процессор

  1.  Энергопотребление
  2.  Прочие параметры
  • Память

  1.  HugePages
  2.  Файл подкачки
  3.  Прочие параметры
  • Диски

  1. TRIM
  2. fstab
  3. bitmap при SOFT RAID

 

Процессор

 

.Настраиваем энергопотребление на максимальную производительность.

   Когда я поставил серверную Ubuntu, я и подумать не мог, что мой процессор будет работать в режиме максимальной экономии. Но это так. Для просмотра текущего состояния выполняем команду.

 
 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

У меня вышло powersave. На самом деле у вас может быть ondemand. Тут вся фишка в том какие режимы может поддерживать ваш процессор. На моей тестовой системе процессор держит только powersave(энергосбережение) и performance(макс производительность).

Отключаем демон, который управляет частотой процессора.

systemctl disable ondemand

Перезагружаем систему и проверяем. Должно быть performance.

 Проверяем текущие частоты каждого ядра

grep MHz /proc/cpuinfo

У меня так

 
А было 
 
cpu MHz        : 799.941
cpu MHz        : 1608.222
cpu MHz        : 900.019
cpu MHz        : 800.078
 

.Прочие настройки процессора

В файле /etc/sysctl.conf прописываем

kernel.sched_migration_cost_ns = 5000000 увеличиваем время выполнения операций на 1 ядре, чтобы долгие запросы не мигрировали с одного ядра в другое. 

kernel.sched_autogroup_enabled=0    подробнее тут

 

В терминале выполняем

lscpu

Если напротив строки NUMA node цифра 1, ничего не делаем, если больше, тогда отключаем NUMA

vm.zone_reclaim_mode = 0
kernel.numa_balancing=0

 

Память

 

.HugePages

  По умолчанию размер страниц памяти установлен 4 КБ. Можем установить в 2 МБ и 1 ГБ(1 ГБ не везде, подробнее будет ниже). На хабре есть статья тестирования производительности в зависимости от настроек HugePages. Меня привлек следующий раздел статьи

 

   Если я правильно понял, то когда размер базы превышает выделенный Postgre shared_buffers и количество пользователей до 30, то размер страниц в 2 МБ самое то. Например достаточно близкая к реалиям 1с ситуация: сервер с 16 ГБ оперативной памятью, shared_buffers= 4ГБ, размер базы 7 ГБ, пользователей 10.

 
Проверяем текущие настройки
grep Huge /proc/meminfo

Увидим примерно следующее

 

 
 Проверяем сколько страниц нам необходимо выделить, только меняем путь к файлу pid экземпляра postgresql.

получаем 

2 момента, если у вас несколько экземпляров на одном хосте, то данную процедуру необходимо выполнить для каждого из них и результаты сложить. Второй момент, количество страниц зависит от настроек памяти в postgresql.conf. Если вы, что-то изменили, необходимо заново промониторить необходимое количество больших страниц.

 
Устанавливаем настройки в файле /etc/sysctl.conf

vm.nr_hugepages=(количество страниц)

После перезагрузки заново проверим выделение памяти. У меня так:

Чем больше эксплуатируем систему, тем меньше свободных и зарезервированных страниц будет.

 

Размер страниц 1 ГБ

Если у вас на сервере под 256 ГБ оперативной памяти можно установить данный размер

Проверяем поддерживает ли ваш процессор данную опцию

if grep pdpe1gb /proc/cpuinfo >/dev/null 2>&1; then echo "1GB supported."; fi

 Если поддерживает, редактируем файл /etc/default/grub. В строке GRUB_CMDLINE_LINUX добавляем 

 default_hugepagesz=1GB hugepagesz=1G

выполняем

grub-mkconfig -o /boot/grub/grub.cfg

  Перезагружаем систему и выполняем пункты описанные ранее для выделения нужного количества больших страниц нашей БД.

 

Резервируем HugaPages за PostgreSQL

Это на тот случай, если вы установите в систему еще какое-то приложение, которое может забрать большие страницы для себя.

Выполняем

id postgres

Из того, что увидим, нас интересует gid=1001(postgres) 

В файле /etc/sysctl.conf прописываем

vm.hugetlb_shm_group = 1001

Теперь большие страницы памяти будут выделяться только для PostgreSQL.

 

.Файл подкачки

Уменьшаем агрессивность использования swap. 

Устанавливаем настройку в файле /etc/sysctl.conf

vm.swappiness=1

  По умолчанию в Ubuntu Server =60, совсем в 0 убирать не стоит, если памяти не хватит, операционка может убить процесс postgre для ее высвобождения.

 

.Прочие параметры памяти в файле /etc/sysctl.conf

vm.dirty_background_bytes          =25% от скорости записи диска в байтах. Объем данных сбрасываемых из оперативки на диск фоновым процессом

vm.dirty_bytes                              =100-200% от скорости записи диска в байтах. Объем данных сбрасываемых из оперативки на диск выполняемым запросом.

Если у вас железный RAID с кэшем или SSD с кэшем, то vm.dirty_bytes=размер кэша 

 

Что у нас в теории: по умолчанию в ubuntu эти механизмы настроены на 10 и 20% от оперативной памяти, но если у нас 64 ГБ оперативки, то разом на диск может приехать 6 ГБ данных. На практике же у нас в самой PostgreSQL есть настраиваемые параметры сброса данных из оперативной памяти на диск. Как настройки postgre и операционной системы между собой работают не знаю. 

vm.overcommit_memory              =2    подробнее тут

vm.min_free_kbytes                     =307200 увеличиваем свободную память до 300 МБ, которая не будет занята файловым кэшем. Если памяти много, то лучше 1ГБ, чтобы фрагментация памяти происходила раньше. По умолчанию 66 МБ.
 

 

Диски

 

.TRIM для ssd

 После установки системы Ubuntu раз в неделю посылает команду TRIM ssd дискам, можно перенастроить под свои нужды.

Для начала проверим видит ли ваша система, что это именно ssd диск и команда TRIM туда посылается.

Вариант 1

hdparm -I /dev/sdc3 | grep TRIM

вместо sdc3 ваш раздел.

Вариант 2

lsblk --discard

Выделенное разделы на SSD, с нулем HDD.

Теперь проверим как часто в данный момент срабатывает отправка команды

systemctl list-timers fstrim.timer

  Тут мы увидим время последнего выполнения и время следующего запуска команды. У меня система уже настроена на выполнения каждый час, в чистом дистрибутиве настроено выполнение раз в неделю.

Редактируем файл /lib/systemd/system/fstrim.timer

В строке OnCalendar= прописываем расписание выполнения команды

Например:

OnCalendar=hourly -каждый час в 00 минут

OnCalendar=* 4 ***  -раз в день в 4 утра

OnCalendar=* 9-20 ***  -каждый час с 9 утра до 8 вечера.   

Применяем настройки

systemctl daemon-reload

 

  Можно указать параметр discard при монтировании системы в файле /ets/fstab, но пишут, что скорость работы диска снизится.

 

.Параметры монтирования дисков

Меняем параметры в файле /etc/fstab c

 ext4 defaults 0 0

на 

 ext4 defaults,noatime,nodiratime 0 0


если диск SSD и хотите TRIM при каждом изменении файловой системе, то:

 ext4 defaults,noatime,nodiratime,discard 0 0

На самом деле параметров много, еще разбираюсь. Если в комментариях подскажут полезные для работы PostgreSQL буду благодарен.

 

.Перенос bitmap  файл софтового RAID на другой диск

Далее цитата из интернета:

Linux-овый софтрейд поддерживает замечательную фичу: bitmap. Там отмечаются измененные блоки на диске, и если у вас почему-то отвалился один диск из массива, а потом вы его обратно добавили – полная перестройка массива не нужна. Чертовски полезно. Хранить можно на самом рейде – internal, а можно в отдельном файле – но тут есть ограничения (на тип ФС например). Я сделал internal bitmap. И зря. Internal bitmap тормозит безбожно т.к. постоянно дергается головка веников при записи.

Я монтировал RAID при установке системы и  bitmap  файл был смонитирован на этих же дисках. 

Отключаем текущие настройки

mdadm --grow --bitmap=none /dev/md127

Где md127 это наш RAID

Устанавливаем новые настройки

mdadm -G /dev/md127 -b /var/md127_intent

Где md127 наш RAID, md127_intent где будет расположен наш bitmap файл. У меня раздел /var находится на ssd диске.

 

Заключение

После всех изменений pgbench с настройками  "pgbench -c 8 -j 4 -T 600 -v"стал показывать прирост почти на 40% по сравнению с чистой Ubuntu. Размер тестовой базы 7 ГБ.

Если формат статей будет интересен, есть возможность рассказать варианте настройке SSH для работы с сервером. Текущий рабочий инструмент сейчас выглядит так. По центру рабочий терминал. Снизу всплывающая вкладка с файловым менеджером, справа три всплывающие вкладки для мониторинга системы. При необходимости их можно закрепить. 

 

 

 

 

 

Архивирование делаю при помощи pg_probackup, с небольшой цветовой надстройкой, чтобы удобнее было мониторить бекапы.

 

Ubuntu server linux postgre postgreSQL 1c настройка ядро память диски диск

См. также

Linux Программист Бесплатно (free)

При многолетней эксплуатации 1С на Windows и MS SQL в базе накапливаются не самые оптимальные запросы, COM-объекты и скрипты, зависящие от ОС. Из-за этого процесс перехода на PostgreSQL и переноса сервера 1С на Linux неизбежно осложняется длительным исправлением кода и оптимизацией запросов. Расскажем о том, как с задачей такого рефакторинга справились в компании Avito.

13.11.2024    4619    klimat12    15    

25

Облачные сервисы, хостинг Linux Тестирование QA Сервера Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Завершающая публикация цикла "В облако на работу:.. Рецепты от Капитана", в ходе которых был собран полнофункциональный рабочий контур 1С в сети на отечественной Ред ОС. С веб-серверами, доменной авторизацией, архивированием, отказоустойчивостью и прочая, прочая... В этой статье мы определяемся с быстродействием системы, проводим нагрузочное тестирование и отпускаем ее в свободное плавание (зачеркнуто) выпускаем ее в продуктовый контур, где, конечно же, придется отлавливать ошибки, мониторить состояние и т.п.

31.10.2024    1319    capitan    0    

0

Облачные сервисы, хостинг Linux Сервера Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Одна из завершающих публикаций цикла "В облако на работу:.. Рецепты от Капитана", в ходе которых был собран полнофункциональный рабочий контур 1С в сети на отечественной Ред ОС. С веб-серверами, доменной авторизацией, архивированием и прочая, прочая... На закуску разбираемся с отказоустойчивостью. В этой публикации для серверов 1С заодно попробуем подобно сериалу «Разрушители легенд» подтвердить или опровергнуть пару устойчивых мифов о требованиях назначения функциональности.

18.10.2024    1720    capitan    5    

12

Linux Системный администратор Программист Стажер Платформа 1С v8.3 Россия Бесплатно (free)

1C > Postgres > (Linux) > мы (=проблемы в 2024). Информация будет полезна начинающим 1С программистам (и сисадминам). Без ИТС. Часть 1.

01.07.2024    5204    AlOkt    30    

19

Сканер штрих-кода Linux Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Драйвер сканера штрих-кодов в 1С выполнен по технологии NativeAPI, следовательно, поддерживается возможность работы в Linux, но сама настройка оказалось не такой простой, как в Windows, понадобились навыки администрирования linux. В данной публикации представлен опыт установки сканера Mercury CL-2200 P2D BT в ALT Linux.

18.06.2024    1361    MOleg82    1    

9

Облачные сервисы, хостинг Linux Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Одна из завершающих публикаций цикла "В облако на работу:.. Рецепты от Капитана" в ходе которых был собран полнофункциональный рабочий контур 1С в сети на отечественной Ред ОС. С веб-серверами, доменной авторизацией, архивированием и прочая прочая... Это основное блюдо, на закуску разберемся с отказоустойчивостью. В этой публикации для PostgreSQL, заодно попробуем сделать это по новому.

17.06.2024    7664    capitan    18    

40

Сервера Linux Системный администратор Россия Бесплатно (free)

Тема Ubuntu, PostgreSQL и 1С уже избитая. Но все же, следуя инструкциям всех мануалов, пришлось потратить около 3-х дней. И как результат — готовые скрипты для установки сервера 1С и PostgreSQL на свежей Ubuntu за 5 минут.

14.06.2024    3898    user1389975    15    

38
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. awk 744 16.06.20 14:06 Сейчас в теме
Молодец. Круто. Одна из лучших статей, которую я читал на Инфостарте, за последнее время.
adeich; Ali1976; 13jaguar; starik-2005; user779117; +5 Ответить
2. D_astana 110 16.06.20 17:28 Сейчас в теме
Забыл добавить в статью. С 11 версии postgreSQL большие страницы по 2МБ, начали поддерживаться и в windows. Так же mssql сервер можно запустить с этой опцией. Но, что-то нигде тестов сравнения до и после включения опции, я не нашел.
3. capitan 2507 16.06.20 22:25 Сейчас в теме
Да. Круто. Это уже боевая система или тестовая ?
4. D_astana 110 16.06.20 22:47 Сейчас в теме
(3)тестовая. Еще обкатываю, еще изучаю.
5. capitan 2507 17.06.20 09:19 Сейчас в теме
(4)Ок. Повешу свои уши на крючок внимания )
6. SerVer1C 815 18.06.20 10:04 Сейчас в теме
Не светите патчерами на скринах ))
8. D_astana 110 18.06.20 12:12 Сейчас в теме
7. viptextil1 23 18.06.20 10:42 Сейчас в теме
Настраивать производительность на максимум имеет смысл при круглосуточной нагрузке сервера близкой к 100 %. В остальных случаях это резко увеличит энергопоребление при незначительном увеличении производительности.
9. D_astana 110 18.06.20 12:15 Сейчас в теме
(7)думаете не значительно? Просто если бы у процессора моего был режим ondemand я бы оставил, а так между мин и макс даже не знаю. Спасибо, подумаю
10. starik-2005 3088 18.06.20 14:34 Сейчас в теме
(9) В действительности режим экономии энергии и режим высокой производительности, который доступен процессорами Intel, отличается в части производительности в некоторых сценариях в несколько раз. А вот режим по-требованию, который для процессоров AMD устанавливается по-умолчанию, при смене на режим высокой производительности для клиент-сервера почти не дает прибавки.

А по поводу энергопотребления, то от нагрузки зависит. Есть нагрузка - есть энергопотребление, нет нагрузки - нет энергопотребления (ядро крутит пустой цикл из wait'ов - Idle).

В ОС семейства Windows процесс «бездействие» используется для понижения энергопотребления процессора. Конкретный способ понижения энергопотребления зависит от возможностей аппаратного обеспечения и прошивки. Например, на процессорах архитектуры x86 процесс «бездействие» в цикле выполняет инструкцию HLT. Во время выполнения этой инструкции процессор отключает некоторые внутренние компоненты и начинает ожидать наступления аппаратного прерывания (англ. hardware IRQ). При наличии поддержки какой-либо технологии энергосбережения (например, Intel SpeedStep) процессор также может переключиться в режим пониженного энергопотребления.
В других ОСах - та же тема. Понижение частоты в режиме энергосбережения достигает 800 MHz для Intel, в реживе высокой производительности - до стоковой частоты. Но сама по себе команда HLT переводит ядро в режим ожидания аппаратного прерывания, которое переключает ядро на выполнение конкретного потока. Чем реже это происходит, тем ниже опускается частота в простое при поверсэйв, при жтом при начале выполнения кода процессор не сразу разгоняется, а постепенно, что приводит к тому, что проц работает большую часть времени на рваной нагрузке с частотой ниже стока, чем и объясняется серьезный слив такого режима в части производительности для 1С, которая постоянно обращается к либо внешнему хранилищу, и ожидая на i/o теряет частоту, либо к серверу СУБД, и ожидая ответа от него сбавляет частоту еще сильнее...

В режиме по=требованию частота динамически регулируется нагрузкой, возрастая до буста при возможности за миллисекунды (в АМД динамическая подстройка частоты производится если не ошибаюсь аж миллион раз в секунду, при этом ондеманд от поверсейв отличается поддержкой частот вверх или вниз от стока, но реакция почти мгновенная на изменение нагрузки - стресс-тест на линухе на R5 3600 в течение 100 сек у меня на воздухе обычном за 1300р нагрел проц до 44оС, при этом на А320-м чипе частота держалась вблизи 4-4,1ГГц, после окончания нагрузки температура упала до 36оС за минуту, частоты при этом держались 3,6 "сток" - 4,0, но температура падала, поэтому и энергопотребление падало, на поверсэйв температура 35оС - не сильно ниже).
13jaguar; awk; D_astana; +3 Ответить
11. D_astana 110 18.06.20 15:14 Сейчас в теме
(10)спасибо. Познавательно.
12. D_astana 110 18.06.20 15:22 Сейчас в теме
(10)А вот интересно, режимы мин и макс, какая разница в пересчете на рубли за месяц будет? Например i7-8700. Стоит ли вообще обсуждать производительность и экономию для фирмы? Мы же не о дата центрах речь ведем.
13. starik-2005 3088 18.06.20 15:32 Сейчас в теме
(12) Подняли с коллегой вопрос этот как раз - у него I9-9900K с водяным охлаждением в перформанс 24/7 работает, но, конечно, почти ничего не выполняет - он его как сервер удаленной разработки использует вместо тормозных рабочих ксеонов. Ну и у него еще I7-7700K в таком же режиме. За месяц света нагорело 30 Квт, компы не выключались, на них 1С-сервер и MS SQL, но работают они только днем по всей видимости. Ну и посудомойки и стриралки никто не отменял.

У меня без компа один теплый пол и полотенцесушитель электрический в апреле-мае выдал счет за электричество на 2к каждый месяц. Так что я в 10 раз больше плачу, а из компов у меня только ноут на I5 и монитор 2к 24" (на этой квартире).
14. nomad_irk 76 18.06.20 15:35 Сейчас в теме
(13)Чего-то маловато 30кВт за месяц. Живет один? Как часто посудомойки/стиралки используются? Холодильника вообще нет?
15. starik-2005 3088 18.06.20 15:37 Сейчас в теме
(14) Я не в курсе. Видимо нет, ибо у меня один холодильник 370Квт по паспорту в год, что в районе 30Квт в месяц. Может ему холодильник и не нужен.
16. D_astana 110 18.06.20 15:52 Сейчас в теме
(13)надо будет свой тестовый стенд подключить к ибп с замером потребления. И в двух режимах энергопотребления погонять pgbench пару часов.
17. starik-2005 3088 18.06.20 23:41 Сейчас в теме
(16) вряд ли будет разница в pgbench, а вот в простое разницу было бы интересно отследить, ибо если прав товарищ в (7), то она будет резко выше (но я сомневаюсь, ибо без задач система будет HLT крутить вместо процессов вне зависимости от режима энергосбережения).
Оставьте свое сообщение