![Page 2: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/2.jpg)
ПланУлучшения производительности
• Materialized views• Huge pages• WAL• Небольшие но приятные мелочи• Мониторинг производительности• Задел на будущее
![Page 3: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/9.jpg)
Materialized views в 9.4
• REFRESH MATERIALIZED VIEW CONCURRENTLY
• Не требуется эксклюзивная блокировка• То есть уже можно пользоваться• В силу особенностей реализации требуется Primary Key/ Unique Index
![Page 10: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/10.jpg)
Materialized views в 9.4
• REFRESH MATERIALIZED VIEW CONCURRENTLY• Не требуется эксклюзивная блокировка
• То есть уже можно пользоваться• В силу особенностей реализации требуется Primary Key/ Unique Index
![Page 11: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/11.jpg)
Materialized views в 9.4
• REFRESH MATERIALIZED VIEW CONCURRENTLY• Не требуется эксклюзивная блокировка• То есть уже можно пользоваться
• В силу особенностей реализации требуется Primary Key/ Unique Index
![Page 12: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/12.jpg)
Materialized views в 9.4
• REFRESH MATERIALIZED VIEW CONCURRENTLY• Не требуется эксклюзивная блокировка• То есть уже можно пользоваться• В силу особенностей реализации требуется Primary Key/ Unique Index
![Page 13: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/13.jpg)
Huge pages - что такое и зачем
• Сервера с большим количеством памяти (128-256Gb) теперь стоят разумныхденег
• Держать базу в памяти хорошо (любую хорошо, PostgreSQL совсем хорошо)• По умолчанию память выделяется по 4kB - так быстрее• ОС транслирует виртуальные адреса в физические, результат кэшируется вTranslation Lookaside Buffer (TLB)
• 1Gb4kB = 262144 и 64-битная адресация - на больших объемах памяти оверхэд инизкая эффективность TLB
• Выделяем память большими (например 2Mb) порциями
![Page 14: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/14.jpg)
Huge pages - что такое и зачем
• Сервера с большим количеством памяти (128-256Gb) теперь стоят разумныхденег
• Держать базу в памяти хорошо (любую хорошо, PostgreSQL совсем хорошо)
• По умолчанию память выделяется по 4kB - так быстрее• ОС транслирует виртуальные адреса в физические, результат кэшируется вTranslation Lookaside Buffer (TLB)
• 1Gb4kB = 262144 и 64-битная адресация - на больших объемах памяти оверхэд инизкая эффективность TLB
• Выделяем память большими (например 2Mb) порциями
![Page 15: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/15.jpg)
Huge pages - что такое и зачем
• Сервера с большим количеством памяти (128-256Gb) теперь стоят разумныхденег
• Держать базу в памяти хорошо (любую хорошо, PostgreSQL совсем хорошо)• По умолчанию память выделяется по 4kB - так быстрее
• ОС транслирует виртуальные адреса в физические, результат кэшируется вTranslation Lookaside Buffer (TLB)
• 1Gb4kB = 262144 и 64-битная адресация - на больших объемах памяти оверхэд инизкая эффективность TLB
• Выделяем память большими (например 2Mb) порциями
![Page 16: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/16.jpg)
Huge pages - что такое и зачем
• Сервера с большим количеством памяти (128-256Gb) теперь стоят разумныхденег
• Держать базу в памяти хорошо (любую хорошо, PostgreSQL совсем хорошо)• По умолчанию память выделяется по 4kB - так быстрее• ОС транслирует виртуальные адреса в физические, результат кэшируется вTranslation Lookaside Buffer (TLB)
• 1Gb4kB = 262144 и 64-битная адресация - на больших объемах памяти оверхэд инизкая эффективность TLB
• Выделяем память большими (например 2Mb) порциями
![Page 17: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/17.jpg)
Huge pages - что такое и зачем
• Сервера с большим количеством памяти (128-256Gb) теперь стоят разумныхденег
• Держать базу в памяти хорошо (любую хорошо, PostgreSQL совсем хорошо)• По умолчанию память выделяется по 4kB - так быстрее• ОС транслирует виртуальные адреса в физические, результат кэшируется вTranslation Lookaside Buffer (TLB)
• 1Gb4kB = 262144 и 64-битная адресация - на больших объемах памяти оверхэд инизкая эффективность TLB
• Выделяем память большими (например 2Mb) порциями
![Page 18: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/18.jpg)
Huge pages - что такое и зачем
• Сервера с большим количеством памяти (128-256Gb) теперь стоят разумныхденег
• Держать базу в памяти хорошо (любую хорошо, PostgreSQL совсем хорошо)• По умолчанию память выделяется по 4kB - так быстрее• ОС транслирует виртуальные адреса в физические, результат кэшируется вTranslation Lookaside Buffer (TLB)
• 1Gb4kB = 262144 и 64-битная адресация - на больших объемах памяти оверхэд инизкая эффективность TLB
• Выделяем память большими (например 2Mb) порциями
![Page 19: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/25.jpg)
Оптимизация записи в WAL
• Более одного бэкенда может писать в буферы WAL
• При апдейте в WAL может записываться только измененное поле, а не всястрока (если tuple пишется в ту же страницу)
![Page 26: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/26.jpg)
Оптимизация записи в WAL
• Более одного бэкенда может писать в буферы WAL• При апдейте в WAL может записываться только измененное поле, а не всястрока (если tuple пишется в ту же страницу)
![Page 27: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/27.jpg)
Небольшие но приятные мелочи
• Производительность WINDOW функций
• Производительность COPY• Затраты памяти на анонимные блоки (DO)• Улучшения оптимизатора
![Page 28: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/28.jpg)
Небольшие но приятные мелочи
• Производительность WINDOW функций• Производительность COPY
• Затраты памяти на анонимные блоки (DO)• Улучшения оптимизатора
![Page 29: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/29.jpg)
Небольшие но приятные мелочи
• Производительность WINDOW функций• Производительность COPY• Затраты памяти на анонимные блоки (DO)
• Улучшения оптимизатора
![Page 30: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/30.jpg)
Небольшие но приятные мелочи
• Производительность WINDOW функций• Производительность COPY• Затраты памяти на анонимные блоки (DO)• Улучшения оптимизатора
![Page 31: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/31.jpg)
Мониторинг
• pg_stat_all_tables.n_mod_since_analyze
• pg_stat_archiver
• backend_xmin
• Улучшен EXPLAIN
![Page 32: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/32.jpg)
Мониторинг
• pg_stat_all_tables.n_mod_since_analyze
• pg_stat_archiver
• backend_xmin
• Улучшен EXPLAIN
![Page 33: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/33.jpg)
Мониторинг
• pg_stat_all_tables.n_mod_since_analyze
• pg_stat_archiver
• backend_xmin
• Улучшен EXPLAIN
![Page 34: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/34.jpg)
Мониторинг
• pg_stat_all_tables.n_mod_since_analyze
• pg_stat_archiver
• backend_xmin
• Улучшен EXPLAIN
![Page 35: PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky](https://reader034.vdocuments.net/reader034/viewer/2022052622/5590a10f1a28ab0a798b4590/html5/thumbnails/35.jpg)
Задел на будущее - параллелизм и логическая репликация
• пользовтельский С-код может исполняться как отдельниый процесс(background workers)
• Параллельная запись в буферы WAL• Logical Decoding