Изучаем 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 настройка ядро память диски диск

См. также

В облако на работу: Все варианты авторизации ОС сервером 1С на базе РЕД ОС 8 в домене windows. Рецепты от Капитана

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

В публикации рассматриваются все варианты авторизации ОС сервером 1С на базе РЕД ОС 8 в домене windows. Как случаи, когда сервер 1С авторизирует веб и обычных клиентов 1С в active directory, так и когда сам сервер является клиентом, например при HTTP запросах выполняемых сервером 1С.

18.03.2024    556    capitan    0    

9

Три пингвина под окном… Точки над Ё. Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux

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

Прошлая публикация "Три пингвина под окном… Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux" набрала более 20К просмотров. В моем случае это абсолютный рекорд. Как и обещал в ней, рассказываю, как установить неподдерживаемый дистрибутив ОС у облачного провайдера.

25.02.2024    2254    capitan    0    

6

Тестовый кластер 1С на UBUNTU 23.10

Linux Платформа 1С v8.3 Россия Абонемент ($m)

Описан процесс создания простого кластера 1С в связке: отдельный сервер UBUNTU версия 23.10 + сервер 1С версия 8.3.23.1997 + PostgreSQL версия 15. Автор не претендует на новизну решения, но пошаговая упорядоченная инструкция позволяет стандартными методами быстро и просто создать кластер 1С на серверах Linux.

1 стартмани

08.02.2024    1558    janerev1956    7    

18

В облаке, как дома: Устраиваемся поудобнее. Рабочее место пользователя 1С на базе РЕД ОС (HTTPS и архивирование)

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

На прошедшем вебинаре "В облаке, как дома: Как настроить рабочее место пользователя 1С на базе РЕД ОС" мы договорились, что продолжением будет установка соединения по HTTPS и архивирование. Это финальные штрихи в настройке рабочего места. Вот и оно (продолжение) или они (штрихи), прошу под кат...

29.01.2024    788    capitan    5    

6

Определение длительности аудиофайла (Linux)

Linux Разное Платформа 1С v8.3 Абонемент ($m)

Пример обработки для определения длительности аудиофайла в среде Linux.

1 стартмани

12.01.2024    394    0    ErAK    2    

2

Три пингвина под окном... Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux

Linux Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

На прошедшем вебинаре "В облаке, как дома: Как настроить рабочее место пользователя 1С на базе РЕД ОС" мы договорились, что продолжением будет обзор рабочих мест на других отечественных ОС. Вот и оно (продолжение) или он (обзор), прошу под кат...

25.12.2023    2150    capitan    6    

14

Интерпретатор команд (только Linux)

Linux Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Интерпретатор команд для Linux, позволяет выполнять команды в среде Linux под правами пользователя сервера 1С. Полезно, когда необходимо выполнить команду на сервере, а доступа к командной строке нет.

1 стартмани

11.12.2023    516    3    Svb84    0    

4

Автоматическое монтирование целевых папок по ключу при изменении местоположения источника (раздела диска)

Linux Бесплатно (free)

Вариант динамического автоматического монтирование целевых папок по ключу папки при изменении местоположения источника (раздела диска).

16.11.2023    518    NeSPEC    3    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. awk 741 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 2473 16.06.20 22:25 Сейчас в теме
Да. Круто. Это уже боевая система или тестовая ?
4. D_astana 110 16.06.20 22:47 Сейчас в теме
(3)тестовая. Еще обкатываю, еще изучаю.
5. capitan 2473 17.06.20 09:19 Сейчас в теме
(4)Ок. Повешу свои уши на крючок внимания )
6. SerVer1C 763 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 3039 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 3039 18.06.20 15:32 Сейчас в теме
(12) Подняли с коллегой вопрос этот как раз - у него I9-9900K с водяным охлаждением в перформанс 24/7 работает, но, конечно, почти ничего не выполняет - он его как сервер удаленной разработки использует вместо тормозных рабочих ксеонов. Ну и у него еще I7-7700K в таком же режиме. За месяц света нагорело 30 Квт, компы не выключались, на них 1С-сервер и MS SQL, но работают они только днем по всей видимости. Ну и посудомойки и стриралки никто не отменял.

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