Пора провести финальные тесты и подвести итоги цикла статей. Сегодня мы рассмотрим влияние размера shared_buffers на производительность БД. Первые части можно почитать здесь и здесь.
В ходе развития сервиса оптимизации затрат на сотовую связь Dr. Tariff (iOS, Android) для совместного пилота с одним из партнеров нам потребовалась большая и производительная реляционная база данных.
Зависимость производительности БД от параметра shared_buffers
Параметр PostgreSQL shared_buffers задает максимальный объем оперативной памяти для кэширования на уровне базы данных. Количество записей – 10 миллиардов, количество активных подключений – 64, нагрузка на чтение. В этом тесте после изменения файла конфигурации происходил перезапуск сервера БД, поэтому перед измерением данных происходил тестовый запуск на несколько минут, чтобы кэш успел заполниться.
Производительность чтения практически не зависит от размеров shared_buffers. Размер БД в 40 раз выше, чем количество оперативной памяти в компьютере. При таком соотношении и использовании всего объема данных практически каждое чтение требует обращения к диску.
В реальных ситуациях не следует пренебрегать этим параметром, так как Postgres будет кешировать наиболее часто используемые данные и таблицы меньшего размера.
Зависимость производительности БД от параметра fsync
В PostgreSQL есть параметр fsync, который отвечает за перенос данных из оперативной памяти на диск по завершению транзакции. По умолчанию он включен, и обеспечивает сохранность данных в случае сбоя. Сбой может быть вызван отключением питания, зависанием системы, сбоем в дисковой подсистеме… Если произошел сбой и fsync=on, то при очередном запуске БД данные будут востановлены. Если же сбой произошел, но при этом fsync=off, то скорее всего данные придется восстанавливать из последнего дампа. Отключение данного параметра позволяет существенно повысить скорость update и insert операций.
Производительность после отключения fsync выросла в 2-3 раза. Это очень хороший показатель.
Сравнение скорости SSD и HDD дисков
Для сравнения тестовая конфигурация была развернута на HDD диске. Скорость заполнения диска была в разы ниже в сравнении с SSD, поэтому тестирование было решено ограничить размером в 1 миллиард записей.
Как видим скорость работы БД на HDD диске замедлилась в сотню раз в сравнении с одиночным SSD при таком характере нагрузки. Подобная нагрузка требовательна к iops дисков. Iops для SSD и HDD как раз отличаются на два порядка. Для баз данных традиционно используется рейд массив из быстрых HDD дисков. Быстрые HDD диски имеют iops в 1.5-2 раза выше, чем HDD, который участвовал в тестировании. Еще в несколько раз можно увеличить скорость за счет рейд массива.
Резюме
Несмотря на все преимущества у SSD есть недостатки:
- более высокая цена
- ограниченный ресурс на запись
Высокая цена оправдывается высокой производительностью. Современные SSD диски обладают достаточным ресурсом записи, даже для таких применений как база данных. Есть хорошая статья по тестированию ресурса SSD дисков.
Из данного тестирования и предыдущего опыта работы можем сделать следующие выводы:
- PostgreSQL хорошо работает с большими таблицами с количеством строк до 10 миллиардов и с количеством клиентов до 1 тысячи
- При размерах БД намного больше объема оперативной памяти и простых запросах производительность ограничивается дисковой подсистемой, а shared_buffers практически не влияет на производителность. Параметр fsync позволяет в разы увеличить скорость записи в БД.
- SSD диски имеют намного большую производительность применительно к базам данных, чем HDD диски и занимают свою нишу.
- SSD диски плохо масштабируются в RAID-0 массиве для случайного чтения. Если задача позволяет, то предпочтительнее использовать несколько баз данных на отдельных дисках, чем одну большую базу данных на RAID массиве.
А наиболее выгодный тариф подскажет приложение Dr. Tariff на Android и на iOS.
Другие статьи о возможностях Dr. Tariff и аналитике сотовых услуг из нашего блога
Тестируем PostgreSQL на SSD RAID-0 массиве с таблицей в 10 миллиардов записей
Dr. Tariff посчитал у какого сотового оператора больше 4G интернета (часть 2)
Dr. Tariff посчитал у какого сотового оператора больше 4G интернета (часть 1)
Осторожно! Скрытые доходы операторов — следите за опциями «Вам звонили!», «Кто звонил+», «Будь в курсе+» (теперь платные)
История о том, как мобильный оператор списал деньги с разработчика Dr. Tariff (захватите попкорн)
Dr. Tariff 2.0: новые возможности для абонентов Билайн, МегаФон и МТС
Решили сменить оператора? Не забудьте подобрать выгодный тариф с помощью Dr. Tariff
Dr. Tariff (3 месяца спустя) — подобрать тариф можно в 80 регионах России на Android и iOS
Dr. Tariff (тарифы и баланс): Как я стал помогать людям экономить на мобильных затратах
Dr. Tariff посчитал у какого сотового оператора больше 4G интернета (часть 2)
Dr. Tariff посчитал у какого сотового оператора больше 4G интернета (часть 1)
Осторожно! Скрытые доходы операторов — следите за опциями «Вам звонили!», «Кто звонил+», «Будь в курсе+» (теперь платные)
История о том, как мобильный оператор списал деньги с разработчика Dr. Tariff (захватите попкорн)
Dr. Tariff 2.0: новые возможности для абонентов Билайн, МегаФон и МТС
Решили сменить оператора? Не забудьте подобрать выгодный тариф с помощью Dr. Tariff
Dr. Tariff (3 месяца спустя) — подобрать тариф можно в 80 регионах России на Android и iOS
Dr. Tariff (тарифы и баланс): Как я стал помогать людям экономить на мобильных затратах
Подписывайтесь на наши новости и делитесь информацией с друзьями в Вконтакте и Facebook.
Комментарии (5)
Jeditobe
29.08.2015 16:48Почему у меня теперь приходят постоянные уведомления об успешном входе в сервис гид (мегафон)? Это началось после установки вашего приложения. Затем через некоторое время, я обновил прошивку на телефоне и переустановил ваше приложение, но не активировал его. А уведомления все равно постоянно приходят.
Вы с сервера своего запрашиваете данные?DrTariff
29.08.2015 23:54Странно. Такого быть не должно. Мы актуализируем периодически данные в приложении. Можете написать нам на support@drtariff.com?
amarao
Простите, вы используете fsync=on, но при этом имеете включенный writeback на SSD и надеетесь на «сохранность данных»? Ну, до первого дятла, так сказать.
hdparm -W 0 /dev/sd*, и после этого сравнивайте. Иначе это всё равно, что делать fsync на ramdrive. «Синхронная запись, ничего не потеряется».
DrTariff
530 серия SSD от Intel не имеет power-loss-protection. Вы правы, что при пропаже напряжения есть риск потерять часть записанных данных. В любом случае использование fsync=on более безопасно и в большинстве случаев база данных будет в консистентном состоянии. Добиться высокой сохранности данных в этой задаче нам не требовалось.
amarao
В условиях отсутствия батарейки и writeback fsync=on имеет смысла не больше, чем икона на зеркале заднего вида при неработающих тормозах и непристёгнутом ремне. То есть фраза «более безопасна» даёт ложное впечатление, что там что-то будет «безопасным».
Либо данные консистентны, либо нет. Остальное — марафон по граблям.