Share
Embed
Call of Postgres: Advanced Operations. Part I.
Slides from my tutorial at PgDay 2017 St.Petersburg
Alexey Lesovsky
July 05, 2017
Transcript
75 slides
-
dataegret.com Around Linux: теория Tuning Linux: практика PostgreSQL: теория Troubleshooting
PostgreSQL: теория Troubleshooting PostgreSQL: практика 02 03 01 04 05 -
План 01 dataegret.com • Выбор оборудования и операционной системы. •
Настройка операционной системы. -
Что есть из оборудования 01 dataegret.com Свое оборудование. Виртуализация и
облака. SaaS/PaaS. -
Что выбрать? 01 dataegret.com Свое оборудование — нужна приватность. Виртуализация
и облака — минимум администрирования. SaaS/PaaS — совсем-совсем минимум администрирования. -
Что выбрать? 01 dataegret.com Свое оборудование — нужна приватность. Виртуализация
и облака — минимум администрирования. SaaS/PaaS — совсем-совсем минимум администрирования. Но помним про деньги, да. -
Особенности настройки 01 dataegret.com Свое оборудование: • Hypertreading; • Memory
interleaving; • Power saving policy; • Остальное по-желанию. -
Storage подсистема 01 dataegret.com RAID контроллеры: • Обязательно BBU или
NVRAM • HDD – Writeback/Cached/AdaptiveRA. • SSD – Writethrough/Direct/NoRA. • Для каждого RAID свои утилиты. • И все ли хорошо с BBU? -
Storage подсистема 01 dataegret.com SSD бывают разные: • Consumer. •
Enterprise (Toshiba/Intel). • NVMе. Для каждого типа – свои настройки. • Кэши и барьеры. -
Особенности настройки 01 dataegret.com Виртуализация: • Паравиртуальные драйвера (virtio); •
Host CPU, x2apic, Hugepages; • Storage IO mode: Writeback vs. Writethrough vs. Direct. • PCI passthrough (IOMMU, DMAR, SR-IOV); • Остальное по-желанию. -
Выбор операционной системы 01 dataegret.com Здесь вообще полная свобода, но:
• Стабильность, зрелость, качественный саппорт. • Свежее ядро, системные библиотеки (glibc/headers). • Свежие пакеты, в т.ч. и PostgreSQL. -
Выбор операционной системы 01 dataegret.com RHEL/CentOS: • Кастомное ядро, версия
не всегда отражает реальную суть. • Поддержка репозитория PGDG. • Старые версии софта. -
Выбор операционной системы 01 dataegret.com Debian/Ubuntu: • Свежие ядра в
Ubuntu, не совсем свежие в Debian. • Поддержка репозитория PGDG. • Хороший около-постгресовый инструментарий. • Относительно свежие версии софта. -
Что почитать 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/ -
Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и
NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее. -
Настройка операционной системы 01 dataegret.com Memory Network Storage CPU Планировщик
Энергосбережение Виртуальная память Hugepages, THP NUMA Ввод-Вывод Планировщики Файловые системы Настройки ядра Настройки карты -
Планировщик процессов 01 dataegret.com Completely Fair Scheduler – реализация многозадачности
ОС. Переключение процессов на CPU. Проблема когда мало процессорных ядер и очень много процессов. -
Планировщик процессов 01 dataegret.com PostgreSQL: много клиентов = много процессов.
Соотношение больше чем 1/1 уже сказывается на производительности. -
Планировщик процессов 01 dataegret.com Симптомы: • Высокий cpu system time.
• Функции планировщика в выводе perf top. Что еще смотреть: • /proc/sched_debug • /proc/schedstat • /proc/pid/sched • sysctl -a -r kernel.sched -
Планировщик процессов 01 dataegret.com Какие решения? • Pgbouncer. • Использование
standby. Оптимизации (sysctl): • kernel.sched_migration_cost_ns • kernel.sched_autogroup_enabled -
Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и
NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее. -
Виртуальная память 01 dataegret.com Абстракция между физической памятью и приложениями:
• Active/Inactive lists. • Dirty/Writeback. • Flush threads. -
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 -
Виртуальная память 01 dataegret.com Становится проблемой на машинах с >32GB
RAM. Симптомы: • Внезапные пики утилизации хранилища. Что есть посмотреть: • iostat • /proc/meminfo -
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 -
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 -
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 -
Виртуальная память 01 dataegret.com vm.dirty_background_bytes: • ¼ от размера кэш-памяти
RAID контроллера или • 64MB для HDD, 128MB для SSD. vm.dirty_bytes: • Размер кэш-памяти RAID контроллера или • 128MB для HDD, 256-512MB для SSD. -
Виртуальная память и OOM 01 dataegret.com Out-of-memory и OOM Killer:
• Swap нужен. • vm.swappiness. • vm.min_free_kbytes. • vm.overcommit_memory. -
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 -
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 -
Виртуальная память и NUMA 01 dataegret.com Симптомы: • Краткосрочные «зависания»
процессов. • Пики cpu system time. • Разброс в latency на одних и тех же запросах. -
Non-Uniform Memory Access 01 dataegret.com Что крутить? • vm.nume_balancing •
vm.zone_reclaim_mode -
Non-Uniform Memory Access 01 dataegret.com PostgreSQL и numactl? • Запуск
через numactl --interleave. • pg_ctlcluster требуется патчить. • Systemd требует правки юнитов. Intel Memory Checker. -
Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и
NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее. -
Большие страницы 01 dataegret.com Huge Pages vs. Transparent Huge Pages
Что использовать? • Huge Pages – базы данных. • Transparent Huge Pages – app-сервера. -
Большие страницы 01 dataegret.com Transparent Huge Pages: • До версии
kernel 3.13 - отключить и забыть. • После 3.13 можно оставить как есть. -
Большие страницы 01 dataegret.com Huge Pages и PostgreSQL: • libhugetlbfs
до 9.2 включительно. • Недоступно в 9.3. • Встроенная поддержка с 9.4. -
Большие страницы 01 dataegret.com sysctl: • vm.nr_hugepages – под размер
shared_buffers • vm.nr_overcommit_hugepages – запас • vm.hugetlb_shm_group – только для libhugetlbfs Как проверить? • /proc/meminfo • pmap -x $pid -
Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и
NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее. -
Ввод-вывод на уровне хранения 01 dataegret.com План: • Настройка RAID
контроллеров. • Ввод-вывод в Linux. • LVM, MDRAID, Cache layers. • Планировщики ввода-вывода. -
Настройка RAID 01 dataegret.com MegaCli (StorCli): • Настройка логических томов.
• Все ли хорошо BBU. • Журнал событий контроллера. -
Настройка RAID 01 dataegret.com Логические тома: • HDD – Writeback,
Cached, ReadAhead – OS/WAL. • Отключить дисковый кэш. • SSD – Writethrough, Direct, NoRA – Data. • Отключить дисковый кэш на Customer SSD. • HotSpare всегда в плюс. • RAID10. -
Настройка RAID 01 dataegret.com Все ли хорошо с BBU: •
Дата изготовления. • Абсолютный заряд батареи. -
Настройка RAID 01 dataegret.com Журнал событий контроллера: • Дополнительный источник
информации. • Просаживает производительность в момент обращения. -
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 -
Device-mapper и товарищи 01 dataegret.com LVM, MDRAID – ок, оверхэд
на уровне стат. погрешности. Cache layers: • FlashCache, Bcache, EnhanceIO, … • CacheCade, maxCache, … • Но зачем? -
Планировщики IO 01 dataegret.com Планировщики ввода-вывода: • cfq – универсальный
default, но не лучший выбор для СУБД. • deadline, noop – RAID-контроллеры, SSD, NVME. # cat /sys/block/<device>/queue/scheduler -
Планировщики 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 -
Планировщики 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/<device>/queue/scheduler – none -
Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и
NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее. -
Файловые системы 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. -
Файловые системы 01 dataegret.com Как монтировать: • nobarrier – только
если RAID или Enterprise SSD. • noatime, nodiratime, noquota, whatever — это все по-желанию. -
Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и
NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее. -
Энергосбережение 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 -
Энергосбережение 01 dataegret.com Aggressive Link Power Management: # cat /sys/class/scsi_host/host*/link_power_management_policy
Laptop Mode: Sysctl: vm.laptop_mode -
Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и
NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее. -
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 -
Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и
NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее. -
Про бенчмарки 01 dataegret.com Составить правильный тест не просто. Часто
тестируется совсем не то что хочется. Однако если сильно хочется — pgbench, pg_test_fsync, fio... -
Про бенчмарки 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%) -
Про бенчмарки 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 клиентов -
Что в сумме? 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.