PostgreSQL рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдПрдХ рдкреИрд╕рд╛ рдмрдЪрд╛рдПрдВ

рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдП рдЧрдП рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╖рдп рдХреЛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рд╡рд┐рднрд╛рдЬрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд┐рдЫрд▓рд╛ рд▓реЗрдЦ, рдЗрд╕рдореЗрдВ рд╣рдо рдЙрди рддрд░реАрдХреЛрдВ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдирд╕реЗ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреЗ "рднреМрддрд┐рдХ" рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░реЗрдВ PostgreSQL рдореЗрдВ, рдФрд░ рд╕рд░реНрд╡рд░ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдЙрдирдХрд╛ рдкреНрд░рднрд╛рд╡ред

рд╣рдо рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдЯреЛрд╕реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рдбреЗрдЯрд╛ рд╕рдВрд░реЗрдЦрдг. "рдФрд╕рддрди," рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдирд╣реАрдВ рдмрдЪрд╛рдПрдВрдЧреА, рд▓реЗрдХрд┐рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ред

PostgreSQL рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдПрдХ рдкреИрд╕рд╛ рдмрдЪрд╛рдПрдВ
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣рдорд╛рд░рд╛ рдЕрдиреБрднрд╡ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реБрдЖ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рдкреНрд░рдХреГрддрд┐ рд╕реЗ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдирд┐рдЧрд░рд╛рдиреА рдХрд╛ рднрдВрдбрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ рдЕрдзрд┐рдХрддрд░ рдХреЗрд╡рд▓ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ. рдФрд░ рдпрджрд┐ рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рд▓рд┐рдЦрдирд╛ рдХреИрд╕реЗ рд╕рд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ 200MB / s рдЖрдзрд╛ рдЬрд┐рддрдирд╛ - рдХреГрдкрдпрд╛ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗред

рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рдХреЗ рдЫреЛрдЯреЗ рд░рд╣рд╕реНрдп

рдЬреЙрдм рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛, рд╡реЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдорд╛рдВрдж рд╕реЗ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЙрдбрд╝рддреЗ рд╣реИрдВ рдкрд╛рда рд╕рдВрдХреБрд▓.

рдФрд░ рддрдм рд╕реЗ рд╡реАрдПрд▓рдПрд╕рдЖрдИ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕рдЬрд┐рд╕рдХрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣рдо рдореЙрдирд┐рдЯрд░ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдмрд╣реБ-рдШрдЯрдХ рдЙрддреНрдкрд╛рдж рд╣реИ, рдлрд┐рд░ рдХреНрд╡реЗрд░реАрдЬрд╝ рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдЗрд╕ рддрд░рд╣ рдмрдиреЛ рдЬрдЯрд┐рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдердо рддрд░реНрдХ рдХреЗ рд╕рд╛рде "рдорд▓реНрдЯреА-рд╡реЙрд▓реНрдпреВрдо"ред. рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЙрдЧ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЙрджрд╛рд╣рд░рдг рдпрд╛ рдкрд░рд┐рдгрд╛рдореА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЬрдирд╛ рдХреА рдорд╛рддреНрд░рд╛ "рдФрд╕рддрди" рдХрд╛рдлреА рдмрдбрд╝реА рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдЖрдЗрдП рдЙрди рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджреЗрдЦреЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо "рдХрдЪреНрдЪрд╛" рдбреЗрдЯрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ - рдпрд╛рдиреА, рдпрд╣рд╛рдВ рд▓реЙрдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕реЗ рдореВрд▓ рдкрд╛рда рд╣реИ:

CREATE TABLE rawdata_orig(
  pack -- PK
    uuid NOT NULL
, recno -- PK
    smallint NOT NULL
, dt -- ╨║╨╗╤О╤З ╤Б╨╡╨║╤Ж╨╕╨╕
    date
, data -- ╤Б╨░╨╝╨╛╨╡ ╨│╨╗╨░╨▓╨╜╨╛╨╡
    text
, PRIMARY KEY(pack, recno)
);

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд┐рд╣реНрди (рдмреЗрд╢рдХ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦрдВрдбрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдЦрдВрдб рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ), рдЬрд╣рд╛рдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬ рдкрд╛рда рд╣реИред рдХрднреА-рдХрднреА рдХрд╛рдлрд╝реА рднрд╛рд░реАред

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдкреАрдЬреА рдореЗрдВ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ "рднреМрддрд┐рдХ" рдЖрдХрд╛рд░ рдбреЗрдЯрд╛ рдХреЗ рдПрдХ рдкреГрд╖реНрда рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "рддрд╛рд░реНрдХрд┐рдХ" рдЖрдХрд╛рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдорд╛рдорд▓рд╛ рд╣реИред рдХрд┐рд╕реА рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╡реЙрд▓реНрдпреВрдореЗрдЯреНрд░рд┐рдХ рдорд╛рди (varchar/text/bytea) рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЯреЛрд╕реНрдЯ рддрдХрдиреАрдХ:

PostgreSQL рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреГрд╖реНрда рдЖрдХрд╛рд░ (рдЖрдорддреМрд░ рдкрд░ 8 KB) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЯреБрдкрд▓реНрд╕ рдХреЛ рдХрдИ рдкреГрд╖реНрдареЛрдВ рддрдХ рдлреИрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдмрд╣реБрдд рдмрдбрд╝реЗ рдлрд╝реАрд▓реНрдб рдорд╛рдиреЛрдВ рдХреЛ рд╕реАрдзреЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрдбрд╝реЗ рдлрд╝реАрд▓реНрдб рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░/рдпрд╛ рдХрдИ рднреМрддрд┐рдХ рд░реЗрдЦрд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд░реНрд╡рд░ рдХреЛрдб рдкрд░ рдЗрд╕рдХрд╛ рдмрд╣реБрдд рдХрдо рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдЯреЛрд╕реНрдЯ рдХреЗ рдирд╛рдо рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ...

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, "рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ" рдлрд╝реАрд▓реНрдб рд╡рд╛рд▓реА рдкреНрд░рддреНрдпреЗрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ "рд╕реНрд▓рд╛рдЗрд╕рд┐рдВрдЧ" рдХреЗ рд╕рд╛рде рдПрдХ рдпреБрдЧреНрдорд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ 2KB рдЦрдВрдбреЛрдВ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ "рдмрдбрд╝рд╛" рд░рд┐рдХреЙрд░реНрдб:

TOAST(
  chunk_id
    integer
, chunk_seq
    integer
, chunk_data
    bytea
, PRIMARY KEY(chunk_id, chunk_seq)
);

рдпрд╛рдиреА, рдЕрдЧрд░ рд╣рдореЗрдВ "рдмрдбрд╝реЗ" рдорд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рд┐рдЦрдиреА рд╣реИ data, рддрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╣реЛрдЧреА рди рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдЯреЗрдмрд▓ рдФрд░ рдЙрд╕рдХреЗ PK рдХреЛ, рдмрд▓реНрдХрд┐ TOAST рдФрд░ рдЙрд╕рдХреЗ PK рдХреЛ рднреА.

рдЯреЛрд╕реНрдЯ рдкреНрд░рднрд╛рд╡ рдХреЛ рдХрдо рдХрд░рдирд╛

рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд░рд┐рдХреЙрд░реНрдб рдЕрднреА рднреА рдЙрддрдиреЗ рдмрдбрд╝реЗ рдирд╣реАрдВ рд╣реИрдВ, 8KB рдореЗрдВ рдлрд╝рд┐рдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдореИрдВ рдЗрд╕ рдкрд░ рдкреИрд╕реЗ рдХреИрд╕реЗ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реВрдБ?

рдпрд╣реАрдВ рдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддреА рд╣реИ STORAGE рдЯреЗрдмрд▓ рдХреЙрд▓рдо рдкрд░:

  • рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕рдВрдкреАрдбрд╝рди рдФрд░ рдЕрд▓рдЧ рднрдВрдбрд╛рд░рдг рджреЛрдиреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдорд╛рдирдХ рд╡рд┐рдХрд▓реНрдк рдЕрдзрд┐рдХрд╛рдВрд╢ TOAST рдЕрдиреБрд░реВрдк рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдкрд╣рд▓реЗ рд╕рдВрдкреАрдбрд╝рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдпрджрд┐ рдкрдВрдХреНрддрд┐ рдЕрднреА рднреА рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИ рддреЛ рдЗрд╕реЗ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдмрд╛рд╣рд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
  • рдореБрдЦреНрдп рд╕рдВрдкреАрдбрд╝рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрд▓рдЧ рднрдВрдбрд╛рд░рдг рдХреА рдирд╣реАрдВред (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдРрд╕реЗ рд╕реНрддрдВрднреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдЕрд▓рдЧ рднрдВрдбрд╛рд░рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рдЕрдВрддрд┐рдо рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрдм рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рддрд╛рдХрд┐ рд╡рд╣ рдкреГрд╖реНрда рдкрд░ рдлрд╝рд┐рдЯ рд╣реЛ рдЬрд╛рдПред)

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдкрд╛рда рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рд┐рдП - рдЗрд╕реЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░реЗрдВ, рдФрд░ рдпрджрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЯреЛрд╕реНрдЯ рдореЗрдВ рдбрд╛рд▓ рджреЗрдВ. рдпрд╣ рд╕реАрдзреЗ рдПрдХ рдЖрджреЗрд╢ рд╕реЗ рддреБрд░рдВрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

ALTER TABLE rawdata_orig ALTER COLUMN data SET STORAGE MAIN;

рдкреНрд░рднрд╛рд╡ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреИрд╕реЗ рдХрд░реЗрдВ

рдЪреВрдБрдХрд┐ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рд╣рд░ рджрд┐рди рдмрджрд▓рддрд╛ рд╣реИ, рд╣рдо рдирд┐рд░рдкреЗрдХреНрд╖ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдмрд▓реНрдХрд┐ рд╕рд╛рдкреЗрдХреНрд╖ рд░реВрдк рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЫреЛрдЯрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдордиреЗ рдЗрд╕реЗ рдЯреЛрд╕реНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ - рдЗрддрдирд╛ рдмреЗрд╣рддрд░ред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдПрдХ рдЦрддрд░рд╛ рд╣реИ - рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░рд┐рдХреЙрд░реНрдб рдХреА "рднреМрддрд┐рдХ" рдорд╛рддреНрд░рд╛ рдЬрд┐рддрдиреА рдмрдбрд╝реА рд╣реЛрдЧреА, рд╕реВрдЪрдХрд╛рдВрдХ рдЙрддрдирд╛ рд╣реА "рд╡реНрдпрд╛рдкрдХ" рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рдЕрдзрд┐рдХ рдкреГрд╖реНрдареЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдиреБрднрд╛рдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкрд╣рд▓реЗ:

heap  = 37GB (39%)
TOAST = 54GB (57%)
PK    =  4GB ( 4%)

рдЕрдиреБрднрд╛рдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж:

heap  = 37GB (67%)
TOAST = 16GB (29%)
PK    =  2GB ( 4%)

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо TOAST рдХреЛ 2 рдмрд╛рд░ рдХрдо рдмрд╛рд░ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдиреЗ рди рдХреЗрд╡рд▓ рдбрд┐рд╕реНрдХ, рдмрд▓реНрдХрд┐ рд╕реАрдкреАрдпреВ рдХреЛ рднреА рдЕрдирд▓реЛрдб рдХрд┐рдпрд╛:

PostgreSQL рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдПрдХ рдкреИрд╕рд╛ рдмрдЪрд╛рдПрдВ
PostgreSQL рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдПрдХ рдкреИрд╕рд╛ рдмрдЪрд╛рдПрдВ
рдореИрдВ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ рдХрд┐ рд╣рдо рдбрд┐рд╕реНрдХ рдХреЛ "рдкрдврд╝рдиреЗ" рдореЗрдВ рднреА рдЫреЛрдЯреЗ рд╣реЛ рдЧрдП рд╣реИрдВ, рди рдХрд┐ рдХреЗрд╡рд▓ "рд▓рд┐рдЦрдиреЗ" рдореЗрдВ - рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдбрд╛рд▓рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЙрд╕рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдкреЗрдбрд╝ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рднреА "рдкрдврд╝рдирд╛" рдкрдбрд╝рддрд╛ рд╣реИред рдЙрдирдореЗрдВ рднрд╡рд┐рд╖реНрдп рдХреА рд╕реНрдерд┐рддрд┐.

PostgreSQL 11 рдкрд░ рдХреМрди рдЕрдЪреНрдЫреЗ рд╕реЗ рд░рд╣ рд╕рдХрддрд╛ рд╣реИ

рдкреАрдЬреА11 рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдЯреЛрд╕реНрдЯ рдХреЛ "рдЯреНрдпреВрдирд┐рдВрдЧ" рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рджреЗрдЦрд╛ рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╢реБрд░реВ рд╣реЛ рд░рд╣рд╛ рд╣реИ toast_tuple_target:

TOAST рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛрдб рдХреЗрд╡рд▓ рддрднреА рд╕рдХреНрд░рд┐рдп рд╣реЛрддрд╛ рд╣реИ рдЬрдм рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдкрдВрдХреНрддрд┐ рдорд╛рди TOAST_TUPLE_THRESHOLD рдмрд╛рдЗрдЯреНрд╕ (рдЖрдорддреМрд░ рдкрд░ 2 KB) рд╕реЗ рдмрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред TOAST рдХреЛрдб рддрдм рддрдХ рдлрд╝реАрд▓реНрдб рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдФрд░/рдпрд╛ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдкрдВрдХреНрддрд┐ рдорд╛рди TOAST_TUPLE_TARGET рдмрд╛рдЗрдЯреНрд╕ (рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдорд╛рди, рдЖрдорддреМрд░ рдкрд░ 2 KB) рд╕реЗ рдХрдо рди рд╣реЛ рдЬрд╛рдП рдпрд╛ рдЖрдХрд╛рд░ рдХрдо рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рд╣рдордиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдорддреМрд░ рдкрд░ рдЬреЛ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ рд╡рд╣ рдпрд╛ рддреЛ "рдмрд╣реБрдд рдЫреЛрдЯрд╛" рдпрд╛ "рдмрд╣реБрдд рд▓рдВрдмрд╛" рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЦреБрдж рдХреЛ рдиреНрдпреВрдирддрдо рд╕рдВрднрд╡ рдореВрд▓реНрдп рддрдХ рд╕реАрдорд┐рдд рд░рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛:

ALTER TABLE rawplan_orig SET (toast_tuple_target = 128);

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдкреБрдирд░реНрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдмрд╛рдж рдирдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдиреЗ рдбрд┐рд╕реНрдХ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛:

PostgreSQL рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдПрдХ рдкреИрд╕рд╛ рдмрдЪрд╛рдПрдВ
рдЗрддрдирд╛ рдЦрд░рд╛рдм рднреА рдирд╣реАрдВ! рдФрд╕рдд рдбрд┐рд╕реНрдХ рдкрд░ рдХрддрд╛рд░ рдХрдо рд╣реЛ рдЧрдИ рд╣реИ рд▓рдЧрднрдЧ 1.5 рдЧреБрдирд╛, рдФрд░ рдбрд┐рд╕реНрдХ 20 рдкреНрд░рддрд┐рд╢рдд "рд╡реНрдпрд╕реНрдд" рд╣реИ! рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЗрд╕рд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рд╕реАрдкреАрдпреВ рдкрд░ рдЕрд╕рд░ рдкрдбрд╝рд╛?

PostgreSQL рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдПрдХ рдкреИрд╕рд╛ рдмрдЪрд╛рдПрдВ
рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдФрд░ рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реБрдЖ. рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЖрдВрдХрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрддрдиреА рдорд╛рддреНрд░рд╛ рднреА рдФрд╕рдд рд╕реАрдкреАрдпреВ рд▓реЛрдб рдХреЛ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдмрдврд╝рд╛ рд╕рдХрддреА рд╣реИ 5%.

рдкрджреЛрдВ рдХреЗ рд╕реНрдерд╛рди рдмрджрд▓рдиреЗ рд╕реЗ рдпреЛрдЧ... рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ!

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдПрдХ рдкреИрд╕рд╛ рдПрдХ рд░реВрдмрд▓ рдмрдЪрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рднрдВрдбрд╛рд░рдг рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ 10рдЯреАрдмреА/рдорд╛рд╣ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЕрдиреБрдХреВрд▓рди рднреА рдЕрдЪреНрдЫрд╛ рд▓рд╛рдн рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреА рднреМрддрд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдЕрдВрджрд░ "рд╕реНрдЯреИрдХреНрдб" рдлрд╝реАрд▓реНрдб рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдмрд▓.

рдХреНрдпреЛрдВрдХрд┐ рдХреА рд╡рдЬрд╣ рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд░реЗрдЦрдг рдпрд╣ рд╕реАрдзрд╛-рд╕реАрдзрд╛ рд╣реИ рдкрд░рд┐рдгрд╛рдореА рдорд╛рддреНрд░рд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ:

рдХрдИ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдорд╢реАрди рд╢рдмреНрдж рд╕реАрдорд╛рдУрдВ рдкрд░ рдбреЗрдЯрд╛ рд╕рдВрд░реЗрдЦрдг рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 32-рдмрд┐рдЯ x86 рд╕рд┐рд╕реНрдЯрдо рдкрд░, рдкреВрд░реНрдгрд╛рдВрдХ (рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░, 4 рдмрд╛рдЗрдЯреНрд╕) рдХреЛ 4-рдмрд╛рдЗрдЯ рд╢рдмреНрдж рд╕реАрдорд╛ рдкрд░ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐ рд╕рдЯреАрдХ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╕рдВрдЦреНрдпрд╛рдПрдВ рджреЛрдЧреБрдиреА рд╣реЛ рдЬрд╛рдПрдВрдЧреА (рдбрдмрд▓ рд╕рдЯреАрдХ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ, 8 рдмрд╛рдЗрдЯреНрд╕)ред рдФрд░ 64-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░, рджреЛрд╣рд░реЗ рдорд╛рдиреЛрдВ рдХреЛ 8-рдмрд╛рдЗрдЯ рд╢рдмреНрдж рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЕрд╕рдВрдЧрддрд┐ рдХрд╛ рдПрдХ рдФрд░ рдХрд╛рд░рдг рд╣реИред

рд╕рдВрд░реЗрдЦрдг рдХреЗ рдХрд╛рд░рдг, рддрд╛рд▓рд┐рдХрд╛ рдкрдВрдХреНрддрд┐ рдХрд╛ рдЖрдХрд╛рд░ рдлрд╝реАрд▓реНрдб рдХреЗ рдХреНрд░рдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдкреНрд░рднрд╛рд╡ рдмрд╣реБрдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕рд╕реЗ рдЖрдХрд╛рд░ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡реГрджреНрдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЪрд╛рд░(1) рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХ рдлрд╝реАрд▓реНрдб рдХреЛ рдорд┐рд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдХреЗ рдмреАрдЪ рдЖрдо рддреМрд░ рдкрд░ 3 рдмрд╛рдЗрдЯреНрд╕ рдмрд░реНрдмрд╛рдж рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рдЖрдЗрдП рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдореЙрдбрд▓ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ:

SELECT pg_column_size(ROW(
  '0000-0000-0000-0000-0000-0000-0000-0000'::uuid
, 0::smallint
, '2019-01-01'::date
));
-- 48 ╨▒╨░╨╣╤В

SELECT pg_column_size(ROW(
  '2019-01-01'::date
, '0000-0000-0000-0000-0000-0000-0000-0000'::uuid
, 0::smallint
));
-- 46 ╨▒╨░╨╣╤В

рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдЗрдЯреНрд╕ рдХрд╣рд╛рдБ рд╕реЗ рдЖрдИрдВ? рдпрд╣ рдЖрд╕рд╛рди рд╣реИ - 2-рдмрд╛рдЗрдЯ рд╕реНрдорд╛рд▓рд┐рдВрдЯ рдХреЛ 4-рдмрд╛рдЗрдЯ рд╕реАрдорд╛ рдкрд░ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЕрдЧрд▓реЗ рдлрд╝реАрд▓реНрдб рд╕реЗ рдкрд╣рд▓реЗ, рдФрд░ рдЬрдм рдпрд╣ рдЖрдЦрд┐рд░реА рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ рдФрд░ рдЖрдк рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдлрд╝реАрд▓реНрдб рдХреЛ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдХрд┐рд╕реА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдкрд░ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ, рдЬрд┐рд╕рдХрд╛ рджреИрдирд┐рдХ рдЕрдиреБрднрд╛рдЧ 10-15GB рдХрд╛ рд╣реИред

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрд░рдЪрдирд╛:

CREATE TABLE public.plan_20190220
(
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  pack uuid NOT NULL,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  recno smallint NOT NULL,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  host uuid,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  ts timestamp with time zone,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  exectime numeric(32,3),
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  duration numeric(32,3),
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  bufint bigint,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  bufmem bigint,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  bufdsk bigint,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  apn uuid,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  ptr uuid,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  dt date,
  CONSTRAINT plan_20190220_pkey PRIMARY KEY (pack, recno),
  CONSTRAINT chck_ptr CHECK (ptr IS NOT NULL),
  CONSTRAINT plan_20190220_dt_check CHECK (dt = '2019-02-20'::date)
)
INHERITS (public.plan)

рдХреЙрд▓рдо рдХреНрд░рдо рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЕрдиреБрднрд╛рдЧ - рдмрд┐рд▓реНрдХреБрд▓ рдлрд╝реАрд▓реНрдб рд╕рдорд╛рди, рдмрд╕ рдХреНрд░рдо рднрд┐рдиреНрди:

CREATE TABLE public.plan_20190221
(
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  dt date NOT NULL,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  ts timestamp with time zone,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  pack uuid NOT NULL,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  recno smallint NOT NULL,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  host uuid,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  apn uuid,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  ptr uuid,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  bufint bigint,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  bufmem bigint,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  bufdsk bigint,
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  exectime numeric(32,3),
-- ╨г╨╜╨░╤Б╨╗╨╡╨┤╨╛╨▓╨░╨╜╨░ from table plan:  duration numeric(32,3),
  CONSTRAINT plan_20190221_pkey PRIMARY KEY (pack, recno),
  CONSTRAINT chck_ptr CHECK (ptr IS NOT NULL),
  CONSTRAINT plan_20190221_dt_check CHECK (dt = '2019-02-21'::date)
)
INHERITS (public.plan)

рдЕрдиреБрднрд╛рдЧ рдХреА рдХреБрд▓ рдорд╛рддреНрд░рд╛ "рддрдереНрдпреЛрдВ" рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдмрд╛рд╣рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рддреЛ рдЖрдЗрдП рдвреЗрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ (pg_relation_size) рдЗрд╕рдореЗрдВ рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ - рдЕрд░реНрдерд╛рдд рд╣рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЧреНрд░рд╣реАрдд рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдФрд╕рдд рдЖрдХрд╛рд░:

PostgreSQL рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдПрдХ рдкреИрд╕рд╛ рдмрдЪрд╛рдПрдВ
рдорд╛рдЗрдирд╕ 6% рд╡реЙрд▓реНрдпреВрдо, рдорд╣рд╛рди!

рд▓реЗрдХрд┐рди рдирд┐рдГрд╕рдВрджреЗрд╣, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдЧреБрд▓рд╛рдмреА рдирд╣реАрдВ рд╣реИ - рдЖрдЦрд╝рд┐рд░рдХрд╛рд░, рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдореЗрдВ рд╣рдо рдлрд╝реАрд▓реНрдб рдХрд╛ рдХреНрд░рдо рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ, рдФрд░ рдЗрд╕рд▓рд┐рдП "рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░" (pg_total_relation_size) ...

PostgreSQL рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдПрдХ рдкреИрд╕рд╛ рдмрдЪрд╛рдПрдВ
...рдЕрднреА рднреА рдпрд╣рд╛рдБ рд╣реИ 1.5% рдХреА рдмрдЪрддрдХреЛрдб рдХреА рдПрдХ рднреА рдкрдВрдХреНрддрд┐ рдмрджрд▓реЗ рдмрд┐рдирд╛ред рд╣рд╛рдВ рд╣рд╛рдВ!

PostgreSQL рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдПрдХ рдкреИрд╕рд╛ рдмрдЪрд╛рдПрдВ

рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдлрд╝реАрд▓реНрдб рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдХрд▓реНрдк рддрдереНрдп рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╕реМрдВрджрд░реНрдп рд╕рдВрдмрдВрдзреА рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдлрд╝реАрд▓реНрдб рдХреЗ рдХреБрдЫ рдмреНрд▓реЙрдХреЛрдВ рдХреЛ "рдлрд╛рдбрд╝рдирд╛" рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдпреБрдЧрд▓ (pack, recno), рдЬреЛ рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП PK рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдлрд╝реАрд▓реНрдб рдХреА "рдиреНрдпреВрдирддрдо" рд╡реНрдпрд╡рд╕реНрдерд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ "рдХреНрд░реВрд░ рдмрд▓" рдХрд╛рд░реНрдп рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд╕реЗ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рд╕реЗ рднреА рдмреЗрд╣рддрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдБ!

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ