benchmarking postgresql in linux and freebsd

42
Cлепые ощупывают слона Александр Чистяков, главный инженер Git in Sky 16.07.2015 PGDay, Санкт-Петербург

Upload: alex-chistyakov

Post on 14-Aug-2015

382 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Benchmarking PostgreSQL in Linux and FreeBSD

Cлепые ощупывают слонаАлександр Чистяков, главный инженер Git in Sky

16.07.2015PGDay, Санкт-Петербург

Page 2: Benchmarking PostgreSQL in Linux and FreeBSD

Давайте познакомимся

● Меня зовут Саша

● Я работаю в компании Git in Sky

● I have an elephant

● Вы, я так понимаю, временно

нигде не работаете

Page 3: Benchmarking PostgreSQL in Linux and FreeBSD

Что делать?

● Возьмем PostgreSQL

● Выдвинем какие-нибудь гипотезы

● Облучим PostgreSQL пучком

быстрых запросов

● Проверим гипотезы

Page 4: Benchmarking PostgreSQL in Linux and FreeBSD

Гипотеза о чудесах

● Высоко в горах Старшие эльфы

делают секретную ОС, которая

превосходит Linux во всём

● FreeBSD жива!

● ZFS лучше всех

Page 5: Benchmarking PostgreSQL in Linux and FreeBSD

Дарвиновская гипотеза

● Ядро 3.16 лучше, чем 2.6.32*

● PostgreSQL 9.4 лучше, чем 9.0

● ext4 лучше, чем ext2

* 2.6.32 отличается от 2.6.32 всем (спасибо RH)

Page 6: Benchmarking PostgreSQL in Linux and FreeBSD

Гипотеза скептика

● Докладчик – лох какой-то

● 9.4 и 9.0 работают с одинаковой

скоростью на простых нагрузках

● Ядро Linux давно остановилось

в развитии

● Эльфов не бывает

Page 7: Benchmarking PostgreSQL in Linux and FreeBSD

Инженерная гипотеза

● Мы упремся в диск

● Мы упремся в процессор

● Мы упремся в блокировки внутри кода

PostgreSQL

● Мы упремся в блокировки внутри ядра

Page 8: Benchmarking PostgreSQL in Linux and FreeBSD

Как все устроено

● Основная тестовая машина (1):

● AMD Phenom(tm) II X4 965 Processor

32Gb RAM

1Tb SATA drive, 128Gb SSD drive

● Виртуализация KVM:

● 8Gb RAM, 4 ядра

● pgbench

Page 9: Benchmarking PostgreSQL in Linux and FreeBSD

640Kb should be enough

● Вспомогательная тестовая машина (2):

● Intel Xeon CPU E5-1650 v2 @ 3.50GHz

128Gb RAM

4*2Tb SATA drives

● Ubuntu 14.04, PostgreSQL 9.4

Page 10: Benchmarking PostgreSQL in Linux and FreeBSD

Начнем с конца

● Машина 2, PostgreSQL 9.4

● pgbench -i -s 1000 –foreign-keys \

pgbench

● pgbench -t 300000 -r pgbench

Page 11: Benchmarking PostgreSQL in Linux and FreeBSD

Первые результаты

● Машина 2, PostgreSQL 9.4, XFS, какой-то тюнинг конфига

Page 12: Benchmarking PostgreSQL in Linux and FreeBSD

Разбивка по запросам

● Машина II

Page 13: Benchmarking PostgreSQL in Linux and FreeBSD

Кое-что интересное

● Инженер был прав во всем!

● (Это мы уперлись в диск)

Page 14: Benchmarking PostgreSQL in Linux and FreeBSD

ВАЗ 2101

● Машина 1, VM с CentOS 5.11 (2.6.18), ext4, PostgreSQL 9.4

● Никаких изменений в дефолтном конфиге

● А ЗРЯ

Page 15: Benchmarking PostgreSQL in Linux and FreeBSD

Закопайте стюардессу

● Ждал полчаса – не дождался, а поэтому

● А ЗРЯ

Page 16: Benchmarking PostgreSQL in Linux and FreeBSD

Ура!

● Вместо 300000 транзакций поставил 100000

● А ЗРЯ

Page 17: Benchmarking PostgreSQL in Linux and FreeBSD

Напоминаю: CentOS 5, 9.4

● Разбивка по запросам

● А ЗРЯ

● Последняя строчка отличается, почему?

Page 18: Benchmarking PostgreSQL in Linux and FreeBSD

Попробуем схитрить

● Остановим виртуалку

● Настройку cache у виртуального диска сделаем writeback

● Производительность подросла, посмотрим запросы

Page 19: Benchmarking PostgreSQL in Linux and FreeBSD

Разбивка по запросам, writeback

● Лучше, но на машине 2 было еще лучше!

● Настройку cache у виртуального диска сделаем writeback

● Производительность подросла, посмотрим запросы

Page 20: Benchmarking PostgreSQL in Linux and FreeBSD

Вернем почти все как было

● Но теперь сделаем synchronous_commit=off

● Транзакций стало чуть больше:

Page 21: Benchmarking PostgreSQL in Linux and FreeBSD

Разбивка по запросам

● Понятно, почему END занимал так мало времени на машине 2

● Транзакций стало чуть больше:

Page 22: Benchmarking PostgreSQL in Linux and FreeBSD

Переместимся во времени

● Машина 1, VM с CentOS 6.6 (2.6.32), ext4, PostgreSQL 9.4

● Синхронный коммит пока оставляем, чекпойнты тюним

● ОЙ... пришлость сделать 30000 транзакций, а не 100000

Page 23: Benchmarking PostgreSQL in Linux and FreeBSD

Найдем виновника

● Машина 1, VM с CentOS 6.6 (2.6.32), ext4, PostgreSQL 9.4

● Синхронный коммит пока оставляем, чекпойнты тюним

● ОЙ... пришлость сделать 30000 транзакций, а не 100000

Page 24: Benchmarking PostgreSQL in Linux and FreeBSD

Ладно, асинхронный коммит

● O_o Это было быстро! Вернул 100000 транзакций

● Похоже, мы имеем дело с регрессией производительности,

отключение синхронного коммита подходит не всем

Page 25: Benchmarking PostgreSQL in Linux and FreeBSD

Разбивка по запросам

● Коммит работает с той же скоростью, как и на машине 2

● Похоже, мы имеем дело с регрессией производительности,

отключение синхронного коммита подходит не всем

Page 26: Benchmarking PostgreSQL in Linux and FreeBSD

Едем дальше

● Машина 1, VM с CentOS 7 (3.10.0), ext4, PostgreSQL 9.4

● Синхронный коммит пока оставляем, чекпойнты тюним

● Регрессия никуда не делась

Page 27: Benchmarking PostgreSQL in Linux and FreeBSD

Расклад все тот же

● Коммит работает с той же скоростью, как и на машине 2

● Похоже, мы имеем дело с регрессией производительности,

отключение синхронного коммита подходит не всем

Page 28: Benchmarking PostgreSQL in Linux and FreeBSD

Лечение все то же

● Асинхронный коммит

● Похоже, мы имеем дело с регрессией производительности,

отключение синхронного коммита подходит не всем

Page 29: Benchmarking PostgreSQL in Linux and FreeBSD

Попробуем другой фломастер

● Машина 1, VM с FreeBSD 10.1, UFS (w/o softupdates), 9.4

● Синхронный коммит пока оставляем, чекпойнты тюним

● Результат предсказуем – у нас нет журнала на UFS

Page 30: Benchmarking PostgreSQL in Linux and FreeBSD

Разбивка по запросам

● Без журнала каждая операция быстрее, чем на Linux

● Похоже, мы имеем дело с регрессией производительности,

отключение синхронного коммита подходит не всем

Page 31: Benchmarking PostgreSQL in Linux and FreeBSD

Включим journaled soft-updates

● Машина 1, VM с FreeBSD 10.1, UFS (newfs -U -j), 9.4

● Синхронный коммит пока оставляем, чекпойнты тюним

● Результат все еще предсказуем – теперь журнал есть :)

Page 32: Benchmarking PostgreSQL in Linux and FreeBSD

Разбивка по запросам

● Естественно, больше всех пострадал COMMIT

● Похоже, мы имеем дело с регрессией производительности,

отключение синхронного коммита подходит не всем

Page 33: Benchmarking PostgreSQL in Linux and FreeBSD

Окей, асинхронный коммит

● И Linux остается позади, у нас 335 tps и

● Похоже, мы имеем дело с регрессией производительности,

отключение синхронного коммита подходит не всем

Page 34: Benchmarking PostgreSQL in Linux and FreeBSD

Постойте, постойте

● Мы видим, что во FreeBSD в случае асинхронного COMMIT

● COMMIT занимает больше времени

● UPDATE занимает меньше времени

● Стандартное отклонение времени на операцию,

работающую с диском, меньше

● Можем ли мы так в Linux?

● Планировщик IO? Для virtio дисков он и так none

Page 35: Benchmarking PostgreSQL in Linux and FreeBSD

Постойте, постойте

● Но есть же планировщик на хосте?

● Но он влияет на все виртуальные машины одинаково

● Опция монтирования data=writeback (“метаданные прежде

данных”)

● Попробовал – не помогло, результат тот же

Page 36: Benchmarking PostgreSQL in Linux and FreeBSD

То, ради чего все затевалось

● Машина 1, VM с FreeBSD 10.1, ZFS (с тюнингом), 9.4

● Синхронный коммит можно сразу убрать*, чекпойнты тюним

● Тюнинг ZFS (и его видимый результат):

Page 37: Benchmarking PostgreSQL in Linux and FreeBSD

Вы думали, в сказку попали?

● Неутешительный результат

● Логично – за CoW надо платить

Page 38: Benchmarking PostgreSQL in Linux and FreeBSD

Разбивка по запросам для ZFS

● UPDATE опять вырвался вперед (виновник – CoW?)

● Похоже, мы имеем дело с регрессией производительности,

отключение синхронного коммита подходит не всем

Page 39: Benchmarking PostgreSQL in Linux and FreeBSD

Возьмем другие фломастеры

● DragonFly BSD – нет паравиртуальных драйверов диска

● OmniOS – нет паравиртуальных драйверов диска

● Сравнивать эмуляцию IDE или SATA с virtio как-то не очень

правильно

● Мы пытались поставить DragonFly BSD на удаленную машину,

но консоль перестала отзываться на нажатия клавиш

Page 40: Benchmarking PostgreSQL in Linux and FreeBSD

Список исп. литературы

● Brendan Gregg “Systems Performance: Enterprise

and the Cloud”

● Robert Pirsig “Zen And The Art Of Motorcycle

Maintenance”

Page 41: Benchmarking PostgreSQL in Linux and FreeBSD

Выводы

● FreeBSD жива! (технически, умолчания в newfs – это ой)

● ZFS лучше всех (это такой анекдот*)

● Других чудес у меня для вас нет – хахаха, а вот и есть!

● Не чудеса:

● Не используйте дефолтый конфиг (тюньте саму СУБД)

● Пользуйтесь средствами вверенной вам ОС (Это моя

дисковая подсистема, таких много, но эта – моя...)

Page 42: Benchmarking PostgreSQL in Linux and FreeBSD

Спасибо за внимание!

● Пожалуйста, ваши вопросы?

● С вами был

● Александр Чистяков, главный инженер, Git in Sky

● http://gitinsky.com

[email protected]

● http://meetup.com/DevOps-40