Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
PostgreSQL performance with different
storage types on HPE ProLiant servers
Dmitry Vasilyev,
Senior consulting engineer,
Postgres Professional, Russia
13.04.2016
Производительность СУБД
PostgreSQL с разными типами
внутреннего хранилища на серверах
HPE ProLiant
Дмитрий Васильев
Ведущий инженер-консультант,
Postgres Professional, Россия
13.04.2016
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
О компании 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
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
Практика организации внутреннего хранилища на серверах
Вчера/Сегодня
«Горячие» данные
«Холодные»
данные
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
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
для всех тестов – 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
Thanks
Спасибо!
RHEL 7.2 tuning configurations
1. tuned-adm profile throughput-performance
2. mpathconf --enable --find_multipaths y --with_multipathd y; systemctl start multipathd; systemctl enable
multipathd
3. sysctl: vm.dirty_background_bytes = 32Mb, vm.dirty_bytes = 64Mb*
Tested RHEL 7.2 kernels:
3.10 - 3.10.0-327.13.1.el7.x86_64
4.2 - 4.2.0-380.13.hpoj.x86_64
11
*Influence of this parameter is uncertain
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
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
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
406 723 tps on 4*400GB NVMe SSD + 2*8GB NVDIMM
tps that the test want to
measure
CPU utilization
Amount of IOPs
1 060 819 tps from cache
Transactions per
second achieved
CPU utilization
zero IOPs here
represents the fact of
database location in
memory
HPE ProLiant DL380 Gen9 with NVDIMM and RHEL 7.2

More Related Content

PostgreSQL on sas/ssd/nvme/nvdimm

  • 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
  • 11. RHEL 7.2 tuning configurations 1. tuned-adm profile throughput-performance 2. mpathconf --enable --find_multipaths y --with_multipathd y; systemctl start multipathd; systemctl enable multipathd 3. sysctl: vm.dirty_background_bytes = 32Mb, vm.dirty_bytes = 64Mb* Tested RHEL 7.2 kernels: 3.10 - 3.10.0-327.13.1.el7.x86_64 4.2 - 4.2.0-380.13.hpoj.x86_64 11 *Influence of this parameter is uncertain
  • 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
  • 17. HPE ProLiant DL380 Gen9 with NVDIMM and RHEL 7.2