MVCC -6ред рд╕рдлрд╛рдИ

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

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

рд╕рд╛рдорд╛рдиреНрдп рд╕рдлрд╛рдИ (рд╡реИрдХреНрдпреВрдо)


рд╕рдлрд╛рдИ рдХреНрдпрд╛ рдХрд░рддреА рд╣реИ


рдЗрдВрдЯреНрд░рд╛-рдкреЗрдЬ рд╕рдлрд╛рдИ рддреНрд╡рд░рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рдЕрдВрд╢ рдХреЛ рдореБрдХреНрдд рдХрд░рддреА рд╣реИред рдпрд╣ рдПрдХ рд╣реА рд╕рд╛рд░рдгреАрдмрджреНрдз рдкреГрд╖реНрда рдХреЗ рднреАрддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдореБрдЦреНрдп, "рд╕рд╛рдорд╛рдиреНрдп" рд╕рдлрд╛рдИ VACUUM рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рд╣рдо рдЗрд╕реЗ рдмрд╕ рд╕рдлрд╛рдИ рдХрд╣реЗрдВрдЧреЗ (рдФрд░ рд╣рдо рдЕрд▓рдЧ рд╕реЗ рдСрдЯреЛ-рдХреНрд▓реАрдирд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ)ред

рддреЛ, рдХреНрд▓реАрдирдЕрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯреЗрдмрд▓ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рди рдХреЗрд╡рд▓ рддрд╛рд░реЛрдВ рдХреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рднреА рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рд╕реЗ рднреА рдЙрдиреНрд╣реЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред

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

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

рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдореБрдХреНрдд рд╕реНрдерд╛рди рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдХреНрдд рд╕реНрдерд╛рди рдХрд╛ рдирдХреНрд╢рд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВ:

=> CREATE TABLE vac( id serial, s char(100) ) WITH (autovacuum_enabled = off); => CREATE INDEX vac_s ON vac(s); => INSERT INTO vac(s) VALUES ('A'); => UPDATE vac SET s = 'B'; => UPDATE vac SET s = 'C'; 

рдСрдЯреЛрд╡реИрдХреНрдпреВрдо_ рд╕рдХреНрд╖рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ , рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдлрд╛рдИ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ ред рд╣рдо рдЕрдЧрд▓реА рдмрд╛рд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП - рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП - рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдлрд╛рдИ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдЕрдм рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрдВрдХреНрддрд┐ рдХреЗ рддреАрди рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ:

 => SELECT * FROM heap_page('vac',0); 
  ctid | state | xmin | xmax | hhu | hot | t_ctid -------+--------+----------+----------+-----+-----+-------- (0,1) | normal | 4000 (c) | 4001 (c) | | | (0,2) (0,2) | normal | 4001 (c) | 4002 | | | (0,3) (0,3) | normal | 4002 | 0 (a) | | | (0,3) (3 rows) 

 => SELECT * FROM index_page('vac_s',1); 
  itemoffset | ctid ------------+------- 1 | (0,1) 2 | (0,2) 3 | (0,3) (3 rows) 

рд╕рдлрд╛рдИ рдХреЗ рдмрд╛рдж, "рдореГрдд" рд╕рдВрд╕реНрдХрд░рдг рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╣реЛрддрд╛ рд╣реИ, рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХред рдФрд░ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рднреА рдПрдХ рд▓рд┐рдВрдХ рдмрдЪрд╛ рд╣реИ:

 => VACUUM vac; => SELECT * FROM heap_page('vac',0); 
  ctid | state | xmin | xmax | hhu | hot | t_ctid -------+--------+----------+-------+-----+-----+-------- (0,1) | unused | | | | | (0,2) | unused | | | | | (0,3) | normal | 4002 (c) | 0 (a) | | | (0,3) (3 rows) 
 => SELECT * FROM index_page('vac_s',1); 
  itemoffset | ctid ------------+------- 1 | (0,3) (1 row) 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд╣рд▓реЗ рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЕрдкреНрд░рдпреБрдХреНрдд рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реБрдИ, рдФрд░ рдореГрдд рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрдВрдЯреНрд░рд╛-рдкреЗрдЬ рд╕рдлрд╛рдИ рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛ред

рдФрд░ рдлрд┐рд░ рд▓реЗрди-рджреЗрди рдХреНрд╖рд┐рддрд┐рдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


PostgreSQL рдХреИрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ "рдореГрдд" рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЬрдм рд╣рдордиреЗ рдбреЗрдЯрд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рддреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд▓реЗрди-рджреЗрди рдХреНрд╖рд┐рддрд┐рдЬ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╖рдп рд╣реИ рдХрд┐ рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдирд╛ рдХреЛрдИ рдкрд╛рдк рдирд╣реАрдВ рд╣реИред

рдЪрд▓реЛ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╡ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

 => TRUNCATE vac; => INSERT INTO vac(s) VALUES ('A'); => UPDATE vac SET s = 'B'; 

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

 | => BEGIN; | => SELECT s FROM t FOR UPDATE; 
 | s | ----- | FOO | BAR | (2 rows) 

 => UPDATE vac SET s = 'C'; 

рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рддреАрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ, рдФрд░ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рддреАрди рд▓рд┐рдВрдХ рд╣реИрдВред рд╕рдлрд╛рдИ рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?

 => VACUUM vac; => SELECT * FROM heap_page('vac',0); 
  ctid | state | xmin | xmax | hhu | hot | t_ctid -------+--------+----------+----------+-----+-----+-------- (0,1) | unused | | | | | (0,2) | normal | 4005 (c) | 4007 (c) | | | (0,3) (0,3) | normal | 4007 (c) | 0 (a) | | | (0,3) (3 rows) 
 => SELECT * FROM index_page('vac_s',1); 
  itemoffset | ctid ------------+------- 1 | (0,2) 2 | (0,3) (2 rows) 

рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрдВрдХреНрддрд┐ рдХреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдг рдмрдЪреЗ рд╣реИрдВ: рд╕рдлрд╛рдИ рдиреЗ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг (0.2) рдЕрднреА рддрдХ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд╛рд░рдг, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдбреЗрдЯрд╛рдмреЗрд╕ рд▓реЗрдирджреЗрди рдХреНрд╖рд┐рддрд┐рдЬ рдореЗрдВ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рдЕрдкреВрд░реНрдг рд▓реЗрдирджреЗрди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 | => SELECT backend_xmin FROM pg_stat_activity WHERE pid = pg_backend_pid(); 
 | backend_xmin | -------------- | 4006 | (1 row) 

рдЖрдк рд╕рдлрд╛рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ

 => VACUUM VERBOSE vac; 
 INFO: vacuuming "public.vac" INFO: index "vac_s" now contains 2 row versions in 2 pages DETAIL: 0 index row versions were removed. 0 index pages have been deleted, 0 are currently reusable. CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s. INFO: "vac": found 0 removable, 2 nonremovable row versions in 1 out of 1 pages DETAIL: 1 dead row versions cannot be removed yet, oldest xmin: 4006 There were 1 unused item pointers. Skipped 0 pages due to buffer pins, 0 frozen pages. 0 pages are entirely empty. CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s. VACUUM 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ:

  • 2 рдЧреИрд░-рдкрдВрдХреНрддрд┐рдмрджреНрдз рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг - 2 рд╕рдВрд╕реНрдХрд░рдг рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрд╛рдП рдЧрдП рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ,
  • 1 рдореГрдд рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг рдЕрднреА рддрдХ рдирд╣реАрдВ рдирд┐рдХрд╛рд▓реЗ рдЬрд╛ рд╕рдХреЗ рд╣реИрдВ - рдЬрд┐рд╕рдореЗрдВ 1 "рдореГрдд" рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ,
  • рд╕рдмрд╕реЗ рдкреБрд░рд╛рдирд╛ xmin рд╡рд░реНрддрдорд╛рди рдХреНрд╖рд┐рддрд┐рдЬ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рд╣рдо рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдХрд░реНрд╖ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ: рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рд▓реЗрдирджреЗрди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ (рдкреВрд░реА рдирд╣реАрдВ рд╣реБрдИ рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ) рд╕реЗ (рдмреНрд▓реЛрдЯ) рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдХрд┐рддрдиреА рдмрд╛рд░ рд╕рдлрд╛рдИ рдХреА рдЧрдИ рд╣реЛред рдЗрд╕рд▓рд┐рдП, PostgreSQL рдореЗрдВ, OLTP рдФрд░ OLAP рд╡рд░реНрдХрд▓реЛрдб рдХреЛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ: рдШрдВрдЯреЛрдВ рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рд░рд┐рдкреЛрд░реНрдЯреЗрдВ рдЕрдХреНрд╕рд░ рдЕрдкрдбреЗрдЯ рдХреА рдЧрдИ рдЯреЗрдмрд▓ рдХреЛ рд╕рдордп рдкрд░ рдХреНрд▓рд┐рдпрд░ рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрддреА рд╣реИрдВред рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдПрдХ рдЕрд▓рдЧ "рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ" рдкреНрд░рддрд┐рдХреГрддрд┐ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред

рдЦреБрд▓реЗ рд▓реЗрдирджреЗрди рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдХреНрд╖рд┐рддрд┐рдЬ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реНрдерд┐рддрд┐ рдареАрдХ рд╣реЛ рдЬрд╛рддреА рд╣реИ:

 | => COMMIT; 

 => VACUUM VERBOSE vac; 
 INFO: vacuuming "public.vac" INFO: scanned index "vac_s" to remove 1 row versions DETAIL: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s INFO: "vac": removed 1 row versions in 1 pages DETAIL: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s INFO: index "vac_s" now contains 1 row versions in 2 pages DETAIL: 1 index row versions were removed. 0 index pages have been deleted, 0 are currently reusable. CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s. INFO: "vac": found 1 removable, 1 nonremovable row versions in 1 out of 1 pages DETAIL: 0 dead row versions cannot be removed yet, oldest xmin: 4008 There were 1 unused item pointers. Skipped 0 pages due to buffer pins, 0 frozen pages. 0 pages are entirely empty. CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s. VACUUM 

рдЕрдм рдкреГрд╖реНрда рдореЗрдВ рд▓рд╛рдЗрди рдХрд╛ рдХреЗрд╡рд▓ рдирд╡реАрдирддрдо рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рд╣реИ:

 => SELECT * FROM heap_page('vac',0); 
  ctid | state | xmin | xmax | hhu | hot | t_ctid -------+--------+----------+-------+-----+-----+-------- (0,1) | unused | | | | | (0,2) | unused | | | | | (0,3) | normal | 4007 (c) | 0 (a) | | | (0,3) (3 rows) 

рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реИ:

 => SELECT * FROM index_page('vac_s',1); 
  itemoffset | ctid ------------+------- 1 | (0,3) (1 row) 

рдЕрдВрджрд░ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ


рд╕рдлрд╛рдИ рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рджреЛрдиреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдРрд╕рд╛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЕрд╡рд░реБрджреНрдз рди рдХрд░реЗрдВред рд╡рд╣ рдпрд╣ рдХреИрд╕реЗ рдХрд░рддреА рд╣реИ?

рдпрд╣ рд╕рдм рдПрдХ рдЯреЗрдмрд▓ рд╕реНрдХреИрди (рджреГрд╢реНрдпрддрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдкрдврд╝реЗ рдЧрдП рдкреГрд╖реНрдареЛрдВ рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (tid) рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд░рдгреА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд░рдгреА рд╕рдлрд╛рдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реНрдерд╛рдиреАрдп рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ; рдЗрд╕рдХреЗ рд▓рд┐рдП рд░рдЦ- рд░рдЦрд╛рд╡_рд╡рд░реНрдХ_ рдореАрдо рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди 64 рдПрдордмреА рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдореЗрдореЛрд░реА рддреБрд░рдВрдд рдкреВрд░реНрдг рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЧрдИ рд╣реИ, рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдирд╣реАрдВред рд╕рдЪ рд╣реИ, рдпрджрд┐ рдЯреЗрдмрд▓ рдЫреЛрдЯрд╛ рд╣реИ, рддреЛ рдЯреБрдХрдбрд╝рд╛ рдХрдо рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

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

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

рдпрджрд┐ рддрд╛рд▓рд┐рдХрд╛ рдкрд╣рд▓реЗ рдкрд╛рд╕ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдкрдврд╝реА рдЧрдИ рдереА, рддреЛ рд╕рд░рдгреА рдХреЛ рдордВрдЬреВрд░реА рджреЗ рджреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЙрд╕ рдЬрдЧрд╣ рд╕реЗ рд╕рдм рдХреБрдЫ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдЫреЛрдбрд╝рд╛ рдерд╛ред

рдЗрд╕ рддрд░рд╣ рд╕реЗ:

  • рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╣рдореЗрд╢рд╛ рджреЛ рдмрд╛рд░ рд╕реНрдХреИрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
  • рдпрджрд┐ рд╕рдлрд╛рдИ рдХреЗ рджреМрд░рд╛рди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╕рднреА рдореЗрдиреНрдЯреЗрдиреЗрдВрд╕_рд╡рд░реНрдХ_рдордо рдореЗрдореЛрд░реА рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рдЗрдВрдбреЗрдХреНрд╕реЛрдВ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдХрдИ рдмрд╛рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдХреИрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдмрдбрд╝реА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдкрд░, рдпрд╣ рдХрд╛рдлреА рд╕рдордп рд▓реЗ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднрд╛рд░ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди "рдЕрддрд┐рд░рд┐рдХреНрдд" I / O рднреА рдЕрдкреНрд░рд┐рдп рд╣реИред

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдпрд╛ рддреЛ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╕рдлрд╛рдИ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (рддрд╛рдХрд┐ рд╣рд░ рдмрд╛рд░ рдмрд╣реБрдд рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг рд╕рд╛рдлрд╝ рди рд╣реЛрдВ), рдпрд╛ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВред

рдореИрдВ рдХреЛрд╖реНрдардХ рдореЗрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг 11 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, PostgreSQL рд╕реВрдЪрдХрд╛рдВрдХ рд╕реНрдХреИрди рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд╕реЗ рдмрдбрд╝реА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдорд╛рд▓рд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдмрджрд▓рд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ)ред

рдирд┐рдЧрд░рд╛рдиреА


рдХреИрд╕реЗ рд╕рдордЭреЗрдВ рдХрд┐ рд╕рдлрд╛рдИ рдПрдХ рдкрд╛рд╕ рдореЗрдВ рдХрд╛рдо рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ?

рд╣рдордиреЗ рдкрд╣рд▓реЗ рддрд░реАрдХреЗ рдХреЛ рджреЗрдЦрд╛ рд╣реИ: рдЖрдк VERBOSE рдХреЗ рд╕рд╛рде VACUUM рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рдХрд╛рд░реНрдп рдХреЗ рдЪрд░рдгреЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрдВрд╕реЛрд▓ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рдПрдЧреАред

рджреВрд╕рд░реЗ, 9.6 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рд╡рд╣рд╛рдБ рдПрдХ рджреГрд╢реНрдп рд╣реИ pg_stat_progress_vacuum, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред

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

рд╣рдо рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╕рдлрд╛рдИ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╕рдордп рд▓рдЧреЗ, рдФрд░ рд╣рдо рдЙрди рд╕рднреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╕рдлрд╛рдИ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдирд╛ рд╣реЛред

 => TRUNCATE vac; => INSERT INTO vac(s) SELECT 'A' FROM generate_series(1,500000); => UPDATE vac SET s = 'B'; 

рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХрд╛ рдЖрдХрд╛рд░ рдХрдо рдХрд░реЗрдВ:

 => ALTER SYSTEM SET maintenance_work_mem = '1MB'; => SELECT pg_reload_conf(); 

рд╣рдо рд╕рдлрд╛рдИ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрдм рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдХрдИ рдмрд╛рд░ pg_stat_progress_vacuum рджреГрд╢реНрдп рдХреА рдУрд░ рд░реБрдЦ рдХрд░реЗрдВрдЧреЗ:

 => VACUUM VERBOSE vac; 

 | => SELECT * FROM pg_stat_progress_vacuum \gx 
 | -[ RECORD 1 ]------+------------------ | pid | 6715 | datid | 41493 | datname | test | relid | 57383 | phase | vacuuming indexes | heap_blks_total | 16667 | heap_blks_scanned | 2908 | heap_blks_vacuumed | 0 | index_vacuum_count | 0 | max_dead_tuples | 174762 | num_dead_tuples | 174480 

 | => SELECT * FROM pg_stat_progress_vacuum \gx 
 | -[ RECORD 1 ]------+------------------ | pid | 6715 | datid | 41493 | datname | test | relid | 57383 | phase | vacuuming indexes | heap_blks_total | 16667 | heap_blks_scanned | 5816 | heap_blks_vacuumed | 2907 | index_vacuum_count | 1 | max_dead_tuples | 174762 | num_dead_tuples | 174480 

рдпрд╣рд╛рдБ рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ:

  • рд╡рд░реНрддрдорд╛рди рдЪрд░рдг (рдЪрд░рдг) рдХрд╛ рдирд╛рдо - рд╣рдордиреЗ рддреАрди рдореБрдЦреНрдп рдЪрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ;
  • рддрд╛рд▓рд┐рдХрд╛ рдкреГрд╖реНрдареЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ (heap_blks_total);
  • рдХреНрд░реЙрд▓ рдХрд┐рдП рдЧрдП рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (heap_blks_scanned);
  • рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╛рдлрд╝ рдХрд┐рдП рдЧрдП рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (heap_blks_vacuumed);
  • рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ (index_vacuum_count) рджреНрд╡рд╛рд░рд╛ рдкрд╛рд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ред

рд╕рдордЧреНрд░ рдкреНрд░рдЧрддрд┐ heap_blks_vacuumed рдХреЗ heap_blks_total рдХреЗ рдЕрдиреБрдкрд╛рдд рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рдорд╛рди рдЖрд╕рд╛рдиреА рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реВрдЪрдХрд╛рдВрдХ рд╕реНрдХреИрди рдХреЗ рдХрд╛рд░рдг "рдЭрдЯрдХрд╛" рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдлрд╛рдИ рдЪрдХреНрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдореБрдЦреНрдп рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - 1 рд╕реЗ рдЕрдзрд┐рдХ рдореВрд▓реНрдп рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдкрд╛рд╕ рдореЗрдВ рд╕рдлрд╛рдИ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдереАред

рдЗрд╕ рд╕рдордп рддрдХ рдкреВрд░рд╛ рд╣реБрдЖ VACUUM VERBOSE рдХрдорд╛рдВрдб рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ, рдмрдбрд╝реА рддрд╕реНрд╡реАрд░ рджрд┐рдЦрд╛рдПрдЧрд╛:

 INFO: vacuuming "public.vac" 
 INFO: scanned index "vac_s" to remove 174480 row versions DETAIL: CPU: user: 0.50 s, system: 0.07 s, elapsed: 1.36 s INFO: "vac": removed 174480 row versions in 2908 pages DETAIL: CPU: user: 0.02 s, system: 0.02 s, elapsed: 0.13 s 
 INFO: scanned index "vac_s" to remove 174480 row versions DETAIL: CPU: user: 0.26 s, system: 0.07 s, elapsed: 0.81 s INFO: "vac": removed 174480 row versions in 2908 pages DETAIL: CPU: user: 0.01 s, system: 0.02 s, elapsed: 0.10 s 
 INFO: scanned index "vac_s" to remove 151040 row versions DETAIL: CPU: user: 0.13 s, system: 0.04 s, elapsed: 0.47 s INFO: "vac": removed 151040 row versions in 2518 pages DETAIL: CPU: user: 0.01 s, system: 0.02 s, elapsed: 0.08 s 
 INFO: index "vac_s" now contains 500000 row versions in 17821 pages DETAIL: 500000 index row versions were removed. 8778 index pages have been deleted, 0 are currently reusable. CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s. INFO: "vac": found 500000 removable, 500000 nonremovable row versions in 16667 out of 16667 pages DETAIL: 0 dead row versions cannot be removed yet, oldest xmin: 4011 There were 0 unused item pointers. 0 pages are entirely empty. CPU: user: 1.10 s, system: 0.37 s, elapsed: 3.71 s. VACUUM 

рдпрд╣рд╛рдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреАрди рдкрд╛рд╕ рдереЗ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдиреЗ 174,480 рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рддрд╛рд░ рдХреЗ рдореГрдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдордВрдЬреВрд░реА рджреЗ рджреАред рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддреА рд╣реИ? рдПрдХ рд▓рд┐рдВрдХ (tid) 6 рдмрд╛рдЗрдЯреНрд╕ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ 1024 * 1024/6 = 174762 рд╡рд╣ рдирдВрдмрд░ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо pg_stat_progress_vacuum.max_dead_tuples рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдереЛрдбрд╝рд╛ рдХрдо рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдпрд╣ рдЧрд╛рд░рдВрдЯреА рд╣реИ рдХрд┐ рдЕрдЧрд▓реЗ рдкреГрд╖реНрда рдХреЛ рдкрдврд╝рдиреЗ рдкрд░ "рдореГрдд" рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рднреА рд╕рдВрдХреЗрдд рд╕реНрдореГрддрд┐ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдлрд┐рдЯ рд╣реЛрдВрдЧреЗред

рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг


рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рдпрд╛, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХреНрд╡реЗрд░реА рдкреНрд▓рд╛рдирд░ рдХреЗ рд▓рд┐рдП рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рд╕рдВрдЧреНрд░рд╣, рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдлрд╛рдИ рд╕реЗ рдЬреБрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рднреА, рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рди рдХреЗрд╡рд▓ ANALYZE рдЯреАрдо рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд╕рд╛рде рд╕рдлрд╛рдИ рдХреЛ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ: VACUUM ANALYZEред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдлрд╛рдИ рдкрд╣рд▓реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг - рдХреЛрдИ рдмрдЪрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдлрд╛рдИ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

рдкреВрд░реНрдг рд╕рдлрд╛рдИ (рд╡реИрдХреНрдпреВрдо рдкреВрд░реНрдг)


рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рджреЗрдЦрд╛, рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕рдлрд╛рдИ рдЗрдВрдЯреНрд░рд╛-рдкреЗрдЬ рд╕рдлрд╛рдИ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЧрд╣ рдХреЛ рдореБрдХреНрдд рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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

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

(рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдлрд╝ рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рд╣реИрдВ - рдРрд╕реЗ рдкреГрд╖реНрда рдлрд╝рд╛рдЗрд▓ рдХреЛ "рдХрд╛рдЯ рджреЗрддреЗ рд╣реИрдВ" рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреЗ рд╣реИрдВред)

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХрдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдбрд╛рд▓реЗрдВ:

 => TRUNCATE vac; => INSERT INTO vac(s) SELECT 'A' FROM generate_series(1,500000); 

рд╕реВрдЪрдирд╛ рдХреЗ рдШрдирддреНрд╡ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреИрд╕реЗ рдХрд░реЗрдВ? рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ:

 => CREATE EXTENSION pgstattuple; => SELECT * FROM pgstattuple('vac') \gx 
 -[ RECORD 1 ]------+--------- table_len | 68272128 tuple_count | 500000 tuple_len | 64500000 tuple_percent | 94.47 dead_tuple_count | 0 dead_tuple_len | 0 dead_tuple_percent | 0 free_space | 38776 free_percent | 0.06 

рдлрд╝рдВрдХреНрд╢рди рдкреВрд░реА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЖрдВрдХрдбрд╝реЛрдВ рдкрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕реНрдерд╛рди рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЦреНрдп рд╕реВрдЪрдирд╛ рдЬреЛ рдЕрдм рд╣рдо рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рд╡рд╣ tuple_percent рдлрд╝реАрд▓реНрдб рд╣реИ: рдЙрдкрдпреЛрдЧреА рдбреЗрдЯрд╛ рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рддрд┐рд╢рддред рдкреГрд╖реНрда рдХреЗ рдЕрдВрджрд░ рд╕реЗрд╡рд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рдУрд╡рд░рд╣реЗрдб рдХреЗ рдХрд╛рд░рдг рдпрд╣ 100 рд╕реЗ рдХрдо рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╣реИред

рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд▓рд┐рдП, рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди avg_leaf_density рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдПрдХ рд╣реА рдЕрд░реНрде рд╣реИ: рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдкреНрд░рддрд┐рд╢рдд (рдкрддреНрддреА рдкреГрд╖реНрдареЛрдВ рдореЗрдВ)ред

 => SELECT * FROM pgstatindex('vac_s') \gx 
 -[ RECORD 1 ]------+--------- version | 3 tree_level | 3 index_size | 72802304 root_block_no | 2722 internal_pages | 241 leaf_pages | 8645 empty_pages | 0 deleted_pages | 0 avg_leaf_density | 83.77 leaf_fragmentation | 64.25 

рдФрд░ рдпрд╣рд╛рдБ рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИ:

 => SELECT pg_size_pretty(pg_table_size('vac')) table_size, pg_size_pretty(pg_indexes_size('vac')) index_size; 
  table_size | index_size ------------+------------ 65 MB | 69 MB (1 row) 

рдЕрдм рд╕рднреА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ 90% рдХреЛ рд╣рдЯрд╛ рджреЗрдВред рд╣рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдореЗрдВ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкрдВрдХреНрддрд┐ рдмрдиреА рд░рд╣реЗ:

 => DELETE FROM vac WHERE random() < 0.9; 
 DELETE 450189 

рд╕рд╛рдорд╛рдиреНрдп рд╕рдлрд╛рдИ рдХреЗ рдмрд╛рдж рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЖрдХрд╛рд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

 => VACUUM vac; => SELECT pg_size_pretty(pg_table_size('vac')) table_size, pg_size_pretty(pg_indexes_size('vac')) index_size; 
  table_size | index_size ------------+------------ 65 MB | 69 MB (1 row) 

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдХрд╛рд░ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ: рдирд┐рдпрдорд┐рдд рд╕рдлрд╛рдИ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдШрдирддреНрд╡ рд▓рдЧрднрдЧ 10 рдЧреБрдирд╛ рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ:

 => SELECT vac.tuple_percent, vac_s.avg_leaf_density FROM pgstattuple('vac') vac, pgstatindex('vac_s') vac_s; 
  tuple_percent | avg_leaf_density ---------------+------------------ 9.41 | 9.73 (1 row) 

рдЕрдм рдЬрд╛рдВрдЪ рд▓реЗрдВ рдХрд┐ рдПрдХ рдкреВрд░реНрдг рд╕рдлрд╛рдИ рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рдЕрдм рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ:

 => SELECT pg_relation_filepath('vac'), pg_relation_filepath('vac_s'); 
  pg_relation_filepath | pg_relation_filepath ----------------------+---------------------- base/41493/57392 | base/41493/57393 (1 row) 

 => VACUUM FULL vac; => SELECT pg_relation_filepath('vac'), pg_relation_filepath('vac_s'); 
  pg_relation_filepath | pg_relation_filepath ----------------------+---------------------- base/41493/57404 | base/41493/57407 (1 row) 

рдЕрдм рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдирдП рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЖрдХрд╛рд░ рдХрд╛рдлреА рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдШрдирддреНрд╡ рддрджрдиреБрд╕рд╛рд░ рдмрдврд╝ рдЧрдпрд╛ рд╣реИ:

 => SELECT pg_size_pretty(pg_table_size('vac')) table_size, pg_size_pretty(pg_indexes_size('vac')) index_size; 
  table_size | index_size ------------+------------ 6648 kB | 6480 kB (1 row) 
 => SELECT vac.tuple_percent, vac_s.avg_leaf_density FROM pgstattuple('vac') vac, pgstatindex('vac_s') vac_s; 
  tuple_percent | avg_leaf_density ---------------+------------------ 94.39 | 91.08 (1 row) 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореВрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдШрдирддреНрд╡ рдФрд░ рднреА рдмрдврд╝ рдЧрдпрд╛ рд╣реИред рдЙрдкрд▓рдмреНрдз рдбреЗрдЯрд╛ рд╕реЗ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ (рдмреА-рдЯреНрд░реА) рдмрдирд╛рдирд╛ рдПрдХ рдореМрдЬреВрджрд╛ рдЗрдВрдбреЗрдХреНрд╕ рд▓рд╛рдЗрди рдореЗрдВ рдбреЗрдЯрд╛ рдбрд╛рд▓рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рднрджрд╛рдпрдХ рд╣реИред

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

рдПрдХ рдФрд░ рднреА рддреЗрдЬрд╝, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рднреА рдХрдо рд╕рдЯреАрдХ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рд╡реЙрд▓реНрдпреВрдо рдХреЗ рдЕрдиреБрдкрд╛рдд рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПред рдРрд╕реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╡рд┐рдХрд▓реНрдк рд╡рд┐рдХреА рдкрд░ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

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

рдЗрд╕реА рддрд░рд╣ рдХреА рдЯреАрдореЗрдВ


рдХрдИ рдХрдорд╛рдВрдб рд╣реИрдВ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯреЗрдмрд▓ рдФрд░ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдлрд╛рдИ рдХреЗ рд╕рдорд╛рди рд╣реИред рд╡реЗ рд╕рднреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░реЛрдХрддреЗ рд╣реИрдВ, рд╡реЗ рд╕рднреА рдкреБрд░рд╛рдиреА рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдирдП рдмрдирд╛рддреЗ рд╣реИрдВред

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

REINDEX рдХрдорд╛рдВрдб рдПрдХ рдЯреЗрдмрд▓ рдкрд░ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, VACUUM FULL рдФрд░ CLUSTER рдЗрд╕ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрдХреНрд░рдорд┐рддреЛрдВ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред

TRUNCATE рдХрдорд╛рдВрдб рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ DELETE рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рд╕рднреА рддрд╛рд▓рд┐рдХрд╛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди DELETE, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд░реНрдЪрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╣рдЯрд╛рдП рдЧрдП рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдХреА рд╕рдлрд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред TRUNCATE рдмрд╕ рдПрдХ рдирдИ, рд╕рд╛рдл рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ TRUNCATE рд▓реЗрдирджреЗрди рдХреЗ рдЕрдВрдд рддрдХ рдкреВрд░реЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╡рд░реБрджреНрдз рдХрд░ рджреЗрдЧрд╛ред

рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдП ред

Source: https://habr.com/ru/post/hi452320/


All Articles