PostgreSQL рдордзреАрд▓ рдореЛрдареНрдпрд╛ рдЦрдВрдбрд╛рдВрд╡рд░ рдПрдХ рдкреИрд╕рд╛ рд╡рд╛рдЪрд╡рд╛

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

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

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

рдореЛрдареНрдпрд╛ рдбреЗрдЯрд╛рдЪреА рдЫреЛрдЯреА рд░рд╣рд╕реНрдпреЗ

рдЬреЙрдм рдкреНрд░реЛрдлрд╛рдИрд▓рдиреБрд╕рд╛рд░ рдЖрдордЪреА рд╕реЗрд╡рд╛, рддреЗ рдирд┐рдпрдорд┐рддрдкрдгреЗ lairs рдкрд╛рд╕реВрди рддреНрдпрд╛рдЪреНрдпрд╛рдХрдбреЗ рдЙрдбрддрд╛ рдордЬрдХреВрд░ рдкреЕрдХреЗрдЬреЗрд╕.

рдЖрдгрд┐ рддреЗрд╡реНрд╣рд╛рдкрд╛рд╕реВрди рд╡реНрд╣реАрдПрд▓рдПрд╕рдЖрдп рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕рдЬреНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдЪреЗ рдЖрдореНрд╣реА рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЛ рддреЗ рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕рд╕рд╣ рдПрдХ рдмрд╣реБ-рдШрдЯрдХ рдЙрддреНрдкрд╛рджрди рдЖрд╣реЗ, рдирдВрддрд░ рдХреНрд╡реЗрд░реА рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рдХрд╛рдордЧрд┐рд░реАрд╕рд╛рдареА рдпрд╛рд╕рд╛рд░рдЦреЗ рдмрд╛рд╣реЗрд░ рдЪрд╛рд▓реВ рдЬрдЯрд┐рд▓ рдЕрд▓реНрдЧреЛрд░рд┐рджрдорд┐рдХ рддрд░реНрдХрд╛рд╕рд╣ тАЬрдорд▓реНрдЯреА-рд╡реНрд╣реЙрд▓реНрдпреВрдотАЭ. рддреНрдпрд╛рдореБрд│реЗ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдпреЗрдгрд╛рд▒реНрдпрд╛ рд▓реЙрдЧрдордзреАрд▓ рд╡рд┐рдирдВрддреАрдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡реИрдпрдХреНрддрд┐рдХ рдЙрджрд╛рд╣рд░рдгрд╛рдЪреЗ рдХрд┐рдВрд╡рд╛ рдкрд░рд┐рдгрд╛рдореА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдпреЛрдЬрдиреЗрдЪреЗ рдкреНрд░рдорд╛рдг тАЬрд╕рд░рд╛рд╕рд░реАтАЭ рдЦреВрдк рдореЛрдареЗ рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рджрд┐рд╕реВрди рдпреЗрддреЗ.

рдЖрдкрдг "рдХрдЪреНрдЪрд╛" рдбреЗрдЯрд╛ рдЬреНрдпрд╛ рдЯреЗрдмрд▓рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рддреЛ рддреНрдпрд╛рдкреИрдХреА рдПрдХрд╛рдЪреА рд░рдЪрдирд╛ рдкрд╛рд╣реВ - рдореНрд╣рдгрдЬреЗрдЪ рд▓реЙрдЧ рдПрдВрдЯреНрд░реАрдордзреАрд▓ рдореВрд│ рдордЬрдХреВрд░ рдпреЗрдереЗ рдЖрд╣реЗ:

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) рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕рд╛рдареА, рд╡рд╛рдкрд░рд╛ рдЯреЛрд╕реНрдЯ рддрдВрддреНрд░рдЬреНрдЮрд╛рди:

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

рдЦрд░рдВ рддрд░, "рд╕рдВрднрд╛рд╡реНрдп рдореЛрдареНрдпрд╛" рдлреАрд▓реНрдбрд╕рд╣ рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдмрд▓рд╕рд╛рдареА, рдЖрдкреЛрдЖрдк "рд╕реНрд▓рд╛рдЗрд╕рд┐рдВрдЧ" рд╕рд╣ рдЬреЛрдбрд▓реЗрд▓реЗ рдЯреЗрдмрд▓ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЖрд╣реЗ 2KB рд╡рд┐рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХ "рдореЛрдард╛" рд░реЗрдХреЙрд░реНрдб:

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

рдореНрд╣рдгрдЬреЗ, рдЬрд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ тАЬрдореЛрдареНрдпрд╛тАЭ рд╡реНрд╣реЕрд▓реНрдпреВрд╕рд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рд┐рд╣рд╛рдпрдЪреА рдЕрд╕реЗрд▓ data, рдирдВрддрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реЗрдХреЙрд░реНрдбрд┐рдВрдЧ рд╣реЛрдИрд▓ рдХреЗрд╡рд│ рдореБрдЦреНрдп рдЯреЗрдмрд▓ рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рдкреАрдХреЗрд╕рд╛рдареАрдЪ рдирд╛рд╣реА рддрд░ TOAST рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рдкреАрдХреЗрд╕рд╛рдареА рджреЗрдЦреАрд▓.

TOAST рдкреНрд░рднрд╛рд╡ рдХрдореА рдХрд░рдгреЗ

рдкрдг рдЖрдордЪреЗ рдмрд╣реБрддреЗрдХ рд░реЗрдХреЙрд░реНрдб рдЕрдЬреВрдирд╣реА рдЗрддрдХреЗ рдореЛрдареЗ рдирд╛рд╣реАрдд, 8KB рдордзреНрдпреЗ рдмрд╕рд╛рд╡реЗ - рдореА рдпрд╛рд╡рд░ рдкреИрд╕реЗ рдХрд╕реЗ рд╡рд╛рдЪрд╡реВ рд╢рдХрддреЛ? ..

рдЗрдереЗрдЪ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЖрдкрд▓реНрдпрд╛ рдорджрддреАрд▓рд╛ рдпреЗрддреЗ STORAGE рдЯреЗрдмрд▓ рд╕реНрддрдВрднрд╛рд╡рд░:

  • рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХреЙрдореНрдкреНрд░реЗрд╢рди рдЖрдгрд┐ рд╡реЗрдЧрд│реЗ рд╕реНрдЯреЛрд░реЗрдЬ рджреЛрдиреНрд╣реАрд▓рд╛ рдЕрдиреБрдорддреА рджреЗрддреЗ. рдпрд╛ рдорд╛рдирдХ рдкрд░реНрдпрд╛рдп рдмрд╣реБрддреЗрдХ 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 рдмрд╛рдЗрдЯреНрд╕ (рд╕рд╛рдорд╛рдиреНрдпрддрдГ 2 KB) рдкреЗрдХреНрд╖рд╛ рдореЛрдареЗ рдЕрд╕рддреЗ. рдЬреЛрдкрд░реНрдпрдВрдд рдкрдВрдХреНрддреАрдЪреЗ рдореВрд▓реНрдп TOAST_TUPLE_TARGET рдмрд╛рдЗрдЯреНрд╕рдкреЗрдХреНрд╖рд╛ рдХрдореА рд╣реЛрдд рдирд╛рд╣реА рддреЛрдкрд░реНрдпрдВрдд TOAST рдХреЛрдб рд╕рдВрдХреБрдЪрд┐рдд рдХрд░реЗрд▓ рдЖрдгрд┐/рдХрд┐рдВрд╡рд╛ рдлреАрд▓реНрдб рдореВрд▓реНрдпреЗ рд╕рд╛рд░рдгреАрдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рд╣рд▓рд╡реЗрд▓ (рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдореВрд▓реНрдп, рд╕рд╛рдорд╛рдиреНрдпрддрдГ 2 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) рдЖрдгрд┐ рдкреВрд░реНрдгрд╛рдВрдХ рдлреАрд▓реНрдб рдорд┐рдХреНрд╕ рдХреЗрд▓реЗ рддрд░ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдордзреНрдпреЗ рд╕рд╛рдорд╛рдиреНрдпрддрдГ 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛