PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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

description

PostgreSQL 9.4 Performance -- join us at http://Meetup.com/PostgreSQLRussia!

Transcript of PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

Page 1: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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

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

Page 2: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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

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

Page 3: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

Materialized views

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

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

Page 4: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

Materialized views

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

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

Page 5: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

Materialized views

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

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

Page 6: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

Materialized views

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

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

Page 7: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

Materialized views

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

• Materialized views в 9.3 это PoC

Page 8: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

Materialized views

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

Page 9: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

Materialized views в 9.4

• REFRESH MATERIALIZED VIEW CONCURRENTLY

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

Page 10: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

Materialized views в 9.4

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

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

Page 11: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

Materialized views в 9.4

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

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

Page 12: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

Materialized views в 9.4

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

Page 13: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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

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

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

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

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

Page 14: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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

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

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

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

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

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

Page 15: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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

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

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

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

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

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

Page 16: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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

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

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

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

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

Page 17: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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

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

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

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

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

Page 18: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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

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

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

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

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

Page 19: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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

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

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

Page 26: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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

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

Page 27: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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

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

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

Page 28: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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

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

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

Page 29: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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

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

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

Page 30: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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

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

Page 31: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

Мониторинг

• pg_stat_all_tables.n_mod_since_analyze

• pg_stat_archiver

• backend_xmin

• Улучшен EXPLAIN

Page 32: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

Мониторинг

• pg_stat_all_tables.n_mod_since_analyze

• pg_stat_archiver

• backend_xmin

• Улучшен EXPLAIN

Page 33: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

Мониторинг

• pg_stat_all_tables.n_mod_since_analyze

• pg_stat_archiver

• backend_xmin

• Улучшен EXPLAIN

Page 34: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

Мониторинг

• pg_stat_all_tables.n_mod_since_analyze

• pg_stat_archiver

• backend_xmin

• Улучшен EXPLAIN

Page 35: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

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

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

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