SlideShare a Scribd company logo
×òî íîâîãî â PostgreSQL 9.4 c òî÷êè çðåíèÿ ïðîèçâîäèòåëüíîñòè 
Èëüÿ Êîñìîäåìüÿíñêèé 
ik@postgresql-consulting.com
Ïëàí 
Óëó÷øåíèÿ ïðîèçâîäèòåëüíîñòè 
 Materialized views 
 Huge pages 
 WAL 
 Íåáîëüøèå íî ïðèÿòíûå ìåëî÷è 
 Ìîíèòîðèíã ïðîèçâîäèòåëüíîñòè 
 Çàäåë íà áóäóùåå
Materialized views 
 View, êîòîðàÿ íå îáíîâëÿåòñÿ ïðè îáðàùåíèè, à õðàíèò äàííûå ëîêàëüíî
Materialized views 
 View, êîòîðàÿ íå îáíîâëÿåòñÿ ïðè îáðàùåíèè, à õðàíèò äàííûå ëîêàëüíî 
 Î÷åíü öåííî äëÿ OLAP è äåíîðìàëèçàöèè
Materialized views 
 View, êîòîðàÿ íå îáíîâëÿåòñÿ ïðè îáðàùåíèè, à õðàíèò äàííûå ëîêàëüíî 
 Î÷åíü öåííî äëÿ OLAP è äåíîðìàëèçàöèè 
 Çàäà÷à îáíîâëåíèÿ äàííûõ â Mat. View - ñëîæíàÿ
Materialized views 
 View, êîòîðàÿ íå îáíîâëÿåòñÿ ïðè îáðàùåíèè, à õðàíèò äàííûå ëîêàëüíî 
 Î÷åíü öåííî äëÿ OLAP è äåíîðìàëèçàöèè 
 Çàäà÷à îáíîâëåíèÿ äàííûõ â Mat. View - ñëîæíàÿ 
 Äî 9.3 â PostgreSQL íå áûëî âñòðîåííîé ðåàëèçàöèè
Materialized views 
 View, êîòîðàÿ íå îáíîâëÿåòñÿ ïðè îáðàùåíèè, à õðàíèò äàííûå ëîêàëüíî 
 Î÷åíü öåííî äëÿ OLAP è äåíîðìàëèçàöèè 
 Çàäà÷à îáíîâëåíèÿ äàííûõ â Mat. View - ñëîæíàÿ 
 Äî 9.3 â PostgreSQL íå áûëî âñòðîåííîé ðåàëèçàöèè 
 Most desired feature â TODO
Materialized views 
 View, êîòîðàÿ íå îáíîâëÿåòñÿ ïðè îáðàùåíèè, à õðàíèò äàííûå ëîêàëüíî 
 Î÷åíü öåííî äëÿ OLAP è äåíîðìàëèçàöèè 
 Çàäà÷à îáíîâëåíèÿ äàííûõ â Mat. View - ñëîæíàÿ 
 Äî 9.3 â PostgreSQL íå áûëî âñòðîåííîé ðåàëèçàöèè 
 Most desired feature â TODO 
 Materialized views â 9.3 ýòî PoC
Materialized views â 9.4 
 REFRESH MATERIALIZED VIEW CONCURRENTLY
Materialized views â 9.4 
 REFRESH MATERIALIZED VIEW CONCURRENTLY 
 Íå òðåáóåòñÿ ýêñêëþçèâíàÿ áëîêèðîâêà
Materialized views â 9.4 
 REFRESH MATERIALIZED VIEW CONCURRENTLY 
 Íå òðåáóåòñÿ ýêñêëþçèâíàÿ áëîêèðîâêà 
 Òî åñòü óæå ìîæíî ïîëüçîâàòüñÿ
Materialized views â 9.4 
 REFRESH MATERIALIZED VIEW CONCURRENTLY 
 Íå òðåáóåòñÿ ýêñêëþçèâíàÿ áëîêèðîâêà 
 Òî åñòü óæå ìîæíî ïîëüçîâàòüñÿ 
 Â ñèëó îñîáåííîñòåé ðåàëèçàöèè òðåáóåòñÿ Primary Key/ Unique Index
Huge pages - ÷òî òàêîå è çà÷åì 
 Ñåðâåðà ñ áîëüøèì êîëè÷åñòâîì ïàìÿòè (128-256Gb) òåïåðü ñòîÿò ðàçóìíûõ 
äåíåã
Huge pages - ÷òî òàêîå è çà÷åì 
 Ñåðâåðà ñ áîëüøèì êîëè÷åñòâîì ïàìÿòè (128-256Gb) òåïåðü ñòîÿò ðàçóìíûõ 
äåíåã 
 Äåðæàòü áàçó â ïàìÿòè õîðîøî (ëþáóþ õîðîøî, PostgreSQL ñîâñåì õîðîøî)
Huge pages - ÷òî òàêîå è çà÷åì 
 Ñåðâåðà ñ áîëüøèì êîëè÷åñòâîì ïàìÿòè (128-256Gb) òåïåðü ñòîÿò ðàçóìíûõ 
äåíåã 
 Äåðæàòü áàçó â ïàìÿòè õîðîøî (ëþáóþ õîðîøî, PostgreSQL ñîâñåì õîðîøî) 
 Ïî óìîë÷àíèþ ïàìÿòü âûäåëÿåòñÿ ïî 4kB - òàê áûñòðåå
Huge pages - ÷òî òàêîå è çà÷åì 
 Ñåðâåðà ñ áîëüøèì êîëè÷åñòâîì ïàìÿòè (128-256Gb) òåïåðü ñòîÿò ðàçóìíûõ 
äåíåã 
 Äåðæàòü áàçó â ïàìÿòè õîðîøî (ëþáóþ õîðîøî, PostgreSQL ñîâñåì õîðîøî) 
 Ïî óìîë÷àíèþ ïàìÿòü âûäåëÿåòñÿ ïî 4kB - òàê áûñòðåå 
 ÎÑ òðàíñëèðóåò âèðòóàëüíûå àäðåñà â ôèçè÷åñêèå, ðåçóëüòàò êýøèðóåòñÿ â 
Translation Lookaside Buffer (TLB)
Huge pages - ÷òî òàêîå è çà÷åì 
 Ñåðâåðà ñ áîëüøèì êîëè÷åñòâîì ïàìÿòè (128-256Gb) òåïåðü ñòîÿò ðàçóìíûõ 
äåíåã 
 Äåðæàòü áàçó â ïàìÿòè õîðîøî (ëþáóþ õîðîøî, PostgreSQL ñîâñåì õîðîøî) 
 Ïî óìîë÷àíèþ ïàìÿòü âûäåëÿåòñÿ ïî 4kB - òàê áûñòðåå 
 ÎÑ òðàíñëèðóåò âèðòóàëüíûå àäðåñà â ôèçè÷åñêèå, ðåçóëüòàò êýøèðóåòñÿ â 
Translation Lookaside Buffer (TLB) 
 1Gb 
4kB = 262144 è 64-áèòíàÿ àäðåñàöèÿ - íà áîëüøèõ îáúåìàõ ïàìÿòè îâåðõýä è 
íèçêàÿ ýôôåêòèâíîñòü TLB
Huge pages - ÷òî òàêîå è çà÷åì 
 Ñåðâåðà ñ áîëüøèì êîëè÷åñòâîì ïàìÿòè (128-256Gb) òåïåðü ñòîÿò ðàçóìíûõ 
äåíåã 
 Äåðæàòü áàçó â ïàìÿòè õîðîøî (ëþáóþ õîðîøî, PostgreSQL ñîâñåì õîðîøî) 
 Ïî óìîë÷àíèþ ïàìÿòü âûäåëÿåòñÿ ïî 4kB - òàê áûñòðåå 
 ÎÑ òðàíñëèðóåò âèðòóàëüíûå àäðåñà â ôèçè÷åñêèå, ðåçóëüòàò êýøèðóåòñÿ â 
Translation Lookaside Buffer (TLB) 
 1Gb 
4kB = 262144 è 64-áèòíàÿ àäðåñàöèÿ - íà áîëüøèõ îáúåìàõ ïàìÿòè îâåðõýä è 
íèçêàÿ ýôôåêòèâíîñòü TLB 
 Âûäåëÿåì ïàìÿòü áîëüøèìè (íàïðèìåð 2Mb) ïîðöèÿìè
Huge pages è PostgreSQL 
 vm:nr_hugepages = 3170 (sysctl, ÿäðî äîëæíî ïîääåðæèâàòü)
Huge pages è PostgreSQL 
 vm:nr_hugepages = 3170 (sysctl, ÿäðî äîëæíî ïîääåðæèâàòü) 
 Äî 9.2 âêëþ÷èòåëüíî - ÷åðåç áèáëèîòåêó hugetlb
Huge pages è PostgreSQL 
 vm:nr_hugepages = 3170 (sysctl, ÿäðî äîëæíî ïîääåðæèâàòü) 
 Äî 9.2 âêëþ÷èòåëüíî - ÷åðåç áèáëèîòåêó hugetlb 
 9.3 óëó÷øåíà ðàáîòà ñ shared memory c ïîìîùüþ mmap - huge pages íå 
ðàáîòàþò
Huge pages è PostgreSQL 
 vm:nr_hugepages = 3170 (sysctl, ÿäðî äîëæíî ïîääåðæèâàòü) 
 Äî 9.2 âêëþ÷èòåëüíî - ÷åðåç áèáëèîòåêó hugetlb 
 9.3 óëó÷øåíà ðàáîòà ñ shared memory c ïîìîùüþ mmap - huge pages íå 
ðàáîòàþò 
 huge_pages = try jonjo (postgresql.conf)
Huge pages è PostgreSQL 
 vm:nr_hugepages = 3170 (sysctl, ÿäðî äîëæíî ïîääåðæèâàòü) 
 Äî 9.2 âêëþ÷èòåëüíî - ÷åðåç áèáëèîòåêó hugetlb 
 9.3 óëó÷øåíà ðàáîòà ñ shared memory c ïîìîùüþ mmap - huge pages íå 
ðàáîòàþò 
 huge_pages = try jonjo (postgresql.conf) 
 try - äåôîëò, íå ïîëó÷èëîñü, íå èñïîëüçóåì
Huge pages è PostgreSQL 
 vm:nr_hugepages = 3170 (sysctl, ÿäðî äîëæíî ïîääåðæèâàòü) 
 Äî 9.2 âêëþ÷èòåëüíî - ÷åðåç áèáëèîòåêó hugetlb 
 9.3 óëó÷øåíà ðàáîòà ñ shared memory c ïîìîùüþ mmap - huge pages íå 
ðàáîòàþò 
 huge_pages = try jonjo (postgresql.conf) 
 try - äåôîëò, íå ïîëó÷èëîñü, íå èñïîëüçóåì 
 Ñåé÷àñ ðàáîòàò òîëüêî íà linux, try íà FreeBSD - OK
Îïòèìèçàöèÿ çàïèñè â WAL 
 Áîëåå îäíîãî áýêåíäà ìîæåò ïèñàòü â áóôåðû WAL
Îïòèìèçàöèÿ çàïèñè â WAL 
 Áîëåå îäíîãî áýêåíäà ìîæåò ïèñàòü â áóôåðû WAL 
 Ïðè àïäåéòå â WAL ìîæåò çàïèñûâàòüñÿ òîëüêî èçìåíåííîå ïîëå, à íå âñÿ 
ñòðîêà (åñëè tuple ïèøåòñÿ â òó æå ñòðàíèöó)
Íåáîëüøèå íî ïðèÿòíûå ìåëî÷è 
 Ïðîèçâîäèòåëüíîñòü WINDOW ôóíêöèé
Íåáîëüøèå íî ïðèÿòíûå ìåëî÷è 
 Ïðîèçâîäèòåëüíîñòü WINDOW ôóíêöèé 
 Ïðîèçâîäèòåëüíîñòü COPY
Íåáîëüøèå íî ïðèÿòíûå ìåëî÷è 
 Ïðîèçâîäèòåëüíîñòü WINDOW ôóíêöèé 
 Ïðîèçâîäèòåëüíîñòü COPY 
 Çàòðàòû ïàìÿòè íà àíîíèìíûå áëîêè (DO)
Íåáîëüøèå íî ïðèÿòíûå ìåëî÷è 
 Ïðîèçâîäèòåëüíîñòü WINDOW ôóíêöèé 
 Ïðîèçâîäèòåëüíîñòü COPY 
 Çàòðàòû ïàìÿòè íà àíîíèìíûå áëîêè (DO) 
 Óëó÷øåíèÿ îïòèìèçàòîðà
Ìîíèòîðèíã 
 pg_stat_all_tables:n_mod_since_analyze
Ìîíèòîðèíã 
 pg_stat_all_tables:n_mod_since_analyze 
 pg_stat_archiver
Ìîíèòîðèíã 
 pg_stat_all_tables:n_mod_since_analyze 
 pg_stat_archiver 
 backend_xmin
Ìîíèòîðèíã 
 pg_stat_all_tables:n_mod_since_analyze 
 pg_stat_archiver 
 backend_xmin 
 Óëó÷øåí EXPLAIN
Çàäåë íà áóäóùåå - ïàðàëëåëèçì è ëîãè÷åñêàÿ ðåïëèêàöèÿ 
 ïîëüçîâòåëüñêèé Ñ-êîä ìîæåò èñïîëíÿòüñÿ êàê îòäåëüíèûé ïðîöåññ 
(background workers) 
 Ïàðàëëåëüíàÿ çàïèñü â áóôåðû WAL 
 Logical Decoding

More Related Content

Viewers also liked

2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.42014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
Nikolay Samokhvalov
 
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Nikolay Samokhvalov
 

Viewers also liked (7)

PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
PostgreSQL Moscow Meetup - September 2014 - Nikolay SamokhvalovPostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
 
PostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander Korotkov
PostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander KorotkovPostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander Korotkov
PostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander Korotkov
 
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
 
2016.10.13 PostgreSQL in Russia
2016.10.13 PostgreSQL in Russia2016.10.13 PostgreSQL in Russia
2016.10.13 PostgreSQL in Russia
 
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.42014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
 
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 

More from Nikolay Samokhvalov

Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Nikolay Samokhvalov
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Nikolay Samokhvalov
 
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San JoseThe Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
Nikolay Samokhvalov
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
Nikolay Samokhvalov
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
Nikolay Samokhvalov
 
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
Nikolay Samokhvalov
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
Nikolay Samokhvalov
 
20080214 Rupg Meeting1 Whatisnewpostgresql8.3
20080214 Rupg Meeting1 Whatisnewpostgresql8.320080214 Rupg Meeting1 Whatisnewpostgresql8.3
20080214 Rupg Meeting1 Whatisnewpostgresql8.3
Nikolay Samokhvalov
 
20080424 Cdb2008 Postgresql News Bartunov
20080424 Cdb2008 Postgresql News Bartunov20080424 Cdb2008 Postgresql News Bartunov
20080424 Cdb2008 Postgresql News Bartunov
Nikolay Samokhvalov
 
20080424 Cdb2008 Postgresql8.3 Samokhvalov
20080424 Cdb2008 Postgresql8.3 Samokhvalov20080424 Cdb2008 Postgresql8.3 Samokhvalov
20080424 Cdb2008 Postgresql8.3 Samokhvalov
Nikolay Samokhvalov
 

More from Nikolay Samokhvalov (20)

Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
 
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San JoseThe Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
 
Nancy CLI. Automated Database Experiments
Nancy CLI. Automated Database ExperimentsNancy CLI. Automated Database Experiments
Nancy CLI. Automated Database Experiments
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБД
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов
 
#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1
 
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
 
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
 
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru
 
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
 
2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search
 
20080214 Rupg Meeting1 Whatisnewpostgresql8.3
20080214 Rupg Meeting1 Whatisnewpostgresql8.320080214 Rupg Meeting1 Whatisnewpostgresql8.3
20080214 Rupg Meeting1 Whatisnewpostgresql8.3
 
20080424 Cdb2008 Postgresql News Bartunov
20080424 Cdb2008 Postgresql News Bartunov20080424 Cdb2008 Postgresql News Bartunov
20080424 Cdb2008 Postgresql News Bartunov
 
20080424 Cdb2008 Postgresql8.3 Samokhvalov
20080424 Cdb2008 Postgresql8.3 Samokhvalov20080424 Cdb2008 Postgresql8.3 Samokhvalov
20080424 Cdb2008 Postgresql8.3 Samokhvalov
 

PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky

  • 1. ×òî íîâîãî â PostgreSQL 9.4 c òî÷êè çðåíèÿ ïðîèçâîäèòåëüíîñòè Èëüÿ Êîñìîäåìüÿíñêèé ik@postgresql-consulting.com
  • 2. Ïëàí Óëó÷øåíèÿ ïðîèçâîäèòåëüíîñòè Materialized views Huge pages WAL Íåáîëüøèå íî ïðèÿòíûå ìåëî÷è Ìîíèòîðèíã ïðîèçâîäèòåëüíîñòè Çàäåë íà áóäóùåå
  • 3. Materialized views View, êîòîðàÿ íå îáíîâëÿåòñÿ ïðè îáðàùåíèè, à õðàíèò äàííûå ëîêàëüíî
  • 4. Materialized views View, êîòîðàÿ íå îáíîâëÿåòñÿ ïðè îáðàùåíèè, à õðàíèò äàííûå ëîêàëüíî Î÷åíü öåííî äëÿ OLAP è äåíîðìàëèçàöèè
  • 5. Materialized views View, êîòîðàÿ íå îáíîâëÿåòñÿ ïðè îáðàùåíèè, à õðàíèò äàííûå ëîêàëüíî Î÷åíü öåííî äëÿ OLAP è äåíîðìàëèçàöèè Çàäà÷à îáíîâëåíèÿ äàííûõ â Mat. View - ñëîæíàÿ
  • 6. Materialized views View, êîòîðàÿ íå îáíîâëÿåòñÿ ïðè îáðàùåíèè, à õðàíèò äàííûå ëîêàëüíî Î÷åíü öåííî äëÿ OLAP è äåíîðìàëèçàöèè Çàäà÷à îáíîâëåíèÿ äàííûõ â Mat. View - ñëîæíàÿ Äî 9.3 â PostgreSQL íå áûëî âñòðîåííîé ðåàëèçàöèè
  • 7. Materialized views View, êîòîðàÿ íå îáíîâëÿåòñÿ ïðè îáðàùåíèè, à õðàíèò äàííûå ëîêàëüíî Î÷åíü öåííî äëÿ OLAP è äåíîðìàëèçàöèè Çàäà÷à îáíîâëåíèÿ äàííûõ â Mat. View - ñëîæíàÿ Äî 9.3 â PostgreSQL íå áûëî âñòðîåííîé ðåàëèçàöèè Most desired feature â TODO
  • 8. Materialized views View, êîòîðàÿ íå îáíîâëÿåòñÿ ïðè îáðàùåíèè, à õðàíèò äàííûå ëîêàëüíî Î÷åíü öåííî äëÿ OLAP è äåíîðìàëèçàöèè Çàäà÷à îáíîâëåíèÿ äàííûõ â Mat. View - ñëîæíàÿ Äî 9.3 â PostgreSQL íå áûëî âñòðîåííîé ðåàëèçàöèè Most desired feature â TODO Materialized views â 9.3 ýòî PoC
  • 9. Materialized views â 9.4 REFRESH MATERIALIZED VIEW CONCURRENTLY
  • 10. Materialized views â 9.4 REFRESH MATERIALIZED VIEW CONCURRENTLY Íå òðåáóåòñÿ ýêñêëþçèâíàÿ áëîêèðîâêà
  • 11. Materialized views â 9.4 REFRESH MATERIALIZED VIEW CONCURRENTLY Íå òðåáóåòñÿ ýêñêëþçèâíàÿ áëîêèðîâêà Òî åñòü óæå ìîæíî ïîëüçîâàòüñÿ
  • 12. Materialized views â 9.4 REFRESH MATERIALIZED VIEW CONCURRENTLY Íå òðåáóåòñÿ ýêñêëþçèâíàÿ áëîêèðîâêà Òî åñòü óæå ìîæíî ïîëüçîâàòüñÿ Â ñèëó îñîáåííîñòåé ðåàëèçàöèè òðåáóåòñÿ Primary Key/ Unique Index
  • 13. Huge pages - ÷òî òàêîå è çà÷åì Ñåðâåðà ñ áîëüøèì êîëè÷åñòâîì ïàìÿòè (128-256Gb) òåïåðü ñòîÿò ðàçóìíûõ äåíåã
  • 14. Huge pages - ÷òî òàêîå è çà÷åì Ñåðâåðà ñ áîëüøèì êîëè÷åñòâîì ïàìÿòè (128-256Gb) òåïåðü ñòîÿò ðàçóìíûõ äåíåã Äåðæàòü áàçó â ïàìÿòè õîðîøî (ëþáóþ õîðîøî, PostgreSQL ñîâñåì õîðîøî)
  • 15. Huge pages - ÷òî òàêîå è çà÷åì Ñåðâåðà ñ áîëüøèì êîëè÷åñòâîì ïàìÿòè (128-256Gb) òåïåðü ñòîÿò ðàçóìíûõ äåíåã Äåðæàòü áàçó â ïàìÿòè õîðîøî (ëþáóþ õîðîøî, PostgreSQL ñîâñåì õîðîøî) Ïî óìîë÷àíèþ ïàìÿòü âûäåëÿåòñÿ ïî 4kB - òàê áûñòðåå
  • 16. Huge pages - ÷òî òàêîå è çà÷åì Ñåðâåðà ñ áîëüøèì êîëè÷åñòâîì ïàìÿòè (128-256Gb) òåïåðü ñòîÿò ðàçóìíûõ äåíåã Äåðæàòü áàçó â ïàìÿòè õîðîøî (ëþáóþ õîðîøî, PostgreSQL ñîâñåì õîðîøî) Ïî óìîë÷àíèþ ïàìÿòü âûäåëÿåòñÿ ïî 4kB - òàê áûñòðåå ÎÑ òðàíñëèðóåò âèðòóàëüíûå àäðåñà â ôèçè÷åñêèå, ðåçóëüòàò êýøèðóåòñÿ â Translation Lookaside Buffer (TLB)
  • 17. Huge pages - ÷òî òàêîå è çà÷åì Ñåðâåðà ñ áîëüøèì êîëè÷åñòâîì ïàìÿòè (128-256Gb) òåïåðü ñòîÿò ðàçóìíûõ äåíåã Äåðæàòü áàçó â ïàìÿòè õîðîøî (ëþáóþ õîðîøî, PostgreSQL ñîâñåì õîðîøî) Ïî óìîë÷àíèþ ïàìÿòü âûäåëÿåòñÿ ïî 4kB - òàê áûñòðåå ÎÑ òðàíñëèðóåò âèðòóàëüíûå àäðåñà â ôèçè÷åñêèå, ðåçóëüòàò êýøèðóåòñÿ â Translation Lookaside Buffer (TLB) 1Gb 4kB = 262144 è 64-áèòíàÿ àäðåñàöèÿ - íà áîëüøèõ îáúåìàõ ïàìÿòè îâåðõýä è íèçêàÿ ýôôåêòèâíîñòü TLB
  • 18. Huge pages - ÷òî òàêîå è çà÷åì Ñåðâåðà ñ áîëüøèì êîëè÷åñòâîì ïàìÿòè (128-256Gb) òåïåðü ñòîÿò ðàçóìíûõ äåíåã Äåðæàòü áàçó â ïàìÿòè õîðîøî (ëþáóþ õîðîøî, PostgreSQL ñîâñåì õîðîøî) Ïî óìîë÷àíèþ ïàìÿòü âûäåëÿåòñÿ ïî 4kB - òàê áûñòðåå ÎÑ òðàíñëèðóåò âèðòóàëüíûå àäðåñà â ôèçè÷åñêèå, ðåçóëüòàò êýøèðóåòñÿ â Translation Lookaside Buffer (TLB) 1Gb 4kB = 262144 è 64-áèòíàÿ àäðåñàöèÿ - íà áîëüøèõ îáúåìàõ ïàìÿòè îâåðõýä è íèçêàÿ ýôôåêòèâíîñòü TLB Âûäåëÿåì ïàìÿòü áîëüøèìè (íàïðèìåð 2Mb) ïîðöèÿìè
  • 19. Huge pages è PostgreSQL vm:nr_hugepages = 3170 (sysctl, ÿäðî äîëæíî ïîääåðæèâàòü)
  • 20. Huge pages è PostgreSQL vm:nr_hugepages = 3170 (sysctl, ÿäðî äîëæíî ïîääåðæèâàòü) Äî 9.2 âêëþ÷èòåëüíî - ÷åðåç áèáëèîòåêó hugetlb
  • 21. Huge pages è PostgreSQL vm:nr_hugepages = 3170 (sysctl, ÿäðî äîëæíî ïîääåðæèâàòü) Äî 9.2 âêëþ÷èòåëüíî - ÷åðåç áèáëèîòåêó hugetlb 9.3 óëó÷øåíà ðàáîòà ñ shared memory c ïîìîùüþ mmap - huge pages íå ðàáîòàþò
  • 22. Huge pages è PostgreSQL vm:nr_hugepages = 3170 (sysctl, ÿäðî äîëæíî ïîääåðæèâàòü) Äî 9.2 âêëþ÷èòåëüíî - ÷åðåç áèáëèîòåêó hugetlb 9.3 óëó÷øåíà ðàáîòà ñ shared memory c ïîìîùüþ mmap - huge pages íå ðàáîòàþò huge_pages = try jonjo (postgresql.conf)
  • 23. Huge pages è PostgreSQL vm:nr_hugepages = 3170 (sysctl, ÿäðî äîëæíî ïîääåðæèâàòü) Äî 9.2 âêëþ÷èòåëüíî - ÷åðåç áèáëèîòåêó hugetlb 9.3 óëó÷øåíà ðàáîòà ñ shared memory c ïîìîùüþ mmap - huge pages íå ðàáîòàþò huge_pages = try jonjo (postgresql.conf) try - äåôîëò, íå ïîëó÷èëîñü, íå èñïîëüçóåì
  • 24. Huge pages è PostgreSQL vm:nr_hugepages = 3170 (sysctl, ÿäðî äîëæíî ïîääåðæèâàòü) Äî 9.2 âêëþ÷èòåëüíî - ÷åðåç áèáëèîòåêó hugetlb 9.3 óëó÷øåíà ðàáîòà ñ shared memory c ïîìîùüþ mmap - huge pages íå ðàáîòàþò huge_pages = try jonjo (postgresql.conf) try - äåôîëò, íå ïîëó÷èëîñü, íå èñïîëüçóåì Ñåé÷àñ ðàáîòàò òîëüêî íà linux, try íà FreeBSD - OK
  • 25. Îïòèìèçàöèÿ çàïèñè â WAL Áîëåå îäíîãî áýêåíäà ìîæåò ïèñàòü â áóôåðû WAL
  • 26. Îïòèìèçàöèÿ çàïèñè â WAL Áîëåå îäíîãî áýêåíäà ìîæåò ïèñàòü â áóôåðû WAL Ïðè àïäåéòå â WAL ìîæåò çàïèñûâàòüñÿ òîëüêî èçìåíåííîå ïîëå, à íå âñÿ ñòðîêà (åñëè tuple ïèøåòñÿ â òó æå ñòðàíèöó)
  • 27. Íåáîëüøèå íî ïðèÿòíûå ìåëî÷è Ïðîèçâîäèòåëüíîñòü WINDOW ôóíêöèé
  • 28. Íåáîëüøèå íî ïðèÿòíûå ìåëî÷è Ïðîèçâîäèòåëüíîñòü WINDOW ôóíêöèé Ïðîèçâîäèòåëüíîñòü COPY
  • 29. Íåáîëüøèå íî ïðèÿòíûå ìåëî÷è Ïðîèçâîäèòåëüíîñòü WINDOW ôóíêöèé Ïðîèçâîäèòåëüíîñòü COPY Çàòðàòû ïàìÿòè íà àíîíèìíûå áëîêè (DO)
  • 30. Íåáîëüøèå íî ïðèÿòíûå ìåëî÷è Ïðîèçâîäèòåëüíîñòü WINDOW ôóíêöèé Ïðîèçâîäèòåëüíîñòü COPY Çàòðàòû ïàìÿòè íà àíîíèìíûå áëîêè (DO) Óëó÷øåíèÿ îïòèìèçàòîðà
  • 34. Ìîíèòîðèíã pg_stat_all_tables:n_mod_since_analyze pg_stat_archiver backend_xmin Óëó÷øåí EXPLAIN
  • 35. Çàäåë íà áóäóùåå - ïàðàëëåëèçì è ëîãè÷åñêàÿ ðåïëèêàöèÿ ïîëüçîâòåëüñêèé Ñ-êîä ìîæåò èñïîëíÿòüñÿ êàê îòäåëüíèûé ïðîöåññ (background workers) Ïàðàëëåëüíàÿ çàïèñü â áóôåðû WAL Logical Decoding