Некоторые улучшения производительности: Huge Pages – Илья...

35
Что нового в PostgreSQL 9.4 c точки зрения производительности Илья Космодемьянский [email protected]

description

Подробнее о некоторых улучшениях производительности. Huge pages.

Transcript of Некоторые улучшения производительности: Huge Pages – Илья...

Page 1: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Что нового в PostgreSQL 9.4 c точки зрения производительности

Илья Космодемьянский[email protected]

Page 2: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

ПланУлучшения производительности

• Materialized views• Huge pages• WAL• Небольшие но приятные мелочи• Мониторинг производительности• Задел на будущее

Page 3: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Materialized views

• View, которая не обновляется при обращении, а хранит данные локально

• Очень ценно для OLAP и денормализации• Задача обновления данных в Mat. View - сложная• До 9.3 в PostgreSQL не было встроенной реализации• Most desired feature в TODO• Materialized views в 9.3 это PoC

Page 4: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Materialized views

• View, которая не обновляется при обращении, а хранит данные локально• Очень ценно для OLAP и денормализации

• Задача обновления данных в Mat. View - сложная• До 9.3 в PostgreSQL не было встроенной реализации• Most desired feature в TODO• Materialized views в 9.3 это PoC

Page 5: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Materialized views

• View, которая не обновляется при обращении, а хранит данные локально• Очень ценно для OLAP и денормализации• Задача обновления данных в Mat. View - сложная

• До 9.3 в PostgreSQL не было встроенной реализации• Most desired feature в TODO• Materialized views в 9.3 это PoC

Page 6: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Materialized views

• View, которая не обновляется при обращении, а хранит данные локально• Очень ценно для OLAP и денормализации• Задача обновления данных в Mat. View - сложная• До 9.3 в PostgreSQL не было встроенной реализации

• Most desired feature в TODO• Materialized views в 9.3 это PoC

Page 7: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Materialized views

• View, которая не обновляется при обращении, а хранит данные локально• Очень ценно для OLAP и денормализации• Задача обновления данных в Mat. View - сложная• До 9.3 в PostgreSQL не было встроенной реализации• Most desired feature в TODO

• Materialized views в 9.3 это PoC

Page 8: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Materialized views

• View, которая не обновляется при обращении, а хранит данные локально• Очень ценно для OLAP и денормализации• Задача обновления данных в Mat. View - сложная• До 9.3 в PostgreSQL не было встроенной реализации• Most desired feature в TODO• Materialized views в 9.3 это PoC

Page 9: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Materialized views в 9.4

• REFRESH MATERIALIZED VIEW CONCURRENTLY

• Не требуется эксклюзивная блокировка• То есть уже можно пользоваться• В силу особенностей реализации требуется Primary Key/ Unique Index

Page 10: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Materialized views в 9.4

• REFRESH MATERIALIZED VIEW CONCURRENTLY• Не требуется эксклюзивная блокировка

• То есть уже можно пользоваться• В силу особенностей реализации требуется Primary Key/ Unique Index

Page 11: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Materialized views в 9.4

• REFRESH MATERIALIZED VIEW CONCURRENTLY• Не требуется эксклюзивная блокировка• То есть уже можно пользоваться

• В силу особенностей реализации требуется Primary Key/ Unique Index

Page 12: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Materialized views в 9.4

• REFRESH MATERIALIZED VIEW CONCURRENTLY• Не требуется эксклюзивная блокировка• То есть уже можно пользоваться• В силу особенностей реализации требуется Primary Key/ Unique Index

Page 13: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Huge pages - что такое и зачем

• Сервера с большим количеством памяти (128-256Gb) теперь стоят разумныхденег

• Держать базу в памяти хорошо (любую хорошо, PostgreSQL совсем хорошо)• По умолчанию память выделяется по 4kB - так быстрее• ОС транслирует виртуальные адреса в физические, результат кэшируется вTranslation Lookaside Buffer (TLB)

• 1Gb4kB = 262144 и 64-битная адресация - на больших объемах памяти оверхэд инизкая эффективность TLB

• Выделяем память большими (например 2Mb) порциями

Page 14: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Huge pages - что такое и зачем

• Сервера с большим количеством памяти (128-256Gb) теперь стоят разумныхденег

• Держать базу в памяти хорошо (любую хорошо, PostgreSQL совсем хорошо)

• По умолчанию память выделяется по 4kB - так быстрее• ОС транслирует виртуальные адреса в физические, результат кэшируется вTranslation Lookaside Buffer (TLB)

• 1Gb4kB = 262144 и 64-битная адресация - на больших объемах памяти оверхэд инизкая эффективность TLB

• Выделяем память большими (например 2Mb) порциями

Page 15: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Huge pages - что такое и зачем

• Сервера с большим количеством памяти (128-256Gb) теперь стоят разумныхденег

• Держать базу в памяти хорошо (любую хорошо, PostgreSQL совсем хорошо)• По умолчанию память выделяется по 4kB - так быстрее

• ОС транслирует виртуальные адреса в физические, результат кэшируется вTranslation Lookaside Buffer (TLB)

• 1Gb4kB = 262144 и 64-битная адресация - на больших объемах памяти оверхэд инизкая эффективность TLB

• Выделяем память большими (например 2Mb) порциями

Page 16: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Huge pages - что такое и зачем

• Сервера с большим количеством памяти (128-256Gb) теперь стоят разумныхденег

• Держать базу в памяти хорошо (любую хорошо, PostgreSQL совсем хорошо)• По умолчанию память выделяется по 4kB - так быстрее• ОС транслирует виртуальные адреса в физические, результат кэшируется вTranslation Lookaside Buffer (TLB)

• 1Gb4kB = 262144 и 64-битная адресация - на больших объемах памяти оверхэд инизкая эффективность TLB

• Выделяем память большими (например 2Mb) порциями

Page 17: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Huge pages - что такое и зачем

• Сервера с большим количеством памяти (128-256Gb) теперь стоят разумныхденег

• Держать базу в памяти хорошо (любую хорошо, PostgreSQL совсем хорошо)• По умолчанию память выделяется по 4kB - так быстрее• ОС транслирует виртуальные адреса в физические, результат кэшируется вTranslation Lookaside Buffer (TLB)

• 1Gb4kB = 262144 и 64-битная адресация - на больших объемах памяти оверхэд инизкая эффективность TLB

• Выделяем память большими (например 2Mb) порциями

Page 18: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Huge pages - что такое и зачем

• Сервера с большим количеством памяти (128-256Gb) теперь стоят разумныхденег

• Держать базу в памяти хорошо (любую хорошо, PostgreSQL совсем хорошо)• По умолчанию память выделяется по 4kB - так быстрее• ОС транслирует виртуальные адреса в физические, результат кэшируется вTranslation Lookaside Buffer (TLB)

• 1Gb4kB = 262144 и 64-битная адресация - на больших объемах памяти оверхэд инизкая эффективность TLB

• Выделяем память большими (например 2Mb) порциями

Page 19: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Huge pages и PostgreSQL

• vm.nr_hugepages = 3170 (sysctl, ядро должно поддерживать)

• До 9.2 включительно - через библиотеку hugetlb• 9.3 улучшена работа с shared memory c помощью mmap - huge pages неработают

• huge_pages = try |on|off (postgresql.conf)• try - дефолт, не получилось, не используем• Сейчас работат только на linux, try на FreeBSD - OK

Page 20: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Huge pages и PostgreSQL

• vm.nr_hugepages = 3170 (sysctl, ядро должно поддерживать)• До 9.2 включительно - через библиотеку hugetlb

• 9.3 улучшена работа с shared memory c помощью mmap - huge pages неработают

• huge_pages = try |on|off (postgresql.conf)• try - дефолт, не получилось, не используем• Сейчас работат только на linux, try на FreeBSD - OK

Page 21: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Huge pages и PostgreSQL

• vm.nr_hugepages = 3170 (sysctl, ядро должно поддерживать)• До 9.2 включительно - через библиотеку hugetlb• 9.3 улучшена работа с shared memory c помощью mmap - huge pages неработают

• huge_pages = try |on|off (postgresql.conf)• try - дефолт, не получилось, не используем• Сейчас работат только на linux, try на FreeBSD - OK

Page 22: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Huge pages и PostgreSQL

• vm.nr_hugepages = 3170 (sysctl, ядро должно поддерживать)• До 9.2 включительно - через библиотеку hugetlb• 9.3 улучшена работа с shared memory c помощью mmap - huge pages неработают

• huge_pages = try |on|off (postgresql.conf)

• try - дефолт, не получилось, не используем• Сейчас работат только на linux, try на FreeBSD - OK

Page 23: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Huge pages и PostgreSQL

• vm.nr_hugepages = 3170 (sysctl, ядро должно поддерживать)• До 9.2 включительно - через библиотеку hugetlb• 9.3 улучшена работа с shared memory c помощью mmap - huge pages неработают

• huge_pages = try |on|off (postgresql.conf)• try - дефолт, не получилось, не используем

• Сейчас работат только на linux, try на FreeBSD - OK

Page 24: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Huge pages и PostgreSQL

• vm.nr_hugepages = 3170 (sysctl, ядро должно поддерживать)• До 9.2 включительно - через библиотеку hugetlb• 9.3 улучшена работа с shared memory c помощью mmap - huge pages неработают

• huge_pages = try |on|off (postgresql.conf)• try - дефолт, не получилось, не используем• Сейчас работат только на linux, try на FreeBSD - OK

Page 25: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Оптимизация записи в WAL

• Более одного бэкенда может писать в буферы WAL

• При апдейте в WAL может записываться только измененное поле, а не всястрока (если tuple пишется в ту же страницу)

Page 26: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Оптимизация записи в WAL

• Более одного бэкенда может писать в буферы WAL• При апдейте в WAL может записываться только измененное поле, а не всястрока (если tuple пишется в ту же страницу)

Page 27: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Небольшие но приятные мелочи

• Производительность WINDOW функций

• Производительность COPY• Затраты памяти на анонимные блоки (DO)• Улучшения оптимизатора

Page 28: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Небольшие но приятные мелочи

• Производительность WINDOW функций• Производительность COPY

• Затраты памяти на анонимные блоки (DO)• Улучшения оптимизатора

Page 29: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Небольшие но приятные мелочи

• Производительность WINDOW функций• Производительность COPY• Затраты памяти на анонимные блоки (DO)

• Улучшения оптимизатора

Page 30: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Небольшие но приятные мелочи

• Производительность WINDOW функций• Производительность COPY• Затраты памяти на анонимные блоки (DO)• Улучшения оптимизатора

Page 31: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Мониторинг

• pg_stat_all_tables.n_mod_since_analyze

• pg_stat_archiver

• backend_xmin

• Улучшен EXPLAIN

Page 32: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Мониторинг

• pg_stat_all_tables.n_mod_since_analyze

• pg_stat_archiver

• backend_xmin

• Улучшен EXPLAIN

Page 33: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Мониторинг

• pg_stat_all_tables.n_mod_since_analyze

• pg_stat_archiver

• backend_xmin

• Улучшен EXPLAIN

Page 34: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Мониторинг

• pg_stat_all_tables.n_mod_since_analyze

• pg_stat_archiver

• backend_xmin

• Улучшен EXPLAIN

Page 35: Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский

Задел на будущее - параллелизм и логическая репликация

• пользовтельский С-код может исполняться как отдельниый процесс(background workers)

• Параллельная запись в буферы WAL• Logical Decoding