1. PostgreSQL performance with different
storage types on HPE ProLiant servers
Dmitry Vasilyev,
Senior consulting engineer,
Postgres Professional, Russia
13.04.2016
2. Производительность СУБД
PostgreSQL с разными типами
внутреннего хранилища на серверах
HPE ProLiant
Дмитрий Васильев
Ведущий инженер-консультант,
Postgres Professional, Россия
13.04.2016
3. About Postgres Professional
• Postgres Professional is the Russian
PostgreSQL company
• Founded in 2015 by Russian PostgreSQL
contributors
• 50+ employees, among them three Major
PostgreSQL Contributors and four PhD
• Postgres Professional provides industrial
PostgreSQL services: vendor technical support,
migration, custom extensions and core patches
development, migration-related consulting,
training and certification
• http://postgrespro.com
• Postgres Pro is included in the Unified Registry
of Russian Computer Programs and Databases
in March, 2016.
• Postgres Professional had successfully
performed large PostgreSQL projects including
database migration projects for well-known
Russian and international companies
• Postgres Professional is an active member of
international PostgreSQL community. Postgres
Professional developers had committed 63
patches to the latest release of PostgreSQL 9.6
* PostgreSQL database is used in HPE DataProtector and HPE OneView
4. О компании Postgres Professional
• Postgres Professional – российский вендор
PostgreSQL
• Компания основана в 2015 году ведущими
российскими разработчиками PostgreSQL*
• Более 50 сотрудников, в их числе ведущие
российские разработчики PostgreSQL (major
contributor), признанные международным
сообществом PostgreSQL и 4 кандидата наук.
• Postgres Professional оказывает услуги
поддержки, миграции, разработки,
консалтинга, обучения.
• Сайт http://postgrespro.ru/
• СУБД Postgres Pro в марте 2016 года вошла в
реестр отечественного ПО
• Успешно выполнен ряд проектов по
разработке и поддержке СУБД PostgreSQL, в
том числе миграций СУБД для крупных
российских и зарубежных заказчиков
• Postgres Professional является активным
участником международного сообщества
PostgreSQL: в очередной релиз PostgreSQL
9.6 войдет более 60 патчей, разработанных
сотрудниками Postgres Professional
•
*СУБД PostgreSQL используется в том числе и в составе HPE DataProtector и HPE OneView
5. Non-Volatile Memory Spectrum
Traditional Storage Emerging Storage
Hot Data
Cold Data
Tier 0
Tier 1
Tier 2
Tier 3
HP SAS and SATA HDDs
HP SAS and SATA SSDs
HP PCIe Workload Accelerators
NVMe SSD
PCIe Storage
100s µs latency
SAS/SATA NAND Flash
10s ms latency
SAS/SATA HDDs
100s ms latency
HP Tape
SAS Tape
seconds/mins latency
Tier 0
Tier 1
Tier 2
Tier 3
HP SAS and SATA HDDs
HP SAS and SATA SSDs
HP PCIe Workload Accelerators
NVMe SSD
PCIe Storage
100s µs latency
SAS/SATA NAND Flash
10s ms latency
SAS/SATA HDDs
100s ms latency
NVDIMM*
ns latency
Caching
Indexing
In-Memory
Analytics
OLTP
Databases
Mail (Exchange)
Customer Relationship Management
Data Warehouse
Archive
Backup
HP NVDIMMs
* Mass shipment for HPE servers is expected in mid 2016
6. Практика организации внутреннего хранилища на серверах
Вчера/Сегодня
«Горячие» данные
«Холодные»
данные
Tier 0
Tier 1
Tier 2
Tier 3
HPE SAS и SATA
HDD
HPE SAS и SATA
SSD
HPE PCIe Accelerators
HPE NVMe SSD
Накопители PCIe
Задержка - сотни мкс
SSD SAS/SATA
Задержка – десятки мс
HDD SAS/SATA
Задержка - сотни мс
HPE Tape
Лента SAS
Задержка –
секунды или
минуты
Кэш
Индекс
Аналитика
OLTP
Базы данных
Почта
CRM
ERP
Архив
Резервная копия
Завтра
Tier 0
Tier 1
Tier 2
Tier 3
HPE SAS и SATA
HDD
HPE SAS и SATA
SSD
HPE PCIe Workload
Accelerators
HPE NVMe SSD
NVDIMM*
Задержка -
наносекунды
HPE Persistent
Memory
Накопители PCIe
Задержка - сотни мкс
SSD SAS/SATA
Задержка – десятки мс
HDD SAS/SATA
Задержка - сотни мс
* начало массовых отгрузок для серверов HPE в середине 2016
7. for all tests - max_connections = 300, shared buffers = 128MB, except for the test with a full load database into
memory, where it was max_connections = 300, shared_buffers = 200GB, huge_pages = on
Benchmarking PostgresPro on HPE ProLiant Gen9 server
High performance on 2-processor systems
Application: PostgresPro 9.5.2.1*
Benchmark/test: pgbench -S, that is randomly read full database**
Operation system: RHEL 7.2 with standard kernel and with updated kernel that support NVDIMM***
Hardware platform: HPE ProLiant DL380 Gen9 - 2*E5-2697v4 (2.3GHz/18-core/45MB/145W) + 256GB (8*32GB DDR4
RDIMM 2133) + 2*8GB NVDIMM + 2*250GB/7.2K SATA (for OS) + 4*400GB NVMe SSD + 2*200GB SSD SATA +
4*146GB/15K SAS + P440ar/2GB
* The distribution here http://postgrespro.com/products/download
In the database supplied patch indicating operating system don't cache data after read
** Https://github.com/postgrespro/postgrespro/blob/PGPRO9_5/src/bin/pgbench/pgbench.c#L358
SELECT abalance FROM pgbench_accounts WHERE aid = RANDOM?;
*** There is an active testing for quality and productive inclusion in the main release of the operating system, click here for details http://linux.hpe.com/nvdimm
The maximum possible result, when the entire database loaded into
RAM
Option A: Traditional / Classic when stored on the HDD
Option C: the most advanced storage option when the tables
were located on the NVMe, and the indexes located on
NVDIMM
Option B: Traditional / Classic when stored on the SSD
8. для всех тестов – max_connections=300,shared_buffers=128MB, за исключением теста с полной загрузкой
базы в память, где было max_connections=300, shared_buffers=200GB, huge_pages=on
Тестирование Postgres Pro на сервере HPE ProLiant Gen9
Рекордная производительность на 2-х процессорных системах
Приложение: СУБД Postgres Pro 9.5.2.1*
Тип нагрузки: штатный тест pgbench -S, который выполняет случайное чтение по всему объему базы данных**
Операционная система: RHEL 7.2 со штатным ядром и ядром с поддержкой NVDIMM***
Аппаратная платформа: HPE ProLiant DL380 Gen9 - 2*E5-2697v4 (2.3GHz/18-core/45MB/145W) + 256GB (8*32GB
DDR4 RDIMM 2133) + 2*8GB NVDIMM + 2*250GB/7.2K SATA (for OS) + 4*400GB NVMe SSD + 2*200GB SSD SATA +
4*146GB/15K SAS + P440ar/2GB
*Дистрибутив расположен по адресу http://postgrespro.ru/products/postgrespro/download/latest
На СУБД поставлен патч, указывающий операционной системе не помещать прочитанные данные в файловый кэш
** https://github.com/postgrespro/postgrespro/blob/PGPRO9_5/src/bin/pgbench/pgbench.c#L358
SELECT abalance FROM pgbench_accounts WHERE aid = RANDOM;
*** Идет активное тестирования, для получения продуктивного качества и включения в основной релиз ОС, подробности тут http://linux.hpe.com/nvdimm
Максимально возможный результат, когда вся база, целиком
загружалась в оперативную память
Вариант А: традиционный/классический при хранении на HDD
Вариант С: самый передовой вариант хранения, когда
файлы с таблицами располагались на NVMe,
а индексы располагались на NVDIMM
Вариант Б: традиционный/классический при хранении на SSD
12. Ext4 file system
– PostreSQL uses filesystem layer to store data, it does not support raw block devices
– “nobarrier,sync” mount option were NOT used as it is not recommended for production environment
– All tested file systems were mounted with auto option (i.e. just mount)
12
13. PostgreSQL patch that bypass file system cache
This patch is available for all Postgres Pro subscribers
diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c
index 28e90ce..820f400 100644
--- a/src/backend/storage/file/fd.c
+++ b/src/backend/storage/file/fd.c
@@ -1414,6 +1414,7 @@ FileRead(File file, char *buffer, int amount)
retry:
returnCode = read(VfdCache[file].fd, buffer, amount);
+ posix_fadvise(VfdCache[file].fd, VfdCache[file].seekPos, amount, POSIX_FADV_DONTNEED);
if (returnCode >= 0)
VfdCache[file].seekPos += returnCode;
13
14. pgbench benchmark for PostgreSQL database
Standard benchmark that is widely used and adopted in the community
– pgbench is a simple program for benchmarking PostgreSQL. It runs the same sequence of SQL
commands over and over again, possibly in multiple concurrent database sessions, and then calculates
the average transaction rate (transactions per second). By default, pgbench tests a scenario that is loosely
based on TPC-B, involving five SELECT, UPDATE, and INSERT commands per transaction. However, it is
easy to test other cases by writing your own transaction script files.
http://www.postgresql.org/docs/devel/static/pgbench.html
– https://github.com/postgrespro/postgrespro/blob/PGPRO9_5/src/bin/pgbench/pgbench.c#L358
SELECT abalance FROM pgbench_accounts WHERE aid = RANDOM;"
– Test results are not very database size sensible, the difference in performance for 20GB-200GB is around
5% (with small shared_buffers and disabled page cache)
– 200GB for all tests, except the test on NVMe+ NVDIMM, where it was 100GB
14
15. 406 723 tps on 4*400GB NVMe SSD + 2*8GB NVDIMM
tps that the test want to
measure
CPU utilization
Amount of IOPs
16. 1 060 819 tps from cache
Transactions per
second achieved
CPU utilization
zero IOPs here
represents the fact of
database location in
memory