Upload
alexey-vasiliev
View
549
Download
4
Embed Size (px)
Citation preview
PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Âàñèëüåâ Àëåêñåé Þðüåâè÷leopard.in.ua
Èþíü 2011
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
×òî òàêîå PostgreSQL?
Ââåäåíèå
PostgreSQL � ñâîáîäíàÿ îáúåêòíî-ðåëÿöèîííàÿ ñèñòåìàóïðàâëåíèÿ áàçàìè äàííûõ (ÑÓÁÄ).
Ïî÷åìó PostgreSQL?
Íàäåæíîñòü;
Ïîääåðæêà ÁÄ ïðàêòè÷åñêè íåîãðàíè÷åííîãî ðàçìåðà;
Ìîùíûå è íàä¼æíûå ìåõàíèçìû òðàíçàêöèé è ðåïëèêàöèè;
Íàñëåäîâàíèå;
Ëåãêàÿ ðàñøèðÿåìîñòü;
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
ÂâåäåíèåÏðîèçâîäèòåëüíîñòü â PostgreSQL
Íå èñïîëüçóéòå íàñòðîéêèïî óìîë÷àíèþ
Èñïîëüçóéòå àêòóàëüíóþâåðñèþ ñåðâåðà
Òåñòû ïðîèçâîäèòåëüíîñòèñëóæàò äëÿ ïðîäâèæåíèÿêîíêðåòíûõ ïðîäóêòîâ
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Âûáîð îïòèìàëüíûõ íàñòðîåêÏðîèçâîäèòåëüíîñòü â PostgreSQL
Ìåòîä ñðàâíèòåëüíîãîòåñòèðîâàíèÿ
pgtune � íàñòðîéêè ïî¾æåëåçó¿
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Îïòèìèçàöèÿ ÁÄ è ïðèëîæåíèÿÏðîèçâîäèòåëüíîñòü â PostgreSQL
Ãðàììîòíîåïðîåêòèðîâàíèå áàçû
Íàëè÷èå áûñòðûõ ïóòåéäîñòóïà ê äàííûì �èíäåêñîâ
Îáõîä èçâåñòíûõ ïðîáëåì(ìåäëåííûé count, unions èò.ä.)
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
×òî òàêîå ìàñøòàáèðîâàíèå?Ìàñøòàáèðîâàíèå PostgreSQL
Ìàñøòàáèðîâàíèå � ýòîïðîöåññ îáåñïå÷åíèÿ ðîñòàñèñòåìû, ò.å.ìàñøòàáèðóåìîñòè.  ñâîþî÷åðåäü,ìàñøòàáèðóåìîñòü � ýòîñâîéñòâî ñèñòåìû, ñîõðàíÿÿïðîïóñêíóþ ñïîñîáíîñòü,ñïðàâëÿòüñÿ ñ óâåëè÷åíèåìíàãðóçêè ïðè óâåëè÷åíèèîïðåäåëåííûõ ðåñóðñîâñèñòåìû.
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
ÏðîáëåìûÌàñøòàáèðîâàíèå PostgreSQL
Îãðàíè÷åíèå ïðîïóñêíîéñïîñîáíîñòè ÷òåíèÿäàííûõ
Îãðàíè÷åíèå ïðîïóñêíîéñïîñîáíîñòè çàïèñè äàííûõ
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
ÏîäõîäûÌàñøòàáèðîâàíèå PostgreSQL
Âåðòèêàëüíîåìàñøòàáèðîâàíèå
Ãîðèçîíòàëüíîåìàñøòàáèðîâàíèå
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
ÌåòîäûÌàñøòàáèðîâàíèå PostgreSQL
Ïàðòèöèîíèðîâàíèå(ñåêöèîíèðîâàíèå) òàáëèö
Ðåïëèêàöèÿ
Øàðäèíã
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Ïàðòèöèîíèðîâàíèå (ñåêöèîíèðîâàíèå) òàáëèöÌàñøòàáèðîâàíèå PostgreSQL
Ïàðòèöèîíèðîâàíèå (ñåêöèîíèðîâàíèå) � ýòî ðàçáèåíèåáîëüøèõ ñòðóêòóð áàç äàííûõ (òàáëèöû, èíäåêñû) íà ìåíüøèåêóñî÷êè. PostgreSQL ïîääåðæèâàåò äâà êðèòåðèÿ äëÿ ñîçäàíèÿïàðòèöèé:
Ïàðòèöèîíèðîâàíèå ïî äèàïàçîíó çíà÷åíèé (range)
Ïàðòèöèîíèðîâàíèå ïî ñïèñêó çíà÷åíèé (list)
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Ìåòîäû äåëåíèÿ äàííûõ íà ïàðòèöèèÌàñøòàáèðîâàíèå PostgreSQL
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Ïàðòèöèîíèðîâàíèå â PostgreSQLÌàñøòàáèðîâàíèå PostgreSQL
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
ÐåïëèêàöèÿÌàñøòàáèðîâàíèå PostgreSQL
Ðåïëèêàöèÿ �ìåõàíèçìñèíõðîíèçàöèè ñîäåðæèìîãîíåñêîëüêèõ êîïèé îáúåêòà(íàïðèìåð, ñîäåðæèìîãî áàçûäàííûõ). Óòèëèòû äëÿñîçäàíèÿ ðåïëèêàöèè âPostgreSQL:
Slony-I
pgpool-I/II
Bucardo
Londiste
RubyRep
Ïîòîêîâàÿ ðåïëèêàöèÿ
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Slony-IÌàñøòàáèðîâàíèå PostgreSQL
Îñîáåííîñòè:
Ìàñòåð/ñëåéâ ðåïëèêàöèÿ
Ðàáîòà ÷åðåç òðèããåðû
Âîçìîæíîñòü ïîòàáëè÷íîéðåïëèêàöèè
Ïîääåðæêà êàñêàäíîéðåïëèêàöèè
Ïîääåðæêàîòêàçîóñòîé÷èâîñòè
Íåäîñòàòêè:
Ñëîæíàÿ íàñòðîéêà
Äîáàâëåíèå óçëà �òðóäîåìêàÿ îïåðàöèÿ
Òàáëèöû äîëæíû èìåòüprimary key
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
LondisteÌàñøòàáèðîâàíèå PostgreSQL
Îñîáåííîñòè:
Ìàñòåð/ñëåéâ ðåïëèêàöèÿ
Ðàáîòà ÷åðåç òðèããåðû
Âîçìîæíîñòü ïîòàáëè÷íîéðåïëèêàöèè
Âîçìîæíîñòüäâóõñòîðîííåãî ñðàâíåíèÿòàáëèö
Ïðîñòîòà óñòàíîâêè èíàñòðîéêè
Íåäîñòàòêè:
Îòñóòñòâèå êàñêàäíîéðåïëèêàöèè
Îòñóòñòâèåîòêàçîóñòîé÷èâîñòè
Òàáëèöû äîëæíû èìåòüprimary key
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
BucardoÌàñøòàáèðîâàíèå PostgreSQL
Îñîáåííîñòè:
Ìàñòåð/ìàñòåð èëèÌàñòåð/ñëåéâ ðåïëèêàöèÿ
Ðàáîòà ÷åðåç òðèããåðû
Âîçìîæíîñòü ïîòàáëè÷íîéðåïëèêàöèè
Ïîääåðæêà êàñêàäíîéðåïëèêàöèè
Íåäîñòàòêè:
Perl, òðåáóåòñÿ Pl/PgSQL èPl/PerlU
Îòñóòñòâèåîòêàçîóñòîé÷èâîñòè
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
RubyRepÌàñøòàáèðîâàíèå PostgreSQL
Îñîáåííîñòè:
Ìàñòåð/ìàñòåð èëèÌàñòåð/ñëåéâ ðåïëèêàöèÿ
Ðàáîòà ÷åðåç òðèããåðû
Âîçìîæíîñòü ïîòàáëè÷íîéðåïëèêàöèè
Ïðîñòîòà óñòàíîâêè èíàñòðîéêè
Íåäîñòàòêè:
Ruby, ¾ïîåäàåò¿ ïàìÿòü èïðîöåññîð ïðè áîëüøèõîáúåìàõ äàííûõ
Îòñóòñòâèåîòêàçîóñòîé÷èâîñòè
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Streaming Replication (Ïîòîêîâàÿ ðåïëèêàöèÿ)Ìàñøòàáèðîâàíèå PostgreSQL
Îñîáåííîñòè:
Èç êîðîáêè íà÷èíàÿ ñ 9âåðñèè PostgreSQL
Ìàñòåð/ñëåéâ ðåïëèêàöèÿ
Ðàáîòà ÷åðåç WAL ëîãè
Ðåïëèöèðóåòñÿ èíñòàíñPostgreSQL, à íå îòäåëüíàÿáàçà äàííûõ (ñîçäàåòñÿòî÷íàÿ êîïèÿ èíñòàíñàÑÓÁÄ)
Íåäîñòàòêè:
Îòäåëüíî áàçó äàííûõðåïëèöèðîâàòü íåëüçÿ
Îòñóòñòâèåîòêàçîóñòîé÷èâîñòè
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
PgPool-IIÌàñøòàáèðîâàíèå PostgreSQL
PgPool-II ýòî ïðîñëîéêà,ðàáîòàþùàÿ ìåæäó ñåðâåðàìèPostgreSQL è êëèåíòàìè ÑÓÁÄPostgreSQL. Îíà ïðåäîñòàâëÿåòñëåäóþùèå ôóíêöèè:
Îáúåäèíåíèå ñîåäèíåíèé
Ðåïëèêàöèÿ
Áàëàíñèðîâêà íàãðóçêè
Îãðàíè÷åíèå ëèøíèõñîåäèíåíèé
Ïàðàëëåëüíûå çàïðîñû
Êåøèðîâàíèå çàïðîñîâ
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
PgPool-II ðåïëèêàöèÿÌàñøòàáèðîâàíèå PostgreSQL
Ìèíóñ � ïàäåíèå ïðîèçâîäèòåëüíîñòè (ñèíõðîííàÿ ðåïëèêàöèÿ,áëîêèðîâêà òàáëèöû)
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Ïðèìåð ðåøåíèÿ ïðîáëåìû ÷òåíèÿ äàííûõÌàñøòàáèðîâàíèå PostgreSQL
Ñîçäàíèå êëàñòåðà PostgreSQL äëÿ ðåøåíèÿ ïðîáëåìû ÷òåíèÿäàííûõ:
PgPool-II 3 + PostgreSQL 9
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Âçàèìîäåéñòâèå PgPool-II 3 ñ PostgreSQL 9PgPool-II 3 è PostgreSQL 9
Íåäîñòàòêè ïîòîêîâîé ðåïëèêàöèè â PostgreSQL 9:
Îòñóòñòâèå îòêàçîóñòîé÷èâîñòè
Íåò ïóëîâ ñîåäèíåíèé
Íåò áàëàíñèðîâêè íàãðóçêè
Íóæíî ó÷èòûâàòü, êàêèå çàïðîñû íå ïðèíèìàþò ñëåéâû(INSERT, UPDATE, DELETE, COPY FROM, TRUNCATE èò.ä.)
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Âçàèìîäåéñòâèå PgPool-II 3 ñ PostgreSQL 9PgPool-II 3 è PostgreSQL 9
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Ïëþñû è ìèíóñûPgPool-II 3 è PostgreSQL 9
Ïëþñû:
Ïðîèçâîäèòåëüíîñòü çàïèñè ïàäàåò íåçíà÷èòåëüíî
Îòêàçîóñòîé÷èâîñòü
Ïóëû ñîåäèíåíèé
Áàëàíñèðîâêà íàãðóçêè � óâåëè÷åíèå ïðîèçâîäèòåëüíîñòèíà ÷òåíèå
Ìèíóñû:
Àñèíõðîííàÿ ðåïëèêàöèÿ � õîòü è çàäåðæêà ðåïëèêàöèèîòíîñèòåëüíî íèçêàÿ, ìîãóò âîçíèêàòü ïðîáëåìû ïðèáàëàíñèðîâêå
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Íîâûå âîçìîæíîñòè â pgpool-II 3PgPool-II 3 è PostgreSQL 9
Íîâûé ïàðàìåòð ¾sub_mode¿ äëÿ ïîòîêîâîé ðåïëèêàöèè
Îòïðàâêà íà ìàñòåð çàïðîñîâ íà çàïèñü
Èíòåëëåêòóàëüíàÿ áàëàíñèðîâêà íàãðóçêè: ïðîâåðêàçàäåðæêè ðåïëèêàöèè ìåæäó ìàñòåðîì è ñëåéâîì.
Äîáàâëåíèå ñëåéâîâ áåç îñòàíîâêè pgpool-II
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Îáíàðóæåíèå çàäåðæêè ðåïëèêàöèèPgPool-II 3 è PostgreSQL 9
Îáíàðóæåíèå çàäåðæêè ðåïëèêàöèè: êàê ýòî ðàáîòàåò?
(SELECT pg_current_xlog_location())-
(SELECT pg_last_xlog_receive_location())=
åñëè ðåçóëüòàò ïðåâûøàåò ¾delay_threshold¿ � çàïðîñîòïðàâëÿåòñÿ íà ìàñòåð.
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Ëîãèðîâàíèå çàäåðæêè ðåïëèêàöèèPgPool-II 3 è PostgreSQL 9
Ïàðàìåòð ¾log_standby_delay¿ ìîæåò áûòü:
none: íå ëîãèðîâàòü çàäåðæêó
if_over_threshold: ëîãèðîâàòü, åñëè ðåçóëüòàò ïðåâûñèëdelay_threshold
always: âñåãäà ëîãèðîâàòü çàäåðæêó
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Çàäåðæêà ðåïëèêàöèè Slony-IPgPool-II 3 è PostgreSQL 9 vs Slony-I
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Íèçêîå ïàäåíèå ïðîèçâîäèòåëüíîñòè ìàñòåðàPgPool-II 3 è PostgreSQL 9 vs Slony-I
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Íèçêàÿ çàäåðæêà ðåïëèêàöèèPgPool-II 3 è PostgreSQL 9 vs Slony-I
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
ÈòîãPgPool-II 3 è PostgreSQL 9
Ïðîñòîòà â íàñòðîéêå èîáñëóæèâàíèè
Ìû ìîæåì äîáàâëÿòüñëåéâ ñåðâåðà áåç ïîòåðèïðîèçâîäèòåëüíîñòè íàçàïèñü
Áîëüøå ñëåéâ ñåðâåðîâ �áîëüøåïðîèçâîäèòåëüíîñòü íà÷òåíèå
Íèçêàÿ çàäåðæêàðåïëèêàöèè ìåæäóìàñòåðîì è ñëåéâîì
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
ØàðäèíãÌàñøòàáèðîâàíèå PostgreSQL
Øàðäèíã � ðàçäåëåíèåäàííûõ íà óðîâíå ðåñóðñîâ.Êîíöåïöèÿ øàðäèíãàçàêëþ÷àåòñÿ â ëîãè÷åñêîìðàçäåëåíèè äàííûõ ïîðàçëè÷íûì ðåñóðñàì èñõîäÿ èçòðåáîâàíèé ê íàãðóçêå.Óòèëèòû äëÿ ñîçäàíèÿøàðäèíãà â PostgreSQL:
PL/Proxy
Sequoia
GridSQL for EnterpriseDBAdvanced Server
Greenplum Database
HadoopDB
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Ïóëû ñîåäèíåíèéÓçêèå ìåñòà â PostgreSQL
Ìóëüòèïëåêñîðû ñîåäèíåíèé(ïðîãðàììû äëÿ ñîçäàíèÿïóëà êîííåêòîâ) � ïîçâîëÿþòóìåíüøèòü íàêëàäíûå ðàñõîäûíà áàçó äàííûõ, â ñëó÷àå, êîãäàîãðîìíîå êîëè÷åñòâîôèçè÷åñêèõ ñîåäèíåíèé âåäåò êïàäåíèþ ïðîèçâîäèòåëüíîñòèPostgreSQL.
PgBouncer
Pgpool
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Âîïðîñû è Îòâåòû
Ñïàñèáî çà âíèìàíèå!
Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ