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. Call of Postgres:
    Advanced Operations
    Alexey Lesovsky
    [email protected]

    View full-size slide

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

    View full-size slide

  3. Around Linux:
    теория
    01

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  17. Что почитать
    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/

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  27. 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

    View full-size slide

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

    View full-size slide

  29. 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

    View full-size slide

  30. 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

    View full-size slide

  31. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  37. 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

    View full-size slide

  38. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  53. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  57. Планировщики 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

    View full-size slide

  58. Планировщики 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  61. Файловые системы
    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.

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  65. Энергосбережение
    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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  68. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  72. Про бенчмарки
    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%)

    View full-size slide

  73. Про бенчмарки
    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 клиентов

    View full-size slide

  74. Что в сумме?
    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.

    View full-size slide

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

    View full-size slide