рд╣рдордиреЗ
рдЕрд▓рдЧрд╛рд╡ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХреА,
рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╡рд┐рд╖рдпрд╛рдВрддрд░ рдХрд┐рдпрд╛, рдлрд┐рд░
рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдФрд░ рджреЗрдЦрд╛ рдХрд┐ рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ
рдбреЗрдЯрд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдкрд┐рдЫрд▓реА рдмрд╛рд░ рд╣рдордиреЗ 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 рдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ:
=> 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 nonremovable row versions
- рджреЛ рдЯреНрдпреВрдкрд▓ рдЬреЛ рдбрд┐рд▓реАрдЯ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рд╡реЗ рдЯреЗрдмрд▓ рдореЗрдВ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред1 dead row versions cannot be removed yet
- рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдореГрдд рд╣реИредoldest xmin
рд╡рд░реНрддрдорд╛рди рдХреНрд╖рд┐рддрд┐рдЬ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
рдЖрдЗрдП рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ: рдпрджрд┐ рдХрд┐рд╕реА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд▓реЗрдирджреЗрди рд╣реЛрддрд╛ рд╣реИ (рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдВрдмрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ), рддреЛ рдпрд╣ рдЯреЗрдмрд▓ рдмреНрд▓реЛрдЯ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдХрд┐рддрдиреА рдмрд╛рд░ рд╡реИрдХреНрдпреВрдорд┐рдВрдЧ рд╣реЛред рдЗрд╕рд▓рд┐рдП, OLTP- рдФрд░ OLAP- рдкреНрд░рдХрд╛рд░ рд╡рд░реНрдХрд▓реЛрдб рдПрдХ PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЦрд░рд╛рдм рд░реВрдк рд╕реЗ рд╕рд╣-рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реИ: рдШрдВрдЯреЛрдВ рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рд░рд┐рдкреЛрд░реНрдЯ рдЕрджреНрдпрддрди рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд╡рд┐рдзрд┐рд╡рдд рд╡реИрдХреНрдпреВрдо рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрдЧреАред рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЗрд╕ рдХрд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдЦреБрд▓реЗ рд▓реЗрдирджреЗрди рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдХреНрд╖рд┐рддрд┐рдЬ рдЪрд▓рддрд╛ рд╣реИ, рдФрд░ рд╕реНрдерд┐рддрд┐ рдареАрдХ рд╣реЛ рдЬрд╛рддреА рд╣реИ:
| => 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
s рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд░рдгреА рдХреЗ рдиреАрдЪреЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд░рдгреА рдХреЛ рд╡реИрдХреНрдпреВрдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реНрдерд╛рдиреАрдп рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЗрд╕рдХреЗ рд▓рд┐рдП
рдореЗрдВрдЯреЗрдиреЗрдВрд╕_рд╡рд░реНрдХ_ рдореАрдо рдмрд╛рдЗрдЯреНрд╕ рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди 64 рдПрдордмреА рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореЗрдореЛрд░реА рдХреА рдкреВрд░реА рдорд╛рддреНрд░рд╛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдореЗрдЬ рдмрдбрд╝реА рдирд╣реАрдВ рд╣реИ, рддреЛ рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред
рддрдм рд╣рдо рдпрд╛ рддреЛ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рддреЗ рд╣реИрдВ рдпрд╛ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред рдпрд╛ рддреЛ рдорд╛рдорд▓реЗ рдореЗрдВ,
рд╡реИрдХреНрдпреВрдорд┐рдВрдЧ рдЗрдВрдбреЗрдХреНрд╕ рдЪрд░рдг рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЕрдВрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддрд╛рд▓рд┐рдХрд╛ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛
рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдЙрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдореЗрдВ
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдХреИрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдпрд╛рдж рдХрд┐рдП рдЧрдП рдЯреБрдкрд▓реНрд╕ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ рд╣реИрдВред рдкрд╛рдИ рдЧрдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬреЛрдВ рд╕реЗ рджреВрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣рд╛рдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ: рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореГрдд рдЯреБрдкрд▓реНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИрдВ, рдЬрдмрдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдЕрднреА рднреА рдЙрдирдХреЗ рдкрд╛рд╕ рд╣реИред рдФрд░ рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ: рдЬрдм рдХрд┐рд╕реА рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдпрд╛ рддреЛ рдореГрдд tuples (рдЗрдВрдбреЗрдХреНрд╕ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд╕рд╛рде) рдирд╣реАрдВ рдорд╛рд░рддреЗ рд╣реИрдВ рдпрд╛ рджреГрд╢реНрдпрддрд╛ рдЬрд╛рдВрдЪ (рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕реНрдХреИрди рдХрд░рддреЗ рд╕рдордп) рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
рдЙрд╕рдХреЗ рдмрд╛рдж,
рд╡реИрдХреНрдпреВрдорд┐рдВрдЧ рд╣реАрдк рдЪрд░рдг рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЙрдкрдпреБрдХреНрдд рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрдХреИрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдпрд╛рдж рдХрд┐рдП рдЧрдП рдЯреБрдкрд▓реНрд╕ рдХреЛ рд╡реИрдХреНрдпреВрдо рдХрд░рдХреЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рд╕реВрдЪрдХрд╛рдВрдХ рд╕реЗ рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИрдВред
рдпрджрд┐ рддрд╛рд▓рд┐рдХрд╛ рдкрд╣рд▓реЗ рдЪрдХреНрд░ рдХреЗ рджреМрд░рд╛рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдкрдврд╝реА рдЧрдИ рдереА, рддреЛ рд╕рд░рдгреА рдХреЛ рдордВрдЬреВрд░реА рджреЗ рджреА рдЧрдИ рд╣реИ рдФрд░ рдЬрд╣рд╛рдВ рд╣рдо рдкрд╣реБрдВрдЪреЗ рдереЗ рд╡рд╣рд╛рдВ рд╕реЗ рд╕рдм рдХреБрдЫ рджреЛрд╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:
- рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╣рдореЗрд╢рд╛ рджреЛ рдмрд╛рд░ рд╕реНрдХреИрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдпрджрд┐ рд╡реИрдХреНрдпреВрдорд┐рдВрдЧ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдЯреНрдпреВрдкрд▓реНрд╕ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рднреА рдЖрдХрд╛рд░ рдХреЗ рд░рдЦрд░рдЦрд╛рд╡_рд╡рд░реНрдХ_рдо рдХреА рд╕реНрдореГрддрд┐ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рдЗрдВрдбреЗрдХреНрд╕реЛрдВ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдХрдИ рдмрд╛рд░ рд╕реНрдХреИрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдмрдбрд╝реА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпрднрд╛рд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд▓реЙрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИред
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдпрд╛ рддреЛ VACUUM рдХреЛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (рддрд╛рдХрд┐ рд╣рд░ рдмрд╛рд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЯреНрдпреВрдкрд▓реНрд╕ рдХреЛ рд╡реИрдХреНрдпреВрдо рди рдХрд┐рдпрд╛ рдЬрд╛рдП) рдпрд╛ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВред
рдХреЛрд╖реНрдардХ рдореЗрдВ рдиреЛрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 11 рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╢реБрд░реВ, PostgreSQL
рд╕реВрдЪрдХрд╛рдВрдХ рд╕реНрдХреИрди рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдПрдХ рд╕рдореНрдореЛрд╣рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕рд╕реЗ рдмрдбрд╝реА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдорд╛рд▓рд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдХреЗрд╡рд▓ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИрдВ (рд▓реЗрдХрд┐рди рдмрджрд▓реА рдирд╣реАрдВ рдЬрд╛рддреА)ред
рдирд┐рдЧрд░рд╛рдиреА
рд╣рдо рдпрд╣ рдХреИрд╕реЗ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ VACUUM рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рдЕрдкрдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рджреЗрдЦрд╛ рд╣реИ: VERBOSE рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде VACUUM рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЪрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХрдВрд╕реЛрд▓ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдЧреАред
рджреВрд╕рд░рд╛, рд╕рдВрд╕реНрдХрд░рдг 9.6 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░,
pg_stat_progress_vacuum
рджреГрд╢реНрдп рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЬреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
(рддреАрд╕рд░рд╛ рддрд░реАрдХрд╛ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ: рд╕реВрдЪрдирд╛ рдХреЛ рд╕рдВрджреЗрд╢ рд▓реЙрдЧ рдореЗрдВ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдСрдЯреЛрдХреИрд╕рдо рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдЕрдЧрд▓реА рдмрд╛рд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред)
рдЪрд▓реЛ рд╡реИрдХреНрдпреВрдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХрд╛рдлреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдбрд╛рд▓реЗрдВ, рдФрд░ рдЙрди рд╕рднреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ, рддрд╛рдХрд┐ 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();
рдЪрд▓рд┐рдП VACUUM рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрдм рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдХрдИ рдмрд╛рд░
pg_stat_progress_vacuum
рджреГрд╢реНрдп рдкрд░
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
рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ ( heap_blks_vacuumed
)ред - рд╕реВрдЪрдХрд╛рдВрдХ рд╡реИрдХреНрдпреВрдо рдЪрдХреНрд░ (
index_vacuum_count
) рдХреА рд╕рдВрдЦреНрдпрд╛ред
рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдЧрддрд┐
heap_blks_vacuumed
рдХреЗ
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
рд╣рдо рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдКрдкрд░ рддреАрди рдЪрдХреНрд░ рдХрд┐рдП рдЧрдП рдереЗ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЪрдХреНрд░ рдореЗрдВ, 174480 рдкреЙрдЗрдВрдЯ рдЯреВ рдбреЗрдб рдЯреНрдпреВрдкрд▓реНрд╕ рдХреЛ рд╡реИрдХреНрдпреВрдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдПрдХ
tid
рдкрд░ 6 рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрддреА рд╣реИрдВ, рдФрд░ 1024 * 1024/6 = 174762, рдЬреЛ рдХрд┐ рд╡рд╣ рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬреЛ рд╣рдо
pg_stat_progress_vacuum.max_dead_tuples
рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдереЛрдбрд╝рд╛ рдХрдо рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдПрдХ рдЕрдЧрд▓рд╛ рдкреГрд╖реНрда рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореГрдд рдЯреБрдкрд▓реНрд╕ рдХреЗ рд╕рднреА рд╕рдВрдХреЗрдд рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдореГрддрд┐ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдВрдЧреЗред
рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рдпрд╛, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХреНрд╡реЗрд░реА рдкреНрд▓рд╛рдирд░ рдХреЗ рд▓рд┐рдП рдЖрдВрдХрдбрд╝реЗ рдПрдХрддреНрд░рд┐рдд рдХрд░рдирд╛, рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡реИрдХреНрдпреВрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдлрд┐рд░ рднреА, рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рди рдХреЗрд╡рд▓ ANALYZE рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╡реИрдХреНрдпреВрдорд┐рдВрдЧ рдФрд░ VACUUM ANALYZE рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдкрд╣рд▓реЗ рд╡реИрдХреНрдпреВрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рд╕реЗ рдХреЛрдИ рд▓рд╛рдн рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рдСрдЯреЛрд╡реИрдХреНрдпреВрдо рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
рд░рд┐рдХреНрдд рд╕реНрдерд╛рди
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡реИрдХреНрдпреВрдо рдЗрди-рдкреЗрдЬ рд╡реИрдХреНрдпреВрдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реНрдерд╛рди рдореБрдХреНрдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдХреБрдЫ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдПрдХ рдЯреЗрдмрд▓ рдпрд╛ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдЖрдХрд╛рд░ рдмрд╣реБрдд рдмрдврд╝ рдЧрдпрд╛ рд╣реИ, рддреЛ VACUUM рдореМрдЬреВрджрд╛ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд╛рди рдЦрд╛рд▓реА рдХрд░ рджреЗрдЧрд╛: "рдЫреЗрдж" рд╡рд╣рд╛рдВ рд╣реЛрдЧрд╛, рдЬреЛ рддрдм рдирдП рдЯреНрдпреВрдкрд▓реНрд╕ рдХреЗ рд╕рдореНрдорд┐рд▓рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдлрд╛рдЗрд▓реЗрдВ рд╡реИрдХреНрдпреВрдо рд╕реЗ рдкрд╣рд▓реЗ рдареАрдХ рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдВрдЧреАред рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐:
- рддрд╛рд▓рд┐рдХрд╛ (рдпрд╛ рд╕реВрдЪрдХрд╛рдВрдХ) рдХрд╛ рдкреВрд░рд╛ рд╕реНрдХреИрди рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
- рдПрдХ рдмрдбрд╝реЗ рдмрдлрд╝рд░ рдХреИрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдРрд╕реЗ рдкреГрд╖реНрда рд╣реИрдВ рдЬреЛ рд╡рд╣рд╛рдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдШрдирддреНрд╡ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ)ред
- рдЗрдВрдбреЗрдХреНрд╕ рдЯреНрд░реА рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЗрдВрдбреЗрдХреНрд╕ рдПрдХреНрд╕реЗрд╕ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрдЧрд╛ред
- рдлрд╝рд╛рдЗрд▓реЗрдВ рдбрд┐рд╕реНрдХ рдкрд░ рдФрд░ рдмреИрдХрдЕрдк рдкреНрд░рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд▓реЗрддреА рд╣реИрдВред
(рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реИрдХреНрдпреВрдо рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рд╣реИрдВ, рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдпреЗ рдкреГрд╖реНрда рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЯреНрд░рд┐рдо рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЧрдП рд╣реИрдВред)
рдпрджрд┐ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХреБрдЫ рдЙрдЪрд┐рдд рд╕реАрдорд╛ рд╕реЗ рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ, рддреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рднрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдЙрд╕рдХреЗ рд╕рднреА рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рдХреЙрдореНрдкреИрдХреНрдЯ рддрд░реАрдХреЗ рд╕реЗ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ,
fillfactor
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди, 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 рдХреЗ рдмрд╛рдж рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЖрдХрд╛рд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
=> 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)
рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдХрд╛рд░ рдирд╣реАрдВ рдмрджрд▓рд╛: VACUUM рдХреЛрдИ рднреА рддрд░реАрдХрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдпрджреНрдпрдкрд┐ рдпрд╣ рд╕реВрдЪрдирд╛ рдШрдирддреНрд╡ рд▓рдЧрднрдЧ 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)
рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ VACUUM FULL рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИред рдЕрдм рдЯреЗрдмрд▓ рдФрд░ рдЗрдВрдбреЗрдХреНрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
=> 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
рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬреЛ рджреГрд╢реНрдпрддрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдВрдХрдбрд╝реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рднреА рдХрдо рд╕рдЯреАрдХ, рд╕рд┐рд╕реНрдЯрдо рдХреИрдЯрд▓реЙрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдЖрдХрд╛рд░ рдХреЗ рдЕрдиреБрдкрд╛рдд рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рд╣реИред рдЖрдк
рд╡рд┐рдХреА рдореЗрдВ рдРрд╕реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
VACUUM рдкреВрд░реНрдг рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рднреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ (рд╢рд╛рдорд┐рд▓ рдХреНрд╡реЗрд░реА) рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдХрд╛рдо рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рднрд╛рд░реА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИред рддрд╛рд▓реЗ рдкрд░ рдЕрд▓рдЧ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреА, рдФрд░ рдЕрдм рд╣рдо рдХреЗрд╡рд▓
pg_repack рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдХрд╛рдо рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд▓реЙрдХ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЖрджреЗрд╢
рдХреБрдЫ рдХрдорд╛рдВрдбреНрд╕ рд╣реИрдВ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯреЗрдмрд▓ рдФрд░ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рддреА рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП VACUUM FULL рд╕реЗ рдорд┐рд▓рддреА рдЬреБрд▓рддреА рд╣реИрдВред рд╡реЗ рд╕рднреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░реЛрдХрддреЗ рд╣реИрдВ, рд╡реЗ рд╕рднреА рдкреБрд░рд╛рдиреА рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдирдП рдмрдирд╛рддреЗ рд╣реИрдВред
CLUSTER рдХрдорд╛рдВрдб рд╕рднреА VACUUM FULL рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдкрд▓рдмреНрдз рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЯреНрдпреВрдкрд▓реНрд╕ рдХрд╛ рднреА рдЖрджреЗрд╢ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрдВрдбреЗрдХреНрд╕ рдПрдХреНрд╕реЗрд╕ рдХрд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓рд╛рдирд░ рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдХреЛ рдмрдирд╛рдП рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЯреЗрдмрд▓ рдХреЗ рдмрд╛рдж рдХреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдЯреБрдкрд▓реНрд╕ рдХрд╛ рднреМрддрд┐рдХ рдХреНрд░рдо рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред
REINDEX рдХрдорд╛рдВрдб рдЯреЗрдмрд▓ рдкрд░ рдПрдХ рдЕрд▓рдЧ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИред VACUUM FULL рдФрд░ CLUSTER рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
TRUNCATE рдХрдорд╛рдВрдб рдХрд╛ рддрд░реНрдХ DELETE рдХреЗ рд╕рдорд╛рди рд╣реИ - рдпрд╣ рд╕рднреА рддрд╛рд▓рд┐рдХрд╛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди DELETE, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╣рдЯрд╛рдП рдЧрдП рдХреЗ рд░реВрдк рдореЗрдВ tuples рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рд╡реИрдХреНрдпреВрдорд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдФрд░ TRUNCATE рд╕рд┐рд░реНрдл рдПрдХ рдирдИ, рд╕рд╛рдл рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ TRUNCATE рд▓реЗрдирджреЗрди рдХреЗ рдЕрдВрдд рддрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдХрд╛рдо рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ред
рдкрд░ рдкрдврд╝реЗрдВ ред