Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Call of Postgres: Advanced Operations. Part I.

Call of Postgres: Advanced Operations. Part I.

Slides from my tutorial at PgDay 2017 St.Petersburg

Alexey Lesovsky

July 05, 2017
Tweet

More Decks by Alexey Lesovsky

Other Decks in Education

Transcript

  1. dataegret.com Around Linux: теория Tuning Linux: практика PostgreSQL: теория Troubleshooting

    PostgreSQL: теория Troubleshooting PostgreSQL: практика 02 03 01 04 05
  2. Что выбрать? 01 dataegret.com Свое оборудование — нужна приватность. Виртуализация

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

    и облака — минимум администрирования. SaaS/PaaS — совсем-совсем минимум администрирования. Но помним про деньги, да.
  4. Особенности настройки 01 dataegret.com Свое оборудование: • Hypertreading; • Memory

    interleaving; • Power saving policy; • Остальное по-желанию.
  5. Storage подсистема 01 dataegret.com RAID контроллеры: • Обязательно BBU или

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

    Enterprise (Toshiba/Intel). • NVMе. Для каждого типа – свои настройки. • Кэши и барьеры.
  7. Особенности настройки 01 dataegret.com Виртуализация: • Паравиртуальные драйвера (virtio); •

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

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

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

    Ubuntu, не совсем свежие в Debian. • Поддержка репозитория PGDG. • Хороший около-постгресовый инструментарий. • Относительно свежие версии софта.
  11. Что почитать 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/
  12. Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и

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

    Энергосбережение Виртуальная память Hugepages, THP NUMA Ввод-Вывод Планировщики Файловые системы Настройки ядра Настройки карты
  14. Планировщик процессов 01 dataegret.com Completely Fair Scheduler – реализация многозадачности

    ОС. Переключение процессов на CPU. Проблема когда мало процессорных ядер и очень много процессов.
  15. Планировщик процессов 01 dataegret.com PostgreSQL: много клиентов = много процессов.

    Соотношение больше чем 1/1 уже сказывается на производительности.
  16. Планировщик процессов 01 dataegret.com Симптомы: • Высокий cpu system time.

    • Функции планировщика в выводе perf top. Что еще смотреть: • /proc/sched_debug • /proc/schedstat • /proc/pid/sched • sysctl -a -r kernel.sched
  17. Планировщик процессов 01 dataegret.com Какие решения? • Pgbouncer. • Использование

    standby. Оптимизации (sysctl): • kernel.sched_migration_cost_ns • kernel.sched_autogroup_enabled
  18. Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и

    NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее.
  19. 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
  20. Виртуальная память 01 dataegret.com Становится проблемой на машинах с >32GB

    RAM. Симптомы: • Внезапные пики утилизации хранилища. Что есть посмотреть: • iostat • /proc/meminfo
  21. 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
  22. 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
  23. 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
  24. Виртуальная память 01 dataegret.com vm.dirty_background_bytes: • ¼ от размера кэш-памяти

    RAID контроллера или • 64MB для HDD, 128MB для SSD. vm.dirty_bytes: • Размер кэш-памяти RAID контроллера или • 128MB для HDD, 256-512MB для SSD.
  25. Виртуальная память и OOM 01 dataegret.com Out-of-memory и OOM Killer:

    • Swap нужен. • vm.swappiness. • vm.min_free_kbytes. • vm.overcommit_memory.
  26. 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
  27. 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
  28. Виртуальная память и NUMA 01 dataegret.com Симптомы: • Краткосрочные «зависания»

    процессов. • Пики cpu system time. • Разброс в latency на одних и тех же запросах.
  29. Non-Uniform Memory Access 01 dataegret.com PostgreSQL и numactl? • Запуск

    через numactl --interleave. • pg_ctlcluster требуется патчить. • Systemd требует правки юнитов. Intel Memory Checker.
  30. Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и

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

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

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

    до 9.2 включительно. • Недоступно в 9.3. • Встроенная поддержка с 9.4.
  34. Большие страницы 01 dataegret.com sysctl: • vm.nr_hugepages – под размер

    shared_buffers • vm.nr_overcommit_hugepages – запас • vm.hugetlb_shm_group – только для libhugetlbfs Как проверить? • /proc/meminfo • pmap -x $pid
  35. Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и

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

    контроллеров. • Ввод-вывод в Linux. • LVM, MDRAID, Cache layers. • Планировщики ввода-вывода.
  37. Настройка RAID 01 dataegret.com MegaCli (StorCli): • Настройка логических томов.

    • Все ли хорошо BBU. • Журнал событий контроллера.
  38. Настройка RAID 01 dataegret.com Логические тома: • HDD – Writeback,

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

    Дата изготовления. • Абсолютный заряд батареи.
  40. Настройка RAID 01 dataegret.com Журнал событий контроллера: • Дополнительный источник

    информации. • Просаживает производительность в момент обращения.
  41. 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
  42. Device-mapper и товарищи 01 dataegret.com LVM, MDRAID – ок, оверхэд

    на уровне стат. погрешности. Cache layers: • FlashCache, Bcache, EnhanceIO, … • CacheCade, maxCache, … • Но зачем?
  43. Планировщики IO 01 dataegret.com Планировщики ввода-вывода: • cfq – универсальный

    default, но не лучший выбор для СУБД. • deadline, noop – RAID-контроллеры, SSD, NVME. # cat /sys/block/<device>/queue/scheduler
  44. Планировщики 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
  45. Планировщики 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
  46. Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и

    NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее.
  47. Файловые системы 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.
  48. Файловые системы 01 dataegret.com Как монтировать: • nobarrier – только

    если RAID или Enterprise SSD. • noatime, nodiratime, noquota, whatever — это все по-желанию.
  49. Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и

    NUMA. Hugepages и Transparent Hugepages. Ввод/Вывод на уровне хранения. Файловые системы. Политики энергосбережения. Networking. Прочее.
  50. Энергосбережение 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
  51. Настройка операционной системы 01 dataegret.com Планировщик процессов. Виртуальная память и

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

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

    тестируется совсем не то что хочется. Однако если сильно хочется — pgbench, pg_test_fsync, fio...
  55. Про бенчмарки 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%)
  56. Про бенчмарки 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 клиентов
  57. Что в сумме? 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.