PostgreSQL рдорд╛ рдареВрд▓реЛ рдорд╛рддреНрд░рд╛ рдорд╛ рдПрдХ рдкреИрд╕рд╛ рдмрдЪрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН

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

рд╣рд╛рдореА рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫреМрдВ TOAST рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рд░ рдбреЗрдЯрд╛ рдкрдЩреНрдХреНрддрд┐рдмрджреНрдзрддрд╛ред "рдФрд╕рддрдорд╛," рдпреА рд╡рд┐рдзрд┐рд╣рд░реВрд▓реЗ рдзреЗрд░реИ рд╕реНрд░реЛрддрд╣рд░реВ рдмрдЪрдд рдЧрд░реНрджреИрдирдиреН, рддрд░ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдХреЛрдб рдкрд░рд┐рдорд╛рд░реНрдЬрди рдирдЧрд░реА рдиреИред

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

рдареВрд▓реЛ рдбрд╛рдЯрд╛ рдХреЛ рд╕рд╛рдиреЛ рд░рд╣рд╕реНрдп

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

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

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

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

рдПрдЙрдЯрд╛ рд╕рд╛рдорд╛рдиреНрдп рдЪрд┐рдиреНрд╣ (рдкрд╣рд┐рд▓реЗ рдиреИ рд╕реЗрдХреНрд╢рди рдЧрд░рд┐рдПрдХреЛ, рдЕрд╡рд╢реНрдп рдкрдирд┐, рддреНрдпрд╕реИрд▓реЗ рдпреЛ рдЦрдгреНрдб рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реЛ), рдЬрд╣рд╛рдБ рд╕рдмреИрднрдиреНрджрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдХреБрд░рд╛ рдкрд╛рда рд╣реЛред рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рдПрдХрджрдо рдареВрд▓реЛред

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

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

рд╡рд╛рд╕реНрддрд╡рдорд╛, "рд╕рдореНрднрд╛рд╡рд┐рдд рд░реВрдкрдорд╛ рдареВрд▓реЛ" рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рднрдПрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рддрд╛рд▓рд┐рдХрд╛рдХреЛ рд▓рд╛рдЧрд┐, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ "рд╕реНрд▓рд╛рдЗрд╕рд┐рдЩ" рд╕рдВрдЧ рдПрдХ рдЬреЛрдбреА рддрд╛рд▓рд┐рдХрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ 2KB рдЦрдгреНрдбрд╣рд░реВрдорд╛ рдкреНрд░рддреНрдпреЗрдХ "рдареВрд▓реЛ" рд░реЗрдХрд░реНрдб:

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

рддреНрдпреЛ рд╣реЛ, рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ "рдареВрд▓реЛ" рдорд╛рдирдХреЛ рд╕рд╛рде рд╕реНрдЯреНрд░рд┐рдЩ рд▓реЗрдЦреНрдиреБ рдкрд░реНрдЫ data, рддреНрдпрд╕рдкрдЫрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реЗрдХрд░реНрдбрд┐рдЩ рд╣реБрдиреЗрдЫ рдореБрдЦреНрдп рддрд╛рд▓рд┐рдХрд╛ рд░ рдпрд╕рдХреЛ PK рдорд╛ рдорд╛рддреНрд░ рд╣реЛрдЗрди, рддрд░ TOAST рд░ рдпрд╕рдХреЛ PK рд▓рд╛рдИ рдкрдирд┐.

TOAST рдкреНрд░рднрд╛рд╡ рдХрдо рдЧрд░реНрджреИ

рддрд░ рд╣рд╛рдореНрд░рд╛ рдзреЗрд░реИрдЬрд╕реЛ рд░реЗрдХрд░реНрдбрд╣рд░реВ рдЕрдЭреИ рдареВрд▓рд╛ рдЫреИрдирдиреН, 8KB рдорд╛ рдлрд┐рдЯ рд╣реБрдиреБрдкрд░реНрдЫ - рдо рдХрд╕рд░реА рдпрд╕рдорд╛ рдкреИрд╕рд╛ рдмрдЪрдд рдЧрд░реНрди рд╕рдХреНрдЫреБ? ..

рдпреЛ рдЬрд╣рд╛рдБ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣рд╛рдореНрд░реЛ рд╕рд╣рд╛рдпрддрд╛рдорд╛ рдЖрдЙрдБрдЫ STORAGE рддрд╛рд▓рд┐рдХрд╛ рд╕реНрддрдореНрднрдорд╛:

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

рд╡рд╛рд╕реНрддрд╡рдорд╛, рдпреЛ рд╡рд╛рд╕реНрддрд╡рдорд╛ рд╣рд╛рдореАрд▓рд╛рдИ рдкрд╛рдардХреЛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХ рдЫ - рдпрд╕рд▓рд╛рдИ рд╕рдХреЗрд╕рдореНрдо рдХрдореНрдкреНрд░реЗрд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд░ рдпрджрд┐ рдпреЛ рдлрд┐рдЯ рдЫреИрди рднрдиреЗ, рдпрд╕рд▓рд╛рдИ TOAST рдорд╛ рд░рд╛рдЦреНрдиреБрд╣реЛрд╕реНред рдпреЛ рд╕реАрдзрд╛ рдЙрдбрд╛рди рдорд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдПрдХ рдЖрджреЗрд╢ рд╕рдВрдЧ:

ALTER TABLE rawdata_orig ALTER COLUMN data SET STORAGE MAIN;

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

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

рдЦрдгреНрдб рдкрд░рд┐рд╡рд░реНрддрди рдЕрдШрд┐:

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

рдЦрдгреНрдб рдкрд░рд┐рд╡рд░реНрддрди рдкрдЫрд┐:

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

рд╡рд╛рд╕реНрддрд╡рдорд╛, рд╣рд╛рдореА TOAST рдорд╛ 2 рдкрдЯрдХ рдХрдо рд▓реЗрдЦреНрди рдерд╛рд▓реЗ, рдЬрд╕рд▓реЗ рдбрд┐рд╕реНрдХ рдорд╛рддреНрд░ рд╣реЛрдЗрди, CPU рд▓рд╛рдИ рдкрдирд┐ рдЕрдирд▓реЛрдб рдЧрд░реНрдпреЛ:

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

PostgreSQL 11 рдорд╛ рдХрд╕рд▓реЗ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдмрд╛рдБрдЪреНрди рд╕рдХреНрдЫ

PG11 рдорд╛ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реЗрдкрдЫрд┐, рд╣рд╛рдореАрд▓реЗ "рдЯреНрдпреБрдирд┐рдЩ" TOAST рдЬрд╛рд░реА рд░рд╛рдЦреНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВ рд░ рдпреЛ рд╕рдВрд╕реНрдХрд░рдгрдмрд╛рдЯ рд╕реБрд░реБ рд╣реБрдиреЗ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдЯреНрдпреБрдирд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрд▓рдмреНрдз рднрдПрдХреЛ рдпрд╛рдж рдЧрд░реНрдпреМрдВред toast_tuple_target:

TOAST рдкреНрд░рд╢реЛрдзрди рдХреЛрдб рддрдм рдорд╛рддреНрд░ рд╕рдХреНрд░рд┐рдп рд╣реБрдиреНрдЫ рдЬрдм рддрд╛рд▓рд┐рдХрд╛рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдиреЗ рдкрдЩреНрдХреНрддрд┐рдХреЛ рдорд╛рди TOAST_TUPLE_THRESHOLD рдмрд╛рдЗрдЯ (рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ реи KB) рднрдиреНрджрд╛ рдареВрд▓реЛ рд╣реБрдиреНрдЫред TOAST рдХреЛрдбрд▓реЗ рдкрдЩреНрдХреНрддрд┐рдХреЛ рдорд╛рди TOAST_TUPLE_TARGET рдмрд╛рдЗрдЯреНрд╕ (рдЪрд░ рдорд╛рди, рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ реи KB) рднрдиреНрджрд╛ рдХрдо рдирднрдПрд╕рдореНрдо рд╡рд╛ рдЖрдХрд╛рд░ рдШрдЯрд╛рдЙрди рд╕рдХрд┐рдБрджреИрди рддрдмрд╕рдореНрдо рддрд╛рд▓рд┐рдХрд╛рдмрд╛рдЯ рдлрд┐рд▓реНрдб рдорд╛рдирд╣рд░реВрд▓рд╛рдИ рдХрдореНрдкреНрд░реЗрд╕ рд░/рд╡рд╛ рд╕рд╛рд░реНрдиреЗрдЫред

рд╣рд╛рдореАрд▓реЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВ рдХрд┐ рд╣рд╛рдореАрд╕рдБрдЧ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рд╣реБрдиреЗ рдбреЗрдЯрд╛ рдпрд╛ рдд "рдзреЗрд░реИ рдЫреЛрдЯреЛ" рд╡рд╛ "рдзреЗрд░реИ рд▓рд╛рдореЛ" рд╣реБрдиреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓реЗ рдЖрдлреВрд▓рд╛рдИ рдиреНрдпреВрдирддрдо рд╕рдореНрднрд╛рд╡рд┐рдд рдорд╛рдирдорд╛ рд╕реАрдорд┐рдд рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВ:

ALTER TABLE rawplan_orig SET (toast_tuple_target = 128);

рд╣реЗрд░реМрдВ рдХрд╕рд░реА рдирдпрд╛рдБ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрд▓реЗ рдкреБрди: рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкрдЫрд┐ рдбрд┐рд╕реНрдХ рд▓реЛрдбрд┐рдЩрд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрдпреЛ:

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

PostgreSQL рдорд╛ рдареВрд▓реЛ рдорд╛рддреНрд░рд╛ рдорд╛ рдПрдХ рдкреИрд╕рд╛ рдмрдЪрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН
рдХрдорд╕реЗрдХрдо рдпреЛ рдХреБрдиреИ рдирд░рд╛рдореНрд░реЛ рднрдПрдиред рдпрджреНрдпрдкрд┐, рдпрджрд┐ рддреНрдпрд╕реНрддрд╛ рднреЛрд▓реНрдпреБрдорд╣рд░реВрд▓реЗ рдЕрдЭреИ рдкрдирд┐ рдФрд╕рдд CPU рд▓реЛрдб рдЙрдЪреНрдЪ рдЧрд░реНрди рд╕рдХреНрджреИрдирдиреН рднрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрди рдЧрд╛рд╣реНрд░реЛ рдЫ 5%.

рд╕рд░реНрддрд╣рд░реВрдХреЛ рд╕реНрдерд╛рди рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реЗрд░, рдпреЛрдЧ ... рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреНрдЫ!

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

рдХрд╛рд░рдгрд▓реЗ рдЧрд░реНрджрд╛ рдбрд╛рдЯрд╛ рдкрдЩреНрдХреНрддрд┐рдмрджреНрдзрддрд╛ рдпреЛ рд╕реАрдзрд╛ рдЕрдЧрд╛рдбрд┐ рдЫ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рднреЛрд▓реНрдпреБрдорд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрдЫ:

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

рдкрдЩреНрдХреНрддрд┐рдмрджреНрдзрддрд╛рдХреЛ рдХрд╛рд░рдг, рддрд╛рд▓рд┐рдХрд╛ рдкрдЩреНрдХреНрддрд┐рдХреЛ рдЖрдХрд╛рд░ рдХреНрд╖реЗрддреНрд░рд╣рд░реВрдХреЛ рдХреНрд░рдордорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдпреЛ рдкреНрд░рднрд╛рд╡ рдзреЗрд░реИ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЫреИрди, рддрд░ рдХреЗрд╣рд┐ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдпреЛ рдЖрдХрд╛рд░ рдорд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡реГрджреНрдзрд┐ рд╣реБрди рд╕рдХреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ char(1) рд░ integer рдлрд┐рд▓реНрдбрд╣рд░реВ рдорд┐рд▓рд╛рдЙрдиреБрднрдпреЛ рднрдиреЗ, рддреНрдпрд╣рд╛рдБ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди