Slide 1

Slide 1 text

Call of Postgres: Advanced Operations Alexey Lesovsky [email protected]

Slide 2

Slide 2 text

dataegret.com Around Linux: теория Tuning Linux: практика PostgreSQL: теория Troubleshooting PostgreSQL: теория Troubleshooting PostgreSQL: практика 02 03 01 04 05

Slide 3

Slide 3 text

Around Linux: теория 01

Slide 4

Slide 4 text

План 01 dataegret.com • Выбор оборудования и операционной системы. • Настройка операционной системы.

Slide 5

Slide 5 text

Что есть из оборудования 01 dataegret.com Свое оборудование. Виртуализация и облака. SaaS/PaaS.

Slide 6

Slide 6 text

Что выбрать? 01 dataegret.com Свое оборудование — нужна приватность. Виртуализация и облака — минимум администрирования. SaaS/PaaS — совсем-совсем минимум администрирования.

Slide 7

Slide 7 text

Что выбрать? 01 dataegret.com Свое оборудование — нужна приватность. Виртуализация и облака — минимум администрирования. SaaS/PaaS — совсем-совсем минимум администрирования. Но помним про деньги, да.

Slide 8

Slide 8 text

Особенности настройки 01 dataegret.com Свое оборудование: ● Hypertreading; ● Memory interleaving; ● Power saving policy; ● Остальное по-желанию.

Slide 9

Slide 9 text

Особенности настройки 01 dataegret.com

Slide 10

Slide 10 text

Storage подсистема 01 dataegret.com RAID контроллеры: ● Обязательно BBU или NVRAM ● HDD – Writeback/Cached/AdaptiveRA. ● SSD – Writethrough/Direct/NoRA. ● Для каждого RAID свои утилиты. ● И все ли хорошо с BBU?

Slide 11

Slide 11 text

Storage подсистема 01 dataegret.com NFS, iSCSI, FCP. ● Рекомендации вендора.

Slide 12

Slide 12 text

Storage подсистема 01 dataegret.com SSD бывают разные: ● Consumer. ● Enterprise (Toshiba/Intel). ● NVMе. Для каждого типа – свои настройки. ● Кэши и барьеры.

Slide 13

Slide 13 text

Особенности настройки 01 dataegret.com Виртуализация: ● Паравиртуальные драйвера (virtio); ● Host CPU, x2apic, Hugepages; ● Storage IO mode: Writeback vs. Writethrough vs. Direct. ● PCI passthrough (IOMMU, DMAR, SR-IOV); ● Остальное по-желанию.

Slide 14

Slide 14 text

Выбор операционной системы 01 dataegret.com Здесь вообще полная свобода, но: ● Стабильность, зрелость, качественный саппорт. ● Свежее ядро, системные библиотеки (glibc/headers). ● Свежие пакеты, в т.ч. и PostgreSQL.

Slide 15

Slide 15 text

Выбор операционной системы 01 dataegret.com RHEL/CentOS: ● Кастомное ядро, версия не всегда отражает реальную суть. ● Поддержка репозитория PGDG. ● Старые версии софта.

Slide 16

Slide 16 text

Выбор операционной системы 01 dataegret.com Debian/Ubuntu: ● Свежие ядра в Ubuntu, не совсем свежие в Debian. ● Поддержка репозитория PGDG. ● Хороший около-постгресовый инструментарий. ● Относительно свежие версии софта.

Slide 17

Slide 17 text

Что почитать 01 dataegret.com Kernel Newbies — https://kernelnewbies.org/ LWN.net — https://lwn.net/ The SSD Review — http://www.thessdreview.com/ Intel Support — https://ark.intel.com/

Slide 18

Slide 18 text

Настройка операционной системы 01 dataegret.com CPU Memory Storage Network

Slide 19

Slide 19 text

Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее.

Slide 20

Slide 20 text

Настройка операционной системы 01 dataegret.com Memory Network Storage CPU Планировщик Энергосбережение Виртуальная память Hugepages, THP NUMA Ввод-Вывод Планировщики Файловые системы Настройки ядра Настройки карты

Slide 21

Slide 21 text

Планировщик процессов 01 dataegret.com Completely Fair Scheduler – реализация многозадачности ОС. Переключение процессов на CPU. Проблема когда мало процессорных ядер и очень много процессов.

Slide 22

Slide 22 text

Планировщик процессов 01 dataegret.com PostgreSQL: много клиентов = много процессов. Соотношение больше чем 1/1 уже сказывается на производительности.

Slide 23

Slide 23 text

Планировщик процессов 01 dataegret.com Симптомы: ● Высокий cpu system time. ● Функции планировщика в выводе perf top. Что еще смотреть: ● /proc/sched_debug ● /proc/schedstat ● /proc/pid/sched ● sysctl -a -r kernel.sched

Slide 24

Slide 24 text

Планировщик процессов 01 dataegret.com Какие решения? ● Pgbouncer. ● Использование standby. Оптимизации (sysctl): ● kernel.sched_migration_cost_ns ● kernel.sched_autogroup_enabled

Slide 25

Slide 25 text

Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее.

Slide 26

Slide 26 text

Виртуальная память 01 dataegret.com Абстракция между физической памятью и приложениями: ● Active/Inactive lists. ● Dirty/Writeback. ● Flush threads.

Slide 27

Slide 27 text

Virtual memory 01 dataegret.com * - Including free and reclaimable pages * - The total available memory is not equal to total system memory. Dirty pages Total available memory* Writeback Permanent storage Process 1 Process 2

Slide 28

Slide 28 text

Виртуальная память 01 dataegret.com Становится проблемой на машинах с >32GB RAM. Симптомы: ● Внезапные пики утилизации хранилища. Что есть посмотреть: ● iostat ● /proc/meminfo

Slide 29

Slide 29 text

Writeback 01 dataegret.com * - Including free and reclaimable pages * - The total available memory is not equal to total system memory. Dirty pages Total available memory* vm.dirty_background_ratio vm.dirty_ratio Writeback Permanent storage Flusher threads wake up every dirty_writeback_centisecs and writing out dirty data older than dirty_expire_centisecs

Slide 30

Slide 30 text

Writeback 01 dataegret.com * - Including free and reclaimable pages * - The total available memory is not equal to total system memory. Flusher threads start writing out dirty data Dirty pages Total available memory* vm.dirty_background_ratio vm.dirty_ratio Writeback Permanent storage

Slide 31

Slide 31 text

Writeback 01 dataegret.com * - Including free and reclaimable pages * - The total available memory is not equal to total system memory. Processes writing out dirty data by itself Dirty pages Total available memory* vm.dirty_background_ratio vm.dirty_ratio Permanent storage Writeback

Slide 32

Slide 32 text

Виртуальная память 01 dataegret.com vm.dirty_background_ratio, vm.dirty_background_bytes vm.dirty_ratio, vm.dirty_bytes

Slide 33

Slide 33 text

Виртуальная память 01 dataegret.com vm.dirty_background_bytes: ● ¼ от размера кэш-памяти RAID контроллера или ● 64MB для HDD, 128MB для SSD. vm.dirty_bytes: ● Размер кэш-памяти RAID контроллера или ● 128MB для HDD, 256-512MB для SSD.

Slide 34

Slide 34 text

Виртуальная память и OOM 01 dataegret.com

Slide 35

Slide 35 text

Виртуальная память и OOM 01 dataegret.com Out-of-memory и OOM Killer: ● Swap нужен. ● vm.swappiness. ● vm.min_free_kbytes. ● vm.overcommit_memory.

Slide 36

Slide 36 text

Виртуальная память и NUMA 01 dataegret.com NUMA — Non-uniform Memory Access

Slide 37

Slide 37 text

Uniform Memory Access 01 dataegret.com core 1 core 4 core 3 core 2 core 1 core 4 core 2 Backend 1 Backend 2 Memory Bank 1 Memory Bank 2 Front Side Bus Pages of shared buffers CPU 1 CPU 2 core 3 core 2 Memory hub

Slide 38

Slide 38 text

Non-Uniform Memory Access 01 dataegret.com core 1 core 4 core 3 core 2 core 1 core 4 core 3 core 2 Backend 1 CPU 1 CPU 2 CPU 2 Local Memory Backend 2 Interconnect Pages of shared buffers Pages of shared buffers CPU 1 Local Memory

Slide 39

Slide 39 text

Виртуальная память и NUMA 01 dataegret.com Симптомы: ● Краткосрочные «зависания» процессов. ● Пики cpu system time. ● Разброс в latency на одних и тех же запросах.

Slide 40

Slide 40 text

Non-Uniform Memory Access 01 dataegret.com Что крутить? ● vm.nume_balancing ● vm.zone_reclaim_mode

Slide 41

Slide 41 text

Non-Uniform Memory Access 01 dataegret.com PostgreSQL и numactl? ● Запуск через numactl --interleave. ● pg_ctlcluster требуется патчить. ● Systemd требует правки юнитов. Intel Memory Checker.

Slide 42

Slide 42 text

Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее.

Slide 43

Slide 43 text

Большие страницы 01 dataegret.com Huge Pages vs. Transparent Huge Pages Что использовать? ● Huge Pages – базы данных. ● Transparent Huge Pages – app-сервера.

Slide 44

Slide 44 text

Большие страницы 01 dataegret.com Transparent Huge Pages: ● До версии kernel 3.13 - отключить и забыть. ● После 3.13 можно оставить как есть.

Slide 45

Slide 45 text

Большие страницы 01 dataegret.com Huge Pages и PostgreSQL: ● libhugetlbfs до 9.2 включительно. ● Недоступно в 9.3. ● Встроенная поддержка с 9.4.

Slide 46

Slide 46 text

Большие страницы 01 dataegret.com sysctl: ● vm.nr_hugepages – под размер shared_buffers ● vm.nr_overcommit_hugepages – запас ● vm.hugetlb_shm_group – только для libhugetlbfs Как проверить? ● /proc/meminfo ● pmap -x $pid

Slide 47

Slide 47 text

Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее.

Slide 48

Slide 48 text

Ввод-вывод на уровне хранения 01 dataegret.com План: ● Настройка RAID контроллеров. ● Ввод-вывод в Linux. ● LVM, MDRAID, Cache layers. ● Планировщики ввода-вывода.

Slide 49

Slide 49 text

Настройка RAID 01 dataegret.com MegaCli (StorCli): ● Настройка логических томов. ● Все ли хорошо BBU. ● Журнал событий контроллера.

Slide 50

Slide 50 text

Настройка RAID 01 dataegret.com Логические тома: ● HDD – Writeback, Cached, ReadAhead – OS/WAL. ● Отключить дисковый кэш. ● SSD – Writethrough, Direct, NoRA – Data. ● Отключить дисковый кэш на Customer SSD. ● HotSpare всегда в плюс. ● RAID10.

Slide 51

Slide 51 text

Настройка RAID 01 dataegret.com Все ли хорошо с BBU: ● Дата изготовления. ● Абсолютный заряд батареи.

Slide 52

Slide 52 text

Настройка RAID 01 dataegret.com Журнал событий контроллера: ● Дополнительный источник информации. ● Просаживает производительность в момент обращения.

Slide 53

Slide 53 text

bcache dmraid drbd lvm tmpfs devtmpfs ramfs xfs ceph iso9660 reiserfs smbfs ext overlayfs ... cfq noop deadline Virtual File System Linux Storage Stack Diagram 01 dataegret.com Process 2 Process 3 Process 1 PageCache Schedulers blq-mq SCSI mid layer SCSI drivers mmap read, write open, stat, ... BIOs (block I/Os) BIOs (block I/Os) NVME Virtio-PCI Qlogic HBA LSI RAID SATA SSD Adaptec RAID ... Physical Devices Based on Linux Storage Stack Diagram v4.0 https://www.thomas-krenn.com/de/wikiDE/images/b/ba/Linux-storage-stack-diagram_v4.0.png Network Block Layer DM malloc

Slide 54

Slide 54 text

Device-mapper и товарищи 01 dataegret.com LVM, MDRAID – ок, оверхэд на уровне стат. погрешности. Cache layers: ● FlashCache, Bcache, EnhanceIO, … ● CacheCade, maxCache, … ● Но зачем?

Slide 55

Slide 55 text

Планировщики IO 01 dataegret.com Планировщики ввода-вывода: ● cfq – универсальный default, но не лучший выбор для СУБД. ● deadline, noop – RAID-контроллеры, SSD, NVME. # cat /sys/block//queue/scheduler

Slide 56

Slide 56 text

Планировщики IO 01 dataegret.com Blk-mq – Multi-Queue Block IO Queueing Mechanism.

Slide 57

Slide 57 text

Планировщики IO 01 dataegret.com Driver Device Name Supported Device Kernel null_blk /dev/nullb* none (test driver) 3.13 virtio-blk /dev/vd* Virtual guest drivers (e.g. under KVM) 3.13 mtip32xx /dev/rssd* Micron RealSSD PCIe 3.16 scsi /dev/sd* e.g. SAS and SATA SSDs/HDDs 3.17 nvme /dev/nvme* e.g. Intel SSD DC P3700 Series 3.19 rbd /dev/rbd* RADOS block device (Ceph) 4.0 ubi/block /dev/ubiblock* 4.0 loop /dev/loop* Loopback device 4.0 dm / dm- mpath Request-based device mapper targets 4.1 xen-blkfront /dev/xvd* Virtual guest drivers (e.g. under Xen) 4.3 nbd /dev/nbd* Network block device 4.9 Blk-mk schedulers -- Added BFQ and Cyber schedulers 4.12

Slide 58

Slide 58 text

Планировщики IO 01 dataegret.com Загрузка через kernel boot параметры: ● scsi_mod.use_blk_mq=1 – SAS/SATA ● xen_blkfront.use_blk_mq=1 – XEN (Amazon EC2) ● dm_mod.use_blk_mq=1 – LVM ● … Проверка: # cat /sys/block//queue/scheduler – none

Slide 59

Slide 59 text

Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее.

Slide 60

Slide 60 text

Файловые системы 01 dataegret.com Ext4 или XFS – все остальное так себе.

Slide 61

Slide 61 text

Файловые системы 01 dataegret.com test* duration, s latency avg, ms tps tps, % EXT ro 454 0.492 8100 0 XFS ro 509 0.508 7858 -3.0 EXT rw 1915 1.911 2087 0 XFS rw 1866 1.860 2143 +2.6 * SSD (writethrough, direct, no readahead), 32GB RAM, 64GB DB, 4 clients, 1000000 transactions per client.

Slide 62

Slide 62 text

Файловые системы 01 dataegret.com Как монтировать: ● nobarrier – только если RAID или Enterprise SSD. ● noatime, nodiratime, noquota, whatever — это все по-желанию.

Slide 63

Slide 63 text

Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее.

Slide 64

Slide 64 text

Энергосбережение 01 dataegret.com

Slide 65

Slide 65 text

Энергосбережение 01 dataegret.com Драйверы: ● acpi-cpufreq – устаревший. ● intel_pstate – новый. Где смотреть: # cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor Как отключить: Ubuntu # update-rc.d ondemand disable Centos # cpupower frequency-set -g performance

Slide 66

Slide 66 text

Энергосбережение 01 dataegret.com Aggressive Link Power Management: # cat /sys/class/scsi_host/host*/link_power_management_policy Laptop Mode: Sysctl: vm.laptop_mode

Slide 67

Slide 67 text

Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее.

Slide 68

Slide 68 text

Networking 01 dataegret.com Имеет смысл на 10Gbit network Sysctl: ● net.core.rmem_max = 67108864 – 64MB ● net.core.wmem_max = 67108864 – 64MB ● net.ipv4.tcp_rmem = 4096 87380 33554432 – 32MB ● net.ipv4.tcp_wmem = 4096 65536 33554432 – 32MB ● net.ipv4.tcp_congestion_control=htcp ● net.ipv4.tcp_mtu_probing=1 – с JUMBO

Slide 69

Slide 69 text

Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее.

Slide 70

Slide 70 text

Прочие вещи 01 dataegret.com Clocksource – tsc, hpet, acpi fs.file-max = 1000000

Slide 71

Slide 71 text

Про бенчмарки 01 dataegret.com Составить правильный тест не просто. Часто тестируется совсем не то что хочется. Однако если сильно хочется — pgbench, pg_test_fsync, fio...

Slide 72

Slide 72 text

Про бенчмарки 01 dataegret.com test* duration, s latency avg, ms tps tps, % cfq 408 1.140 10284 0 deadline 311 0.885 13501 31% (31%) noop 282 0.802 14893 10% (44%) blk-mq 227 0.648 18438 23% (79%) * SSD (writethrough, direct, no readahead), Ext4, 32GB RAM, 64GB DB, 4.1M transactions summary. test* duration, s latency avg, ms tps tps, % cfq 100 1.521 41455 0 deadline 96 1.475 43125 4% (4%) noop 98 1.505 42241 -2% (1.8%) blk-mq 95 1.464 43425 2.8% (4.7%)

Slide 73

Slide 73 text

Про бенчмарки 01 dataegret.com test* duration, s latency avg, ms tps tps, % cfq 408 1.140 10284 0 deadline 311 0.885 13501 31% (31%) noop 282 0.802 14893 10% (44%) blk-mq 227 0.648 18438 23% (79%) * SSD (writethrough, direct, no readahead), Ext4, 32GB RAM, 64GB DB, 4.1M transactions summary. test* duration, s latency avg, ms tps tps, % cfq 100 1.521 41455 0 deadline 96 1.475 43125 4% (4%) noop 98 1.505 42241 -2% (1.8%) blk-mq 95 1.464 43425 2.8% (4.7%) 12 клиентов 64 клиентов

Slide 74

Slide 74 text

Что в сумме? 01 dataegret.com Экономить на процессах, подумать о pgbouncer. dirty_ratio заменить на dirty_bytes Максимально уменьшить swappiness, поднять min_free_kbytes. Использовать interleaving, отключить балансировку и реклэйминг. Использовать HP и отключить THP. Настроить RAID тома. Использовать SSD, а лучше NVMe SSD. Использовать noop, а лучше blk-mq. XFS или Ext4, важно помнить про barrier'ы. Отключать энергосбережение. Тюнинг сети на 10Gbit.

Slide 75

Slide 75 text

Вопросы? dataegret.com [email protected]