рджреНрд╡рд╛рд░реЗ рдЙрдард╡рд┐рд▓реЗрд▓реЗ рдореЛрдареЗ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рд░реЗрдХреЙрд░реНрдб рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╡рд┐рд╖рдп рдЪрд╛рд▓реВ рдареЗрд╡рдгреЗ
рдЖрдореНрд╣реА рдпрд╛рдмрджреНрджрд▓ рдмреЛрд▓реВ TOAST рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдЖрдгрд┐ рдбреЗрдЯрд╛ рд╕рдВрд░реЗрдЦрди. "рд╕рд░рд╛рд╕рд░реА," рдпрд╛ рдкрджреНрдзрддреА рдЦреВрдк рд╕рдВрд╕рд╛рдзрдиреЗ рдЬрддрди рдХрд░рдгрд╛рд░ рдирд╛рд╣реАрдд, рдкрд░рдВрддреБ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛрдб рдЕрдЬрд┐рдмрд╛рдд рдмрджрд▓рд▓реНрдпрд╛рд╢рд┐рд╡рд╛рдп.
рддрдерд╛рдкрд┐, рдпрд╛ рд╕рдВрджрд░реНрднрд╛рдд рдЖрдордЪрд╛ рдЕрдиреБрднрд╡ рдЦреВрдк рдлрд▓рджрд╛рдпреА рдард░рд▓рд╛, рдХрд╛рд░рдг рдЬрд╡рд│рдЬрд╡рд│ рдХреЛрдгрддреНрдпрд╛рд╣реА рджреЗрдЦрд░реЗрдЦреАрдЪреЗ рд╕реНрдЯреЛрд░реЗрдЬ рддреНрдпрд╛рдЪреНрдпрд╛ рд╕реНрд╡рднрд╛рд╡рд╛рдиреБрд╕рд╛рд░ рдЖрд╣реЗ. рдмрд╣реБрддреЗрдХ рдлрдХреНрдд рдЬреЛрдбрд▓реЗрд▓реЗ рд░реЗрдХреЙрд░реНрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд. рдЖрдгрд┐ рдЬрд░ рддреБрдореНрд╣реА рд╡рд┐рдЪрд╛рд░ рдХрд░рдд рдЕрд╕рд╛рд▓ рдХреА рддреБрдореНрд╣реА рдбреЗрдЯрд╛рдмреЗрд╕рд▓рд╛ рдбрд┐рд╕реНрдХрд╡рд░ рд▓рд┐рд╣рд╛рдпрд▓рд╛ рдХрд╕реЗ рд╢рд┐рдХрд╡реВ рд╢рдХрддрд╛ 200MB / рд╕реЗ рдЕрд░реНрдзрд╛ рдЬрд╛рд╕реНрдд - рдХреГрдкрдпрд╛ рдорд╛рдВрдЬрд░реАрдЪреНрдпрд╛ рдЦрд╛рд▓реА.
рдореЛрдареНрдпрд╛ рдбреЗрдЯрд╛рдЪреА рдЫреЛрдЯреА рд░рд╣рд╕реНрдпреЗ
рдЬреЙрдм рдкреНрд░реЛрдлрд╛рдИрд▓рдиреБрд╕рд╛рд░
рдЖрдгрд┐ рддреЗрд╡реНрд╣рд╛рдкрд╛рд╕реВрди
рдЖрдкрдг "рдХрдЪреНрдЪрд╛" рдбреЗрдЯрд╛ рдЬреНрдпрд╛ рдЯреЗрдмрд▓рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рддреЛ рддреНрдпрд╛рдкреИрдХреА рдПрдХрд╛рдЪреА рд░рдЪрдирд╛ рдкрд╛рд╣реВ - рдореНрд╣рдгрдЬреЗрдЪ рд▓реЙрдЧ рдПрдВрдЯреНрд░реАрдордзреАрд▓ рдореВрд│ рдордЬрдХреВрд░ рдпреЗрдереЗ рдЖрд╣реЗ:
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 рдореНрд╣рдгреВрди рдУрд│рдЦрд▓реА рдЬрд╛рддреЗ...
рдЦрд░рдВ рддрд░, "рд╕рдВрднрд╛рд╡реНрдп рдореЛрдареНрдпрд╛" рдлреАрд▓реНрдбрд╕рд╣ рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдмрд▓рд╕рд╛рдареА, рдЖрдкреЛрдЖрдк
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 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);
рдкреБрдиреНрд╣рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдирдВрддрд░ рдирд╡реАрди рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдЪрд╛ рдбрд┐рд╕реНрдХ рд▓реЛрдбрд┐рдВрдЧрд╡рд░ рдХрд╕рд╛ рдкрд░рд┐рдгрд╛рдо рдЭрд╛рд▓рд╛ рддреЗ рдкрд╛рд╣реВрдпрд╛:
рд╡рд╛рдИрдЯ рдирд╛рд╣реА! рд╕рд░рд╛рд╕рд░реА рдбрд┐рд╕реНрдХрд╡рд░реАрд▓ рд░рд╛рдВрдЧ рдХрдореА рдЭрд╛рд▓реА рдЖрд╣реЗ рдЕрдВрджрд╛рдЬреЗ 1.5 рдкрдЯ, рдЖрдгрд┐ рдбрд┐рд╕реНрдХ "рд╡реНрдпрд╕реНрдд" 20 рдЯрдХреНрдХреЗ рдЖрд╣реЗ! рдкрдг рдХрджрд╛рдЪрд┐рдд рдпрд╛рдЪрд╛ CPU рд╡рд░ рдХрд╕рд╛ рддрд░реА рдкрд░рд┐рдгрд╛рдо рдЭрд╛рд▓рд╛ рдЕрд╕реЗрд▓?
рдХрд┐рдорд╛рди рддреЗ рдЖрдгрдЦреА рд╡рд╛рдИрдЯ рдЭрд╛рд▓реЗ рдирд╛рд╣реА. рддрд░реАрд╣реА, рдЕрд╕реЗ рд╡реНрд╣реЙрд▓реНрдпреВрдо рдЕрдЬреВрдирд╣реА рд╕рд░рд╛рд╕рд░реА 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
) рддреНрдпрд╛рддреАрд▓ рд░реЗрдХреЙрд░реНрдбрдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреБрд╕рд╛рд░ - рдореНрд╣рдгрдЬреЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рдорд┐рд│рддреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЧреНрд░рд╣рд┐рдд рд░реЗрдХреЙрд░реНрдбрдЪрд╛ рд╕рд░рд╛рд╕рд░реА рдЖрдХрд╛рд░:
рдЙрдгреЗ 6% рд╡реНрд╣реЙрд▓реНрдпреВрдо, рдЫрд╛рди!
рдкрд░рдВрддреБ рд╕рд░реНрд╡ рдХрд╛рд╣реА, рдЕрд░реНрдерд╛рддрдЪ, рдЗрддрдХреЗ рдЧреБрд▓рд╛рдмреА рдирд╛рд╣реА - рд╢реЗрд╡рдЯреА, рдЗрдВрдбреЗрдХреНрд╕реЗрд╕рдордзреНрдпреЗ рдЖрдореНрд╣реА рдлреАрд▓реНрдбрдЪрд╛ рдХреНрд░рдо рдмрджрд▓реВ рд╢рдХрдд рдирд╛рд╣реА, рдЖрдгрд┐ рдореНрд╣рдгреВрди "рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ" (pg_total_relation_size
) ...
...рдЕрдЬреВрдирд╣реА рдЗрдереЗ 1.5% рдмрдЪрддрдХреЛрдбрдЪреА рдПрдХ рдУрд│ рди рдмрджрд▓рддрд╛. рд╣реЛрдп, рд╣реЛрдп!
рдореА рд▓рдХреНрд╖рд╛рдд рдШреЗрддреЛ рдХреА рдлреАрд▓реНрдб рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд░реАрд▓ рдкрд░реНрдпрд╛рдп рд╣рд╛ рд╕рд░реНрд╡рд╛рдд рдЗрд╖реНрдЯрддрдо рдЖрд╣реЗ рдЕрд╕реЗ рдирд╛рд╣реА. рдХрд╛рд░рдг рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реМрдВрджрд░реНрдпрд╛рдЪреНрдпрд╛ рдХрд╛рд░рдгрд╛рд╕реНрддрд╡ рдлреАрд▓реНрдбрдЪреЗ рдХрд╛рд╣реА рдмреНрд▓реЙрдХреНрд╕ "рдлрд╛рдбрд╛рдпрдЪреЗ" рдирд╛рд╣реАрдд - рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдПрдХ рдЬреЛрдбрдкреЗ (pack, recno)
, рдЬреЗ рдпрд╛ рдЯреЗрдмрд▓рд╕рд╛рдареА PK рдЖрд╣реЗ.
рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдлреАрд▓реНрдбрдЪреА "рдХрд┐рдорд╛рди" рд╡реНрдпрд╡рд╕реНрдерд╛ рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреЗ рд╣реЗ рдЕрдЧрджреА рд╕реЛрдкреЗ "рдмреНрд░реВрдЯ рдлреЛрд░реНрд╕" рдХрд╛рд░реНрдп рдЖрд╣реЗ. рдореНрд╣рдгреВрди, рддреБрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдбреЗрдЯрд╛рдкреЗрдХреНрд╖рд╛ рддреБрдордЪреНрдпрд╛ рдбреЗрдЯрд╛рд╡рд░реВрди рдЖрдгрдЦреА рдЪрд╛рдВрдЧрд▓реЗ рдкрд░рд┐рдгрд╛рдо рдорд┐рд│рд╡реВ рд╢рдХрддрд╛ - рдкреНрд░рдпрддреНрди рдХрд░рд╛!
рд╕реНрддреНрд░реЛрдд: www.habr.com