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