postgresql microconf

34

Upload: alexey-vasiliev

Post on 03-Jul-2015

547 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Postgresql microconf

PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Âàñèëüåâ Àëåêñåé Þðüåâè÷leopard.in.ua

Èþíü 2011

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 2: Postgresql microconf

×òî òàêîå PostgreSQL?

Ââåäåíèå

PostgreSQL � ñâîáîäíàÿ îáúåêòíî-ðåëÿöèîííàÿ ñèñòåìàóïðàâëåíèÿ áàçàìè äàííûõ (ÑÓÁÄ).

Ïî÷åìó PostgreSQL?

Íàäåæíîñòü;

Ïîääåðæêà ÁÄ ïðàêòè÷åñêè íåîãðàíè÷åííîãî ðàçìåðà;

Ìîùíûå è íàä¼æíûå ìåõàíèçìû òðàíçàêöèé è ðåïëèêàöèè;

Íàñëåäîâàíèå;

Ëåãêàÿ ðàñøèðÿåìîñòü;

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 3: Postgresql microconf

ÂâåäåíèåÏðîèçâîäèòåëüíîñòü â PostgreSQL

Íå èñïîëüçóéòå íàñòðîéêèïî óìîë÷àíèþ

Èñïîëüçóéòå àêòóàëüíóþâåðñèþ ñåðâåðà

Òåñòû ïðîèçâîäèòåëüíîñòèñëóæàò äëÿ ïðîäâèæåíèÿêîíêðåòíûõ ïðîäóêòîâ

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 4: Postgresql microconf

Âûáîð îïòèìàëüíûõ íàñòðîåêÏðîèçâîäèòåëüíîñòü â PostgreSQL

Ìåòîä ñðàâíèòåëüíîãîòåñòèðîâàíèÿ

pgtune � íàñòðîéêè ïî¾æåëåçó¿

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 5: Postgresql microconf

Îïòèìèçàöèÿ ÁÄ è ïðèëîæåíèÿÏðîèçâîäèòåëüíîñòü â PostgreSQL

Ãðàììîòíîåïðîåêòèðîâàíèå áàçû

Íàëè÷èå áûñòðûõ ïóòåéäîñòóïà ê äàííûì �èíäåêñîâ

Îáõîä èçâåñòíûõ ïðîáëåì(ìåäëåííûé count, unions èò.ä.)

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 6: Postgresql microconf

×òî òàêîå ìàñøòàáèðîâàíèå?Ìàñøòàáèðîâàíèå PostgreSQL

Ìàñøòàáèðîâàíèå � ýòîïðîöåññ îáåñïå÷åíèÿ ðîñòàñèñòåìû, ò.å.ìàñøòàáèðóåìîñòè.  ñâîþî÷åðåäü,ìàñøòàáèðóåìîñòü � ýòîñâîéñòâî ñèñòåìû, ñîõðàíÿÿïðîïóñêíóþ ñïîñîáíîñòü,ñïðàâëÿòüñÿ ñ óâåëè÷åíèåìíàãðóçêè ïðè óâåëè÷åíèèîïðåäåëåííûõ ðåñóðñîâñèñòåìû.

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 7: Postgresql microconf

ÏðîáëåìûÌàñøòàáèðîâàíèå PostgreSQL

Îãðàíè÷åíèå ïðîïóñêíîéñïîñîáíîñòè ÷òåíèÿäàííûõ

Îãðàíè÷åíèå ïðîïóñêíîéñïîñîáíîñòè çàïèñè äàííûõ

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 8: Postgresql microconf

ÏîäõîäûÌàñøòàáèðîâàíèå PostgreSQL

Âåðòèêàëüíîåìàñøòàáèðîâàíèå

Ãîðèçîíòàëüíîåìàñøòàáèðîâàíèå

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 9: Postgresql microconf

ÌåòîäûÌàñøòàáèðîâàíèå PostgreSQL

Ïàðòèöèîíèðîâàíèå(ñåêöèîíèðîâàíèå) òàáëèö

Ðåïëèêàöèÿ

Øàðäèíã

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 10: Postgresql microconf

Ïàðòèöèîíèðîâàíèå (ñåêöèîíèðîâàíèå) òàáëèöÌàñøòàáèðîâàíèå PostgreSQL

Ïàðòèöèîíèðîâàíèå (ñåêöèîíèðîâàíèå) � ýòî ðàçáèåíèåáîëüøèõ ñòðóêòóð áàç äàííûõ (òàáëèöû, èíäåêñû) íà ìåíüøèåêóñî÷êè. PostgreSQL ïîääåðæèâàåò äâà êðèòåðèÿ äëÿ ñîçäàíèÿïàðòèöèé:

Ïàðòèöèîíèðîâàíèå ïî äèàïàçîíó çíà÷åíèé (range)

Ïàðòèöèîíèðîâàíèå ïî ñïèñêó çíà÷åíèé (list)

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 11: Postgresql microconf

Ìåòîäû äåëåíèÿ äàííûõ íà ïàðòèöèèÌàñøòàáèðîâàíèå PostgreSQL

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 12: Postgresql microconf

Ïàðòèöèîíèðîâàíèå â PostgreSQLÌàñøòàáèðîâàíèå PostgreSQL

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 13: Postgresql microconf

ÐåïëèêàöèÿÌàñøòàáèðîâàíèå PostgreSQL

Ðåïëèêàöèÿ �ìåõàíèçìñèíõðîíèçàöèè ñîäåðæèìîãîíåñêîëüêèõ êîïèé îáúåêòà(íàïðèìåð, ñîäåðæèìîãî áàçûäàííûõ). Óòèëèòû äëÿñîçäàíèÿ ðåïëèêàöèè âPostgreSQL:

Slony-I

pgpool-I/II

Bucardo

Londiste

RubyRep

Ïîòîêîâàÿ ðåïëèêàöèÿ

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 14: Postgresql microconf

Slony-IÌàñøòàáèðîâàíèå PostgreSQL

Îñîáåííîñòè:

Ìàñòåð/ñëåéâ ðåïëèêàöèÿ

Ðàáîòà ÷åðåç òðèããåðû

Âîçìîæíîñòü ïîòàáëè÷íîéðåïëèêàöèè

Ïîääåðæêà êàñêàäíîéðåïëèêàöèè

Ïîääåðæêàîòêàçîóñòîé÷èâîñòè

Íåäîñòàòêè:

Ñëîæíàÿ íàñòðîéêà

Äîáàâëåíèå óçëà �òðóäîåìêàÿ îïåðàöèÿ

Òàáëèöû äîëæíû èìåòüprimary key

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 15: Postgresql microconf

LondisteÌàñøòàáèðîâàíèå PostgreSQL

Îñîáåííîñòè:

Ìàñòåð/ñëåéâ ðåïëèêàöèÿ

Ðàáîòà ÷åðåç òðèããåðû

Âîçìîæíîñòü ïîòàáëè÷íîéðåïëèêàöèè

Âîçìîæíîñòüäâóõñòîðîííåãî ñðàâíåíèÿòàáëèö

Ïðîñòîòà óñòàíîâêè èíàñòðîéêè

Íåäîñòàòêè:

Îòñóòñòâèå êàñêàäíîéðåïëèêàöèè

Îòñóòñòâèåîòêàçîóñòîé÷èâîñòè

Òàáëèöû äîëæíû èìåòüprimary key

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 16: Postgresql microconf

BucardoÌàñøòàáèðîâàíèå PostgreSQL

Îñîáåííîñòè:

Ìàñòåð/ìàñòåð èëèÌàñòåð/ñëåéâ ðåïëèêàöèÿ

Ðàáîòà ÷åðåç òðèããåðû

Âîçìîæíîñòü ïîòàáëè÷íîéðåïëèêàöèè

Ïîääåðæêà êàñêàäíîéðåïëèêàöèè

Íåäîñòàòêè:

Perl, òðåáóåòñÿ Pl/PgSQL èPl/PerlU

Îòñóòñòâèåîòêàçîóñòîé÷èâîñòè

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 17: Postgresql microconf

RubyRepÌàñøòàáèðîâàíèå PostgreSQL

Îñîáåííîñòè:

Ìàñòåð/ìàñòåð èëèÌàñòåð/ñëåéâ ðåïëèêàöèÿ

Ðàáîòà ÷åðåç òðèããåðû

Âîçìîæíîñòü ïîòàáëè÷íîéðåïëèêàöèè

Ïðîñòîòà óñòàíîâêè èíàñòðîéêè

Íåäîñòàòêè:

Ruby, ¾ïîåäàåò¿ ïàìÿòü èïðîöåññîð ïðè áîëüøèõîáúåìàõ äàííûõ

Îòñóòñòâèåîòêàçîóñòîé÷èâîñòè

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 18: Postgresql microconf

Streaming Replication (Ïîòîêîâàÿ ðåïëèêàöèÿ)Ìàñøòàáèðîâàíèå PostgreSQL

Îñîáåííîñòè:

Èç êîðîáêè íà÷èíàÿ ñ 9âåðñèè PostgreSQL

Ìàñòåð/ñëåéâ ðåïëèêàöèÿ

Ðàáîòà ÷åðåç WAL ëîãè

Ðåïëèöèðóåòñÿ èíñòàíñPostgreSQL, à íå îòäåëüíàÿáàçà äàííûõ (ñîçäàåòñÿòî÷íàÿ êîïèÿ èíñòàíñàÑÓÁÄ)

Íåäîñòàòêè:

Îòäåëüíî áàçó äàííûõðåïëèöèðîâàòü íåëüçÿ

Îòñóòñòâèåîòêàçîóñòîé÷èâîñòè

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 19: Postgresql microconf

PgPool-IIÌàñøòàáèðîâàíèå PostgreSQL

PgPool-II ýòî ïðîñëîéêà,ðàáîòàþùàÿ ìåæäó ñåðâåðàìèPostgreSQL è êëèåíòàìè ÑÓÁÄPostgreSQL. Îíà ïðåäîñòàâëÿåòñëåäóþùèå ôóíêöèè:

Îáúåäèíåíèå ñîåäèíåíèé

Ðåïëèêàöèÿ

Áàëàíñèðîâêà íàãðóçêè

Îãðàíè÷åíèå ëèøíèõñîåäèíåíèé

Ïàðàëëåëüíûå çàïðîñû

Êåøèðîâàíèå çàïðîñîâ

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 20: Postgresql microconf

PgPool-II ðåïëèêàöèÿÌàñøòàáèðîâàíèå PostgreSQL

Ìèíóñ � ïàäåíèå ïðîèçâîäèòåëüíîñòè (ñèíõðîííàÿ ðåïëèêàöèÿ,áëîêèðîâêà òàáëèöû)

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 21: Postgresql microconf

Ïðèìåð ðåøåíèÿ ïðîáëåìû ÷òåíèÿ äàííûõÌàñøòàáèðîâàíèå PostgreSQL

Ñîçäàíèå êëàñòåðà PostgreSQL äëÿ ðåøåíèÿ ïðîáëåìû ÷òåíèÿäàííûõ:

PgPool-II 3 + PostgreSQL 9

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 22: Postgresql microconf

Âçàèìîäåéñòâèå PgPool-II 3 ñ PostgreSQL 9PgPool-II 3 è PostgreSQL 9

Íåäîñòàòêè ïîòîêîâîé ðåïëèêàöèè â PostgreSQL 9:

Îòñóòñòâèå îòêàçîóñòîé÷èâîñòè

Íåò ïóëîâ ñîåäèíåíèé

Íåò áàëàíñèðîâêè íàãðóçêè

Íóæíî ó÷èòûâàòü, êàêèå çàïðîñû íå ïðèíèìàþò ñëåéâû(INSERT, UPDATE, DELETE, COPY FROM, TRUNCATE èò.ä.)

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 23: Postgresql microconf

Âçàèìîäåéñòâèå PgPool-II 3 ñ PostgreSQL 9PgPool-II 3 è PostgreSQL 9

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 24: Postgresql microconf

Ïëþñû è ìèíóñûPgPool-II 3 è PostgreSQL 9

Ïëþñû:

Ïðîèçâîäèòåëüíîñòü çàïèñè ïàäàåò íåçíà÷èòåëüíî

Îòêàçîóñòîé÷èâîñòü

Ïóëû ñîåäèíåíèé

Áàëàíñèðîâêà íàãðóçêè � óâåëè÷åíèå ïðîèçâîäèòåëüíîñòèíà ÷òåíèå

Ìèíóñû:

Àñèíõðîííàÿ ðåïëèêàöèÿ � õîòü è çàäåðæêà ðåïëèêàöèèîòíîñèòåëüíî íèçêàÿ, ìîãóò âîçíèêàòü ïðîáëåìû ïðèáàëàíñèðîâêå

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 25: Postgresql microconf

Íîâûå âîçìîæíîñòè â pgpool-II 3PgPool-II 3 è PostgreSQL 9

Íîâûé ïàðàìåòð ¾sub_mode¿ äëÿ ïîòîêîâîé ðåïëèêàöèè

Îòïðàâêà íà ìàñòåð çàïðîñîâ íà çàïèñü

Èíòåëëåêòóàëüíàÿ áàëàíñèðîâêà íàãðóçêè: ïðîâåðêàçàäåðæêè ðåïëèêàöèè ìåæäó ìàñòåðîì è ñëåéâîì.

Äîáàâëåíèå ñëåéâîâ áåç îñòàíîâêè pgpool-II

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 26: Postgresql microconf

Îáíàðóæåíèå çàäåðæêè ðåïëèêàöèèPgPool-II 3 è PostgreSQL 9

Îáíàðóæåíèå çàäåðæêè ðåïëèêàöèè: êàê ýòî ðàáîòàåò?

(SELECT pg_current_xlog_location())-

(SELECT pg_last_xlog_receive_location())=

åñëè ðåçóëüòàò ïðåâûøàåò ¾delay_threshold¿ � çàïðîñîòïðàâëÿåòñÿ íà ìàñòåð.

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 27: Postgresql microconf

Ëîãèðîâàíèå çàäåðæêè ðåïëèêàöèèPgPool-II 3 è PostgreSQL 9

Ïàðàìåòð ¾log_standby_delay¿ ìîæåò áûòü:

none: íå ëîãèðîâàòü çàäåðæêó

if_over_threshold: ëîãèðîâàòü, åñëè ðåçóëüòàò ïðåâûñèëdelay_threshold

always: âñåãäà ëîãèðîâàòü çàäåðæêó

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 28: Postgresql microconf

Çàäåðæêà ðåïëèêàöèè Slony-IPgPool-II 3 è PostgreSQL 9 vs Slony-I

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 29: Postgresql microconf

Íèçêîå ïàäåíèå ïðîèçâîäèòåëüíîñòè ìàñòåðàPgPool-II 3 è PostgreSQL 9 vs Slony-I

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 30: Postgresql microconf

Íèçêàÿ çàäåðæêà ðåïëèêàöèèPgPool-II 3 è PostgreSQL 9 vs Slony-I

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 31: Postgresql microconf

ÈòîãPgPool-II 3 è PostgreSQL 9

Ïðîñòîòà â íàñòðîéêå èîáñëóæèâàíèè

Ìû ìîæåì äîáàâëÿòüñëåéâ ñåðâåðà áåç ïîòåðèïðîèçâîäèòåëüíîñòè íàçàïèñü

Áîëüøå ñëåéâ ñåðâåðîâ �áîëüøåïðîèçâîäèòåëüíîñòü íà÷òåíèå

Íèçêàÿ çàäåðæêàðåïëèêàöèè ìåæäóìàñòåðîì è ñëåéâîì

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 32: Postgresql microconf

ØàðäèíãÌàñøòàáèðîâàíèå PostgreSQL

Øàðäèíã � ðàçäåëåíèåäàííûõ íà óðîâíå ðåñóðñîâ.Êîíöåïöèÿ øàðäèíãàçàêëþ÷àåòñÿ â ëîãè÷åñêîìðàçäåëåíèè äàííûõ ïîðàçëè÷íûì ðåñóðñàì èñõîäÿ èçòðåáîâàíèé ê íàãðóçêå.Óòèëèòû äëÿ ñîçäàíèÿøàðäèíãà â PostgreSQL:

PL/Proxy

Sequoia

GridSQL for EnterpriseDBAdvanced Server

Greenplum Database

HadoopDB

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 33: Postgresql microconf

Ïóëû ñîåäèíåíèéÓçêèå ìåñòà â PostgreSQL

Ìóëüòèïëåêñîðû ñîåäèíåíèé(ïðîãðàììû äëÿ ñîçäàíèÿïóëà êîííåêòîâ) � ïîçâîëÿþòóìåíüøèòü íàêëàäíûå ðàñõîäûíà áàçó äàííûõ, â ñëó÷àå, êîãäàîãðîìíîå êîëè÷åñòâîôèçè÷åñêèõ ñîåäèíåíèé âåäåò êïàäåíèþ ïðîèçâîäèòåëüíîñòèPostgreSQL.

PgBouncer

Pgpool

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ

Page 34: Postgresql microconf

Âîïðîñû è Îòâåòû

Ñïàñèáî çà âíèìàíèå!

Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ