SlideShare a Scribd company logo
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

 Îñîáåííîñòè :
    Ìàñòåð/ñëåéâ ðåïëèêàöèÿ
    Ðàáîòà ÷åðåç òðèããåðû
    Âîçìîæíîñòü ïîòàáëè÷íîé
    ðåïëèêàöèè
    Âîçìîæíîñòü
    äâóõñòîðîííåãî ñðàâíåíèÿ
    òàáëèö
    Ïðîñòîòà óñòàíîâêè è
    íàñòðîéêè
 Íåäîñòàòêè:
    Îòñóòñòâèå êàñêàäíîé
    ðåïëèêàöèè
    Îòñóòñòâèå
    îòêàçîóñòîé÷èâîñòè
                       Âàñèëüåâ Î.Þ.   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 9
PgPool-II 3 è PostgreSQL 9




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



                             Âàñèëüåâ Î.Þ.   PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Âçàèìîäåéñòâèå PgPool-II 3 ñ PostgreSQL 9
PgPool-II 3 è PostgreSQL 9




                             Âàñèëüåâ Î.Þ.   PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Ïëþñû è ìèíóñû
PgPool-II 3 è PostgreSQL 9




   Ïëþñû:
      Ïðîèçâîäèòåëüíîñòü çàïèñè ïàäàåò íåçíà÷èòåëüíî
      Îòêàçîóñòîé÷èâîñòü
      Ïóëû ñîåäèíåíèé
      Áàëàíñèðîâêà íàãðóçêè  óâåëè÷åíèå ïðîèçâîäèòåëüíîñòè
      íà ÷òåíèå
   Ìèíóñû:
      Àñèíõðîííàÿ ðåïëèêàöèÿ  õîòü è çàäåðæêà ðåïëèêàöèè
      îòíîñèòåëüíî íèçêàÿ, ìîãóò âîçíèêàòü ïðîáëåìû ïðè
      áàëàíñèðîâêå


                             Âàñèëüåâ Î.Þ.   PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Íîâûå âîçìîæíîñòè â pgpool-II 3
PgPool-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-I
PgPool-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 EnterpriseDB
                                           Advanced Server
                                           Greenplum Database
                                           HadoopDB
                       Âàñèëüåâ Î.Þ.   PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
Ïóëû ñîåäèíåíèé
Óçêèå ìåñòà â PostgreSQL




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


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




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

More Related Content

Viewers also liked

Logging rails application behavior to MongoDB
Logging rails application behavior to MongoDBLogging rails application behavior to MongoDB
Logging rails application behavior to MongoDB
Alexey Vasiliev
 
Доклад опыт работы
Доклад опыт работыДоклад опыт работы
Доклад опыт работы
Игорь Овсянников
 
Emotional and Behavioral Disorders
Emotional and Behavioral DisordersEmotional and Behavioral Disorders
Emotional and Behavioral Disorders
Evelyn Obamos
 
Special needs presentation
Special needs presentationSpecial needs presentation
Special needs presentationchaveza06
 
Children With Emotional & Behavioral Disorders
Children With Emotional & Behavioral DisordersChildren With Emotional & Behavioral Disorders
Children With Emotional & Behavioral Disordersangelashultis
 

Viewers also liked (6)

Первые шаги в обуви MBT
Первые шаги в обуви MBTПервые шаги в обуви MBT
Первые шаги в обуви MBT
 
Logging rails application behavior to MongoDB
Logging rails application behavior to MongoDBLogging rails application behavior to MongoDB
Logging rails application behavior to MongoDB
 
Доклад опыт работы
Доклад опыт работыДоклад опыт работы
Доклад опыт работы
 
Emotional and Behavioral Disorders
Emotional and Behavioral DisordersEmotional and Behavioral Disorders
Emotional and Behavioral Disorders
 
Special needs presentation
Special needs presentationSpecial needs presentation
Special needs presentation
 
Children With Emotional & Behavioral Disorders
Children With Emotional & Behavioral DisordersChildren With Emotional & Behavioral Disorders
Children With Emotional & Behavioral Disorders
 

Postgresql microconf

  • 1. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ Âàñèëüåâ Àëåêñåé Þðüåâè÷ leopard.in.ua Èþíü 2011 Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
  • 2. ×òî òàêîå PostgreSQL? Ââåäåíèå PostgreSQL ñâîáîäíàÿ îáúåêòíî-ðåëÿöèîííàÿ ñèñòåìà óïðàâëåíèÿ áàçàìè äàííûõ (ÑÓÁÄ). Ïî÷åìó PostgreSQL? Íàäåæíîñòü; Ïîääåðæêà ÁÄ ïðàêòè÷åñêè íåîãðàíè÷åííîãî ðàçìåðà; Ìîùíûå è íàä¼æíûå ìåõàíèçìû òðàíçàêöèé è ðåïëèêàöèè; Íàñëåäîâàíèå; Ëåãêàÿ ðàñøèðÿåìîñòü; Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
  • 3. Ââåäåíèå Ïðîèçâîäèòåëüíîñòü â PostgreSQL Íå èñïîëüçóéòå íàñòðîéêè ïî óìîë÷àíèþ Èñïîëüçóéòå àêòóàëüíóþ âåðñèþ ñåðâåðà Òåñòû ïðîèçâîäèòåëüíîñòè ñëóæàò äëÿ ïðîäâèæåíèÿ êîíêðåòíûõ ïðîäóêòîâ Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
  • 4. Âûáîð îïòèìàëüíûõ íàñòðîåê Ïðîèçâîäèòåëüíîñòü â PostgreSQL Ìåòîä ñðàâíèòåëüíîãî òåñòèðîâàíèÿ pgtune íàñòðîéêè ïî ¾æåëåçó¿ Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
  • 5. Îïòèìèçàöèÿ ÁÄ è ïðèëîæåíèÿ Ïðîèçâîäèòåëüíîñòü â PostgreSQL Ãðàììîòíîå ïðîåêòèðîâàíèå áàçû Íàëè÷èå áûñòðûõ ïóòåé äîñòóïà ê äàííûì èíäåêñîâ Îáõîä èçâåñòíûõ ïðîáëåì (ìåäëåííûé count, unions è ò.ä.) Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
  • 6. ×òî òàêîå ìàñøòàáèðîâàíèå? Ìàñøòàáèðîâàíèå PostgreSQL Ìàñøòàáèðîâàíèå ýòî ïðîöåññ îáåñïå÷åíèÿ ðîñòà ñèñòåìû, ò.å. ìàñøòàáèðóåìîñòè.  ñâîþ î÷åðåäü, ìàñøòàáèðóåìîñòü ýòî ñâîéñòâî ñèñòåìû, ñîõðàíÿÿ ïðîïóñêíóþ ñïîñîáíîñòü, ñïðàâëÿòüñÿ ñ óâåëè÷åíèåì íàãðóçêè ïðè óâåëè÷åíèè îïðåäåëåííûõ ðåñóðñîâ ñèñòåìû. Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
  • 7. Ïðîáëåìû Ìàñøòàáèðîâàíèå PostgreSQL Îãðàíè÷åíèå ïðîïóñêíîé ñïîñîáíîñòè ÷òåíèÿ äàííûõ Îãðàíè÷åíèå ïðîïóñêíîé ñïîñîáíîñòè çàïèñè äàííûõ Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
  • 8. Ïîäõîäû Ìàñøòàáèðîâàíèå PostgreSQL Âåðòèêàëüíîå ìàñøòàáèðîâàíèå Ãîðèçîíòàëüíîå ìàñøòàáèðîâàíèå Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
  • 9. Ìåòîäû Ìàñøòàáèðîâàíèå PostgreSQL Ïàðòèöèîíèðîâàíèå(ñåêöèîíèðîâàíèå) òàáëèö Ðåïëèêàöèÿ Øàðäèíã Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
  • 10. Ïàðòèöèîíèðîâàíèå (ñåêöèîíèðîâàíèå) òàáëèö Ìàñøòàáèðîâàíèå PostgreSQL Ïàðòèöèîíèðîâàíèå (ñåêöèîíèðîâàíèå) ýòî ðàçáèåíèå áîëüøèõ ñòðóêòóð áàç äàííûõ (òàáëèöû, èíäåêñû) íà ìåíüøèå êóñî÷êè. PostgreSQL ïîääåðæèâàåò äâà êðèòåðèÿ äëÿ ñîçäàíèÿ ïàðòèöèé: Ïàðòèöèîíèðîâàíèå ïî äèàïàçîíó çíà÷åíèé (range) Ïàðòèöèîíèðîâàíèå ïî ñïèñêó çíà÷åíèé (list) Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
  • 11. Ìåòîäû äåëåíèÿ äàííûõ íà ïàðòèöèè Ìàñøòàáèðîâàíèå PostgreSQL Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
  • 12. Ïàðòèöèîíèðîâàíèå â PostgreSQL Ìàñøòàáèðîâàíèå 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 â âûñîêîíàãðóæåííûõ ïðîåêòàõ
  • 20. PgPool-II ðåïëèêàöèÿ Ìàñøòàáèðîâàíèå 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 â âûñîêîíàãðóæåííûõ ïðîåêòàõ
  • 23. Âçàèìîäåéñòâèå PgPool-II 3 ñ PostgreSQL 9 PgPool-II 3 è PostgreSQL 9 Âàñèëüåâ Î.Þ. 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 â âûñîêîíàãðóæåííûõ ïðîåêòàõ
  • 28. Çàäåðæêà ðåïëèêàöèè Slony-I PgPool-II 3 è PostgreSQL 9 vs Slony-I Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
  • 29. Íèçêîå ïàäåíèå ïðîèçâîäèòåëüíîñòè ìàñòåðà PgPool-II 3 è PostgreSQL 9 vs Slony-I Âàñèëüåâ Î.Þ. PostgreSQL â âûñîêîíàãðóæåííûõ ïðîåêòàõ
  • 30. Íèçêàÿ çàäåðæêà ðåïëèêàöèè PgPool-II 3 è PostgreSQL 9 vs Slony-I Âàñèëüåâ Î.Þ. 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 â âûñîêîíàãðóæåííûõ ïðîåêòàõ