Postgresql microconf
- 2. ×òî òàêîå PostgreSQL?
Ââåäåíèå
PostgreSQL ñâîáîäíàÿ îáúåêòíî-ðåëÿöèîííàÿ ñèñòåìà
óïðàâëåíèÿ áàçàìè äàííûõ (ÑÓÁÄ).
Ïî÷åìó PostgreSQL?
Íàäåæíîñòü;
Ïîääåðæêà ÁÄ ïðàêòè÷åñêè íåîãðàíè÷åííîãî ðàçìåðà;
Ìîùíûå è íàä¼æíûå ìåõàíèçìû òðàíçàêöèé è ðåïëèêàöèè;
Íàñëåäîâàíèå;
Ëåãêàÿ ðàñøèðÿåìîñòü;
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 3. Ââåäåíèå
Ïðîèçâîäèòåëüíîñòü â PostgreSQL
Íå èñïîëüçóéòå íàñòðîéêè
ïî óìîë÷àíèþ
Èñïîëüçóéòå àêòóàëüíóþ
âåðñèþ ñåðâåðà
Òåñòû ïðîèçâîäèòåëüíîñòè
ñëóæàò äëÿ ïðîäâèæåíèÿ
êîíêðåòíûõ ïðîäóêòîâ
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 5. Îïòèìèçàöèÿ ÁÄ è ïðèëîæåíèÿ
Ïðîèçâîäèòåëüíîñòü â PostgreSQL
Ãðàììîòíîå
ïðîåêòèðîâàíèå áàçû
Íàëè÷èå áûñòðûõ ïóòåé
äîñòóïà ê äàííûì
èíäåêñîâ
Îáõîä èçâåñòíûõ ïðîáëåì
(ìåäëåííûé count, unions è
ò.ä.)
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 6. ×òî òàêîå ìàñøòàáèðîâàíèå?
Ìàñøòàáèðîâàíèå PostgreSQL
Ìàñøòàáèðîâàíèå ýòî
ïðîöåññ îáåñïå÷åíèÿ ðîñòà
ñèñòåìû, ò.å.
ìàñøòàáèðóåìîñòè. Â ñâîþ
î÷åðåäü,
ìàñøòàáèðóåìîñòü ýòî
ñâîéñòâî ñèñòåìû, ñîõðàíÿÿ
ïðîïóñêíóþ ñïîñîáíîñòü,
ñïðàâëÿòüñÿ ñ óâåëè÷åíèåì
íàãðóçêè ïðè óâåëè÷åíèè
îïðåäåëåííûõ ðåñóðñîâ
ñèñòåìû.
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 7. Ïðîáëåìû
Ìàñøòàáèðîâàíèå PostgreSQL
Îãðàíè÷åíèå ïðîïóñêíîé
ñïîñîáíîñòè ÷òåíèÿ
äàííûõ
Îãðàíè÷åíèå ïðîïóñêíîé
ñïîñîáíîñòè çàïèñè äàííûõ
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 10. Ïàðòèöèîíèðîâàíèå (ñåêöèîíèðîâàíèå) òàáëèö
Ìàñøòàáèðîâàíèå PostgreSQL
Ïàðòèöèîíèðîâàíèå (ñåêöèîíèðîâàíèå) ýòî ðàçáèåíèå
áîëüøèõ ñòðóêòóð áàç äàííûõ (òàáëèöû, èíäåêñû) íà ìåíüøèå
êóñî÷êè. PostgreSQL ïîääåðæèâàåò äâà êðèòåðèÿ äëÿ ñîçäàíèÿ
ïàðòèöèé:
Ïàðòèöèîíèðîâàíèå ïî äèàïàçîíó çíà÷åíèé (range)
Ïàðòèöèîíèðîâàíèå ïî ñïèñêó çíà÷åíèé (list)
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 11. Ìåòîäû äåëåíèÿ äàííûõ íà ïàðòèöèè
Ìàñøòàáèðîâàíèå PostgreSQL
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 13. Ðåïëèêàöèÿ
Ìàñøòàáèðîâàíèå PostgreSQL
Ðåïëèêàöèÿ ìåõàíèçì
ñèíõðîíèçàöèè ñîäåðæèìîãî
íåñêîëüêèõ êîïèé îáúåêòà
(íàïðèìåð, ñîäåðæèìîãî áàçû
äàííûõ). Óòèëèòû äëÿ
ñîçäàíèÿ ðåïëèêàöèè â
PostgreSQL:
Slony-I
pgpool-I/II
Bucardo
Londiste
RubyRep
Ïîòîêîâàÿ ðåïëèêàöèÿ
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 14. Slony-I
Ìàñøòàáèðîâàíèå PostgreSQL
Îñîáåííîñòè :
Ìàñòåð/ñëåéâ ðåïëèêàöèÿ
Ðàáîòà ÷åðåç òðèããåðû
Âîçìîæíîñòü ïîòàáëè÷íîé
ðåïëèêàöèè
Ïîääåðæêà êàñêàäíîé
ðåïëèêàöèè
Ïîääåðæêà
îòêàçîóñòîé÷èâîñòè
Íåäîñòàòêè:
Ñëîæíàÿ íàñòðîéêà
Äîáàâëåíèå óçëà
òðóäîåìêàÿ îïåðàöèÿ
Òàáëèöû äîëæíû èìåòü
primary key
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 15. Londiste
Ìàñøòàáèðîâàíèå PostgreSQL
Îñîáåííîñòè :
Ìàñòåð/ñëåéâ ðåïëèêàöèÿ
Ðàáîòà ÷åðåç òðèããåðû
Âîçìîæíîñòü ïîòàáëè÷íîé
ðåïëèêàöèè
Âîçìîæíîñòü
äâóõñòîðîííåãî ñðàâíåíèÿ
òàáëèö
Ïðîñòîòà óñòàíîâêè è
íàñòðîéêè
Íåäîñòàòêè:
Îòñóòñòâèå êàñêàäíîé
ðåïëèêàöèè
Îòñóòñòâèå
îòêàçîóñòîé÷èâîñòè
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 16. Bucardo
Ìàñøòàáèðîâàíèå PostgreSQL
Îñîáåííîñòè :
Ìàñòåð/ìàñòåð èëè
Ìàñòåð/ñëåéâ ðåïëèêàöèÿ
Ðàáîòà ÷åðåç òðèããåðû
Âîçìîæíîñòü ïîòàáëè÷íîé
ðåïëèêàöèè
Ïîääåðæêà êàñêàäíîé
ðåïëèêàöèè
Íåäîñòàòêè:
Perl, òðåáóåòñÿ Pl/PgSQL è
Pl/PerlU
Îòñóòñòâèå
îòêàçîóñòîé÷èâîñòè
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 17. RubyRep
Ìàñøòàáèðîâàíèå PostgreSQL
Îñîáåííîñòè :
Ìàñòåð/ìàñòåð èëè
Ìàñòåð/ñëåéâ ðåïëèêàöèÿ
Ðàáîòà ÷åðåç òðèããåðû
Âîçìîæíîñòü ïîòàáëè÷íîé
ðåïëèêàöèè
Ïðîñòîòà óñòàíîâêè è
íàñòðîéêè
Íåäîñòàòêè:
Ruby, ¾ïîåäàåò¿ ïàìÿòü è
ïðîöåññîð ïðè áîëüøèõ
îáúåìàõ äàííûõ
Îòñóòñòâèå
îòêàçîóñòîé÷èâîñòè
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 18. Streaming Replication (Ïîòîêîâàÿ ðåïëèêàöèÿ)
Ìàñøòàáèðîâàíèå PostgreSQL
Îñîáåííîñòè :
Èç êîðîáêè íà÷èíàÿ ñ 9
âåðñèè PostgreSQL
Ìàñòåð/ñëåéâ ðåïëèêàöèÿ
Ðàáîòà ÷åðåç WAL ëîãè
Ðåïëèöèðóåòñÿ èíñòàíñ
PostgreSQL, à íå îòäåëüíàÿ
áàçà äàííûõ (ñîçäàåòñÿ
òî÷íàÿ êîïèÿ èíñòàíñà
ÑÓÁÄ)
Íåäîñòàòêè:
Îòäåëüíî áàçó äàííûõ
ðåïëèöèðîâàòü íåëüçÿ
Îòñóòñòâèå
îòêàçîóñòîé÷èâîñòè
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 19. PgPool-II
Ìàñøòàáèðîâàíèå PostgreSQL
PgPool-IIýòî ïðîñëîéêà,
ðàáîòàþùàÿ ìåæäó ñåðâåðàìè
PostgreSQL è êëèåíòàìè ÑÓÁÄ
PostgreSQL. Îíà ïðåäîñòàâëÿåò
ñëåäóþùèå ôóíêöèè:
Îáúåäèíåíèå ñîåäèíåíèé
Ðåïëèêàöèÿ
Áàëàíñèðîâêà íàãðóçêè
Îãðàíè÷åíèå ëèøíèõ
ñîåäèíåíèé
Ïàðàëëåëüíûå çàïðîñû
Êåøèðîâàíèå çàïðîñîâ
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 21. Ïðèìåð ðåøåíèÿ ïðîáëåìû ÷òåíèÿ äàííûõ
Ìàñøòàáèðîâàíèå PostgreSQL
Ñîçäàíèå êëàñòåðà PostgreSQL äëÿ ðåøåíèÿ ïðîáëåìû ÷òåíèÿ
äàííûõ:
PgPool-II 3 + PostgreSQL 9
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 22. Âçàèìîäåéñòâèå PgPool-II 3 ñ PostgreSQL 9
PgPool-II 3 è PostgreSQL 9
Íåäîñòàòêè ïîòîêîâîé ðåïëèêàöèè â PostgreSQL 9:
Îòñóòñòâèå îòêàçîóñòîé÷èâîñòè
Íåò ïóëîâ ñîåäèíåíèé
Íåò áàëàíñèðîâêè íàãðóçêè
Íóæíî ó÷èòûâàòü, êàêèå çàïðîñû íå ïðèíèìàþò ñëåéâû
(INSERT, UPDATE, DELETE, COPY FROM, TRUNCATE è
ò.ä.)
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 24. Ïëþñû è ìèíóñû
PgPool-II 3 è PostgreSQL 9
Ïëþñû:
Ïðîèçâîäèòåëüíîñòü çàïèñè ïàäàåò íåçíà÷èòåëüíî
Îòêàçîóñòîé÷èâîñòü
Ïóëû ñîåäèíåíèé
Áàëàíñèðîâêà íàãðóçêè óâåëè÷åíèå ïðîèçâîäèòåëüíîñòè
íà ÷òåíèå
Ìèíóñû:
Àñèíõðîííàÿ ðåïëèêàöèÿ õîòü è çàäåðæêà ðåïëèêàöèè
îòíîñèòåëüíî íèçêàÿ, ìîãóò âîçíèêàòü ïðîáëåìû ïðè
áàëàíñèðîâêå
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 25. Íîâûå âîçìîæíîñòè â pgpool-II 3
PgPool-II 3 è PostgreSQL 9
Íîâûé ïàðàìåòð ¾sub_mode¿ äëÿ ïîòîêîâîé ðåïëèêàöèè
Îòïðàâêà íà ìàñòåð çàïðîñîâ íà çàïèñü
Èíòåëëåêòóàëüíàÿ áàëàíñèðîâêà íàãðóçêè: ïðîâåðêà
çàäåðæêè ðåïëèêàöèè ìåæäó ìàñòåðîì è ñëåéâîì.
Äîáàâëåíèå ñëåéâîâ áåç îñòàíîâêè pgpool-II
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 26. Îáíàðóæåíèå çàäåðæêè ðåïëèêàöèè
PgPool-II 3 è PostgreSQL 9
Îáíàðóæåíèå çàäåðæêè ðåïëèêàöèè: êàê ýòî ðàáîòàåò?
(SELECT pg_current_xlog_location())
-
(SELECT pg_last_xlog_receive_location())
=
åñëè ðåçóëüòàò ïðåâûøàåò ¾delay_threshold¿ çàïðîñ
îòïðàâëÿåòñÿ íà ìàñòåð.
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 27. Ëîãèðîâàíèå çàäåðæêè ðåïëèêàöèè
PgPool-II 3 è PostgreSQL 9
Ïàðàìåòð ¾log_standby_delay¿ ìîæåò áûòü:
none: íå ëîãèðîâàòü çàäåðæêó
if_over_threshold: ëîãèðîâàòü, åñëè ðåçóëüòàò ïðåâûñèë
delay_threshold
always: âñåãäà ëîãèðîâàòü çàäåðæêó
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 31. Èòîã
PgPool-II 3 è PostgreSQL 9
Ïðîñòîòà â íàñòðîéêå è
îáñëóæèâàíèè
Ìû ìîæåì äîáàâëÿòü
ñëåéâ ñåðâåðà áåç ïîòåðè
ïðîèçâîäèòåëüíîñòè íà
çàïèñü
Áîëüøå ñëåéâ ñåðâåðîâ
áîëüøå
ïðîèçâîäèòåëüíîñòü íà
÷òåíèå
Íèçêàÿ çàäåðæêà
ðåïëèêàöèè ìåæäó
ìàñòåðîì è ñëåéâîì
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 32. Øàðäèíã
Ìàñøòàáèðîâàíèå PostgreSQL
Øàðäèíã ðàçäåëåíèå
äàííûõ íà óðîâíå ðåñóðñîâ.
Êîíöåïöèÿ øàðäèíãà
çàêëþ÷àåòñÿ â ëîãè÷åñêîì
ðàçäåëåíèè äàííûõ ïî
ðàçëè÷íûì ðåñóðñàì èñõîäÿ èç
òðåáîâàíèé ê íàãðóçêå.
Óòèëèòû äëÿ ñîçäàíèÿ
øàðäèíãà â PostgreSQL:
PL/Proxy
Sequoia
GridSQL for EnterpriseDB
Advanced Server
Greenplum Database
HadoopDB
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 33. Ïóëû ñîåäèíåíèé
Óçêèå ìåñòà â PostgreSQL
Ìóëüòèïëåêñîðû ñîåäèíåíèé
(ïðîãðàììû äëÿ ñîçäàíèÿ
ïóëà êîííåêòîâ) ïîçâîëÿþò
óìåíüøèòü íàêëàäíûå ðàñõîäû
íà áàçó äàííûõ, â ñëó÷àå, êîãäà
îãðîìíîå êîëè÷åñòâî
ôèçè÷åñêèõ ñîåäèíåíèé âåäåò ê
ïàäåíèþ ïðîèçâîäèòåëüíîñòè
PostgreSQL.
PgBouncer
Pgpool
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
- 34. Âîïðîñû è Îòâåòû
Ñïàñèáî çà âíèìàíèå!
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ