рдмрд╕ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА
рдЕрд▓рдЧрд╛рд╡ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА,
рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╡рд┐рд╖рдпрд╛рдВрддрд░ рдХрд┐рдпрд╛, рдФрд░ рдлрд┐рд░
рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдЦреЛрдЬ рдХреА рдФрд░ рджреЗрдЦрд╛ рдХрд┐ рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ
рдбреЗрдЯрд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдЕрдм рд╣рдо рджреЛ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдЬреБрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ:
рдЗрди-рдкреЗрдЬ рд╡реИрдХреНрдпреВрдо рдФрд░
HOT рдЕрдкрдбреЗрдЯ ред рджреЛрдиреЛрдВ рддрдХрдиреАрдХреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рд╡реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╕реНрддреБрддрдГ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред
рдирд┐рдпрдорд┐рдд рдЕрдкрдбреЗрдЯ рдХреЗ рджреМрд░рд╛рди рдЗрди-рдкреЗрдЬ рд╡реИрдХреНрдпреВрдо
рдХрд┐рд╕реА рдЕрджреНрдпрддрди рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреГрд╖реНрда рдкрд░ рдкрд╣реБрдБрдЪрддреЗ рд╕рдордп рдпрд╛ рдкрдврд╝рддреЗ рд╕рдордп, рдпрджрд┐ PostgreSQL рдпрд╣ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдкреГрд╖реНрда рдЕрдВрддрд░рд┐рдХреНрд╖ рд╕реЗ рдмрд╛рд╣рд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рдпрд╣ рддреЗрдЬрд╝-рдЗрди-рдкреЗрдЬ рд╡реИрдХреНрдпреВрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ:
- рдЗрд╕ рдкреГрд╖реНрда рдХреЗ рдкрд┐рдЫрд▓реЗ рдЕрджреНрдпрддрди рдХреЛ рдПрдХ рд╣реА рдкреГрд╖реНрда рдореЗрдВ рдПрдХ рдирдпрд╛ рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдерд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдкреЗрдЬ рд╣реЗрдбрд░ рдореЗрдВ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд▓реА рдмрд╛рд░ рдкреЗрдЬ рдХреЛ рд╡реИрдХреНрдпреВрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдкреГрд╖реНрда
fillfactor
рдкреНрд░рддрд┐рд╢рдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реИрдХреНрдпреВрдо рдХреЛ рдЕрдЧрд▓реЗ рдмрд┐рдирд╛ рдмрдВрдж рдХрд┐рдП рдмрд┐рдирд╛ рддреБрд░рдВрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
fillfactor
рдПрдХ рднрдВрдбрд╛рд░рдг рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ (рдФрд░ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд▓рд┐рдП) рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рдкреГрд╖реНрда рдореЗрдВ рдПрдХ рдирдИ рдкрдВрдХреНрддрд┐ рдХрд╛ рдкреЛрд╕реНрдЯрдЧреНрд░реИрд╕рдХреНрдпреВрдПрд╕ рдХреЗрд╡рд▓ рддрднреА рднрд░рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдкреГрд╖реНрда
fillfactor
рдкреНрд░рддрд┐рд╢рдд рд╕реЗ рдХрдо рд╣реЛред рд╢реЗрд╖ рд╕реНрдерд╛рди рдирдП tuples рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд╣реИ рдЬреЛ рдЕрдкрдбреЗрдЯ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдмрдирд╛рдП рдЧрдП рд╣реИрдВред рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди 100 рд╣реИ, рдЕрд░реНрдерд╛рдд рдХреЛрдИ рд╕реНрдерд╛рди рдЖрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ (рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди 90 рд╣реИ)ред
рдЗрди-рдкреЗрдЬ рд╡реИрдХреНрдпреВрдо рдЯреБрдкрд▓реНрд╕ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рд╕реНрдиреИрдкрд╢реЙрдЯ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ (рдЬреЛ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓реЗрдирджреЗрди рдХреНрд╖рд┐рддрд┐рдЬ рд╕реЗ рдкрд░реЗ рд╣реИрдВ, рдЬреЛ
рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА), рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЯреЗрдмрд▓ рдкреЗрдЬ рдХреЗ рднреАрддрд░ рд╕рдЦреНрддреА рд╕реЗ рдХрд░рддрд╛ рд╣реИред рдирд┐рд░реНрд╡рд╛рдд рдЯреНрдпреВрдкрд▓реНрд╕ рдХреЛ рд╕рдВрдХреЗрдд рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рджреВрд╕рд░реЗ рдкреГрд╖реНрда рдкрд░ рд╣реИред рдЗрди-рдкреЗрдЬ рд╡реИрдХреНрдпреВрдо рдХрднреА рднреА рдПрдХ рдЯреЗрдмрд▓ рдкреЗрдЬ рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЬрд▓реНрджреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЙрдиреНрд╣реАрдВ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдореБрдХреНрдд рд╕реНрдерд╛рди рдХрд╛ рдирдХреНрд╢рд╛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ; рдпрд╣ рдЖрд╡реЗрд╖рдг рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рднреА рд░рдЦрддрд╛ рд╣реИред рджреГрд╢реНрдпрддрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдкреГрд╖реНрда рдХреЛ рд░реАрдбреНрд╕ рдХреЗ рджреМрд░рд╛рди рд╡реИрдХреНрдпреВрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рд╕реЗрд▓реЗрдХреНрдЯ рдХреНрд╡реЗрд░реА рдкреГрд╖реНрдареЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддреА рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рд╕рдВрдХреЗрдд рдмрд┐рдЯреНрд╕ рдХреЗ рдПрдХ рдЖрд╕реНрдердЧрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛ рд╣реИред
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рджреЛрдиреЛрдВ рд╕реНрддрдВрднреЛрдВ рдкрд░ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рдмрдирд╛рдПрдВред
=> CREATE TABLE hot(id integer, s char(2000)) WITH (fillfactor = 75); => CREATE INDEX hot_id ON hot(id); => CREATE INDEX hot_s ON hot(s);
рдпрджрд┐ рд╕реНрддрдВрдн рдХреЗрд╡рд▓ рд▓реИрдЯрд┐рди рд╡рд░реНрдгреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг 2004 рдмрд╛рдЗрдЯреНрд╕ рдФрд░ 24 рд╣реЗрдбрд░ рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдЧрд╛ред рд╣рдордиреЗ
fillfactor
рд╕реНрдЯреЛрд░реЗрдЬ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ 75% рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рддреАрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдерд╛рди рд░рдЦрддрд╛ рд╣реИред
рддрд╛рд▓рд┐рдХрд╛ рдкреГрд╖реНрда рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рджреЛ рдФрд░ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдХрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ:
=> CREATE FUNCTION heap_page(relname text, pageno integer) RETURNS TABLE(ctid tid, state text, xmin text, xmax text, hhu text, hot text, t_ctid tid) AS $$ SELECT (pageno,lp)::text::tid AS ctid, CASE lp_flags WHEN 0 THEN 'unused' WHEN 1 THEN 'normal' WHEN 2 THEN 'redirect to '||lp_off WHEN 3 THEN 'dead' END AS state, t_xmin || CASE WHEN (t_infomask & 256) > 0 THEN ' (c)' WHEN (t_infomask & 512) > 0 THEN ' (a)' ELSE '' END AS xmin, t_xmax || CASE WHEN (t_infomask & 1024) > 0 THEN ' (c)' WHEN (t_infomask & 2048) > 0 THEN ' (a)' ELSE '' END AS xmax, CASE WHEN (t_infomask2 & 16384) > 0 THEN 't' END AS hhu, CASE WHEN (t_infomask2 & 32768) > 0 THEN 't' END AS hot, t_ctid FROM heap_page_items(get_raw_page(relname,pageno)) ORDER BY lp; $$ LANGUAGE SQL;
рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрдВрдХреНрд╢рди рднреА рдмрдирд╛рддреЗ рд╣реИрдВ:
=> CREATE FUNCTION index_page(relname text, pageno integer) RETURNS TABLE(itemoffset smallint, ctid tid) AS $$ SELECT itemoffset, ctid FROM bt_page_items(relname,pageno); $$ LANGUAGE SQL;
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрди-рдкреЗрдЬ рд╡реИрдХреНрдпреВрдо рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкрдВрдХреНрддрд┐ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдмрджрд▓рддреЗ рд╣реИрдВ:
=> INSERT INTO hot VALUES (1, 'A'); => UPDATE hot SET s = 'B'; => UPDATE hot SET s = 'C'; => UPDATE hot SET s = 'D';
рдЕрдм рдкреГрд╖реНрда рдореЗрдВ рдЪрд╛рд░ tuples рд╣реИрдВ:
=> SELECT * FROM heap_page('hot',0);
ctid | state | xmin | xmax | hhu | hot | t_ctid -------+--------+----------+----------+-----+-----+-------- (0,1) | normal | 3979 (c) | 3980 (c) | | | (0,2) (0,2) | normal | 3980 (c) | 3981 (c) | | | (0,3) (0,3) | normal | 3981 (c) | 3982 | | | (0,4) (0,4) | normal | 3982 | 0 (a) | | | (0,4) (4 rows)
рдЬреИрд╕реА рдХрд┐ рдЙрдореНрдореАрдж рдереА, рд╣рдо
fillfactor
рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЧрдП рд╣реИрдВред рдпрд╣ рдкреГрд╖реНрда рдЖрдХрд╛рд░ рдФрд░
upper
рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ: рдпрд╣ рдкреГрд╖реНрда рдЖрдХрд╛рд░ рдХреЗ 75% рдХреЗ рдмрд░рд╛рдмрд░ рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рдЬреЛ 6144 рдмрд╛рдЗрдЯреНрд╕ рдмрдирд╛рддрд╛ рд╣реИред
=> SELECT lower, upper, pagesize FROM page_header(get_raw_page('hot',0));
lower | upper | pagesize -------+-------+---------- 40 | 64 | 8192 (1 row)
рдЗрд╕рд▓рд┐рдП, рдЬрдм рдкреГрд╖реНрда рдЕрдЧрд▓реА рдмрд╛рд░ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрди-рдкреЗрдЬ рд╡реИрдХреНрдпреВрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдЗрдП рдЗрд╕рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред
=> UPDATE hot SET s = 'E'; => SELECT * FROM heap_page('hot',0);
ctid | state | xmin | xmax | hhu | hot | t_ctid -------+--------+----------+-------+-----+-----+-------- (0,1) | dead | | | | | (0,2) | dead | | | | | (0,3) | dead | | | | | (0,4) | normal | 3982 (c) | 3983 | | | (0,5) (0,5) | normal | 3983 | 0 (a) | | | (0,5) (5 rows)
рд╕рднреА рдореГрдд рдЯреБрдкрд▓реНрд╕ (0,1), (0,2) рдФрд░ (0,3) рдХреЛ рдЦрд╛рд▓реА рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЙрд╕рдХреЗ рдмрд╛рдж рдореБрдХреНрдд рд╕реНрдерд╛рди рдореЗрдВ рдПрдХ рдирдпрд╛ рдЯрдкрд▓ (0.5) рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡реИрдХреНрдпреВрдо рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗ рдЯреБрдкрд▓реНрд╕ рдХреЛ рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ рдкреГрд╖реНрда рдХреЗ рдЙрдЪреНрдЪ рдкрддреЛрдВ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рднреА рдЦрд╛рд▓реА рд╕реНрдерд╛рди рдПрдХ рдирд┐рд░рдВрддрд░ рдХреНрд╖реЗрддреНрд░ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдП рдЬрд╛рдПрдВред рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рддрджрдиреБрд╕рд╛рд░ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдПрдХ рдкреГрд╖реНрда рдореЗрдВ рдореБрдХреНрдд рд╕реНрдерд╛рди рдХреЗ рд╡рд┐рдЦрдВрдбрди рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдЖрддреА рд╣реИред
рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рд╕реЗ рд░реЗрдлрд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рд╡реИрдХреНрдпреВрдо рдЯреНрдпреВрдкрд▓реНрд╕ рдХреЛ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗред рдЖрдЗрдП
hot_s
рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдкрд╣рд▓реЗ рдкреГрд╖реНрда рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ (рдХреНрдпреЛрдВрдХрд┐ рдкреГрд╖реНрда рд╢реВрдиреНрдп рдкрд░
hot_s
рдХрд╛ рдХрдмреНрдЬрд╛ рд╣реИ):
=> SELECT * FROM index_page('hot_s',1);
itemoffset | ctid ------------+------- 1 | (0,1) 2 | (0,2) 3 | (0,3) 4 | (0,4) 5 | (0,5) (5 rows)
рд╣рдо рдЕрдиреНрдп рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рднреА рдпрд╣реА рддрд╕реНрд╡реАрд░ рджреЗрдЦрддреЗ рд╣реИрдВ:
=> SELECT * FROM index_page('hot_id',1);
itemoffset | ctid ------------+------- 1 | (0,5) 2 | (0,4) 3 | (0,3) 4 | (0,2) 5 | (0,1) (5 rows)
рдЖрдк рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреЙрдЗрдВрдЯ рдЯреВ рдЯреЗрдмрд▓ рд░реЛрдпрд░реНрд╕ рдПрдХ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рдпрд╣рд╛рдБ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдЯреНрдпреВрдкрд▓реНрд╕ рдХрд╛ рдПрдХ рд╣реА рдореВрд▓реНрдп рд╣реИ: id = 1ред рд▓реЗрдХрд┐рди рдкрд┐рдЫрд▓реЗ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ, рд╕рдВрдХреЗрдд
s
рдХреЗ рдореВрд▓реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЖрджреЗрд╢ рджрд┐рдП рдЧрдП рд╣реИрдВ, рдФрд░ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЗрдВрдбреЗрдХреНрд╕ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд╕рд╛рде, PostgreSQL рдЯрдкрд▓ рдЖрдЗрдбреЗрдВрдЯреАрд╡рд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ (0,1), (0,2) рдпрд╛ (0,3) рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рддрдм рддрд╛рд▓рд┐рдХрд╛ рдкреГрд╖реНрда рд╕реЗ рдЙрдкрдпреБрдХреНрдд рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╕реВрдЪрдХ рдХреА "рдореГрдд" рд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг, PostgreSQL рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛ рдХрд┐ рдРрд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЕрдм рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрдЧрд╛ред (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдмрд╛рд░ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдкрдВрдХреНрддрд┐ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, PostgreSQL рд╕реВрдЪрдХрд╛рдВрдХ рдкреГрд╖реНрда рдореЗрдВ рд╕реВрдЪрдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ рддрд╛рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдкреГрд╖реНрда рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред)
рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЗрди-рдкреЗрдЬ рд╡реИрдХреНрдпреВрдо рдХреЗрд╡рд▓ рдПрдХ рдЯреЗрдмрд▓ рдкреЗрдЬ рдХреЗ рднреАрддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡реИрдХреНрдпреВрдо рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЧрд░реНрдо рдЕрдкрдбреЗрдЯ
рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рд╕рднреА рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдХреНрдпреЛрдВ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрдВрдХреНрддрд┐ рдХреЗ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП, рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рд╕рднреА рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛: рдПрдХ рдмрд╛рд░ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрди рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдлрд╝реАрд▓реНрдб рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдХреБрд╢рд▓ рдирд╣реАрдВ рд╣реИред
рджреВрд╕рд░рд╛, рдЕрдиреБрдХреНрд░рдорд┐рдд рдРрддрд┐рд╣рд╛рд╕рд┐рдХ tuples рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЬрдорд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рддрдм рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рде tuples рдХреЗ рд╕рд╛рде рд╡реИрдХреНрдпреВрдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рд╣рдо рдереЛрдбрд╝рд╛ рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, PostgreSQL рдореЗрдВ рдмреА-рдЯреНрд░реА рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рд╣реИред рдпрджрд┐ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдореЗрдВ рдирдИ рдкрдВрдХреНрддрд┐ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИ, рддреЛ рдкреЗрдЬ рдХреЛ рджреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рд╕рднреА рдбреЗрдЯрд╛ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЗрд╕реЗ рдкреЗрдЬ рдХрд╛ рд╡рд┐рднрд╛рдЬрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рджреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдкреГрд╖реНрда рдПрдХ рдореЗрдВ рд╡рд┐рд▓рдп рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдпрджрд┐ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рднреА рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЖрдХрд╛рд░ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рдЯреЗрдмрд▓ рдкрд░ рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрддрдиреА рд╣реА рдЬрдЯрд┐рд▓рддрд╛рдПрдВ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдХрд┐рд╕реА рд╕реНрддрдВрдн рдореЗрдВ рдРрд╕рд╛ рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдЕрдиреБрдХреНрд░рдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдмреА-рдЯреНрд░реА рдкрдВрдХреНрддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреБрдВрдЬреА рдХрд╛ рд╕рдорд╛рди рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╣реИ рдХрд┐ рдЕрдиреБрдХреВрд▓рди рдЬрд┐рд╕реЗ
HOT рдЕрдкрдбреЗрдЯ (рд╣реАрдк-рдУрдирд▓реА рдЯреНрдпреВрдкрд▓ рдЕрдкрдбреЗрдЯ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдЕрджреНрдпрддрди рдХреЗ рджреМрд░рд╛рди, рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реЛрддреА рд╣реИ, рдЬреЛ рддрд╛рд▓рд┐рдХрд╛ рдкреГрд╖реНрда рдореЗрдВ рдкрдВрдХреНрддрд┐ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреА рд╣реИред рдФрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯреЗрдмрд▓ рдкреЗрдЬ рдХреЗ рдЕрдВрджрд░ рд╣реИ, рдХрд┐ рдЯреНрдпреВрдкрд▓реНрд╕ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЖрдпреЛрдЬрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ:
- рдЕрджреНрдпрддрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╣реИрдВ, рд╣реАрдк рд╣реЙрдЯ рдЕрдкрдбреЗрдЯреЗрдб рдмрд┐рдЯ рдХреЗ рд╕рд╛рде рд▓реЗрдмрд▓ рдХреА рдЧрдИ рд╣реИрдВред
- рд╕реВрдЪрдХрд╛рдВрдХ рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╣реАрдк рдЯрдкрд▓ рдмрд┐рдЯ рдХреЗ рд╕рд╛рде рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ
ctid
рдлрд╝реАрд▓реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдЗрдВрдбреЗрдХреНрд╕ рд╕реНрдХреИрди рдХреЗ рджреМрд░рд╛рди, PostgreSQL рдПрдХ рдЯреЗрдмрд▓ рдкреЗрдЬ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЯрдкрд▓ рдкрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣реАрдк рд╣реЙрдЯ рдЕрдкрдбреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЯрдкрд▓ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП HOT рдЪреЗрди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕рднреА рдЯреБрдкрд▓реНрд╕ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджреГрд╢реНрдпрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИред
рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХ HOT рдЕрдкрдбреЗрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдЗрдП рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рд╣рдЯрд╛рдПрдВ рдФрд░ рдЯреЗрдмрд▓ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░реЗрдВред
=> DROP INDEX hot_s; => TRUNCATE TABLE hot;
рдЕрдм рд╣рдо рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рдЗрдВрд╕рд░реНрдЯ рдФрд░ рдЕрдкрдбреЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВред
=> INSERT INTO hot VALUES (1, 'A'); => UPDATE hot SET s = 'B';
рдФрд░ рдпрд╣ рд╣рдо рддрд╛рд▓рд┐рдХрд╛ рдкреГрд╖реНрда рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ:
=> SELECT * FROM heap_page('hot',0);
ctid | state | xmin | xmax | hhu | hot | t_ctid -------+--------+----------+-------+-----+-----+-------- (0,1) | normal | 3986 (c) | 3987 | t | | (0,2) (0,2) | normal | 3987 | 0 (a) | | t | (0,2) (2 rows)
рдкреГрд╖реНрда рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ:
- рд╣реАрдк рд╣реЙрдЯ рдЕрдкрдбреЗрдЯреЗрдб рдзреНрд╡рдЬ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐
ctid
рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред - рд╣реАрдк рдУрдирд▓реА рдЯрдкрд▓ рдзреНрд╡рдЬ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЯрдкрд▓ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рд╣реИред
рдЖрдЧреЗ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдврд╝рддреА рдЬрд╛рдПрдЧреА (рдкреГрд╖реНрда рдХреЗ рднреАрддрд░):
=> UPDATE hot SET s = 'C'; => UPDATE hot SET s = 'D'; => SELECT * FROM heap_page('hot',0);
ctid | state | xmin | xmax | hhu | hot | t_ctid -------+--------+----------+----------+-----+-----+-------- (0,1) | normal | 3986 (c) | 3987 (c) | t | | (0,2) (0,2) | normal | 3987 (c) | 3988 (c) | t | t | (0,3) (0,3) | normal | 3988 (c) | 3989 | t | t | (0,4) (0,4) | normal | 3989 | 0 (a) | | t | (0,4) (4 rows)
рд▓реЗрдХрд┐рди рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкреНрд░рдореБрдЦ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрджрд░реНрдн рд╣реИ:
=> SELECT * FROM index_page('hot_id',1);
itemoffset | ctid ------------+------- 1 | (0,1) (1 row)
рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, HOT рдЕрдкрдбреЗрдЯ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЕрдиреБрдХреНрд░рдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдХреБрдЫ рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдПрдХ рдирдИ рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рд╕рдВрджрд░реНрдн рд╣реЛрдЧрд╛, рдФрд░ рдпрд╣ рдЗрд╕ рдЕрдиреБрдХреВрд▓рди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИред
рдЕрдиреБрдХреВрд▓рди рдХреЗрд╡рд▓ рдПрдХ рдкреГрд╖реНрда рдХреЗ рднреАрддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд▓рдирд╛ рдЕрдиреНрдп рдкреГрд╖реНрдареЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
HOT рдЕрдкрдбреЗрдЯ рдХреЗ рджреМрд░рд╛рди рдЗрди-рдкреЗрдЬ рд╡реИрдХреНрдпреВрдо
HOT рдЕрдкрдбреЗрдЯ рдХреЗ рджреМрд░рд╛рди рд╡реИрдХреНрдпреВрдо рдХрд░рдирд╛ рдЗрди-рдкреЗрдЬ рд╡реИрдХреНрдпреВрдо рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖, рд▓реЗрдХрд┐рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдорд▓рд╛ рд╣реИред
рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рд╣рдо рдкрд╣рд▓реЗ рд╣реА
fillfactor
рд╕реАрдорд╛ рдкрд╛рд░ рдХрд░
fillfactor
, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд▓реЗ рдЕрджреНрдпрддрди рдореЗрдВ рдПрдХ рдЗрди-рдкреЗрдЬ рд╡реИрдХреНрдпреВрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рдкреЗрдЬ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИред рдЗрд╕ HOT рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкреНрд░рдореБрдЦ рдХреЛ рд╣рдореЗрд╢рд╛ рд╡рд╣реА рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдБ рдпрд╣ рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рд╣реИ, рдЬрдмрдХрд┐ рдмрд╛рдХреА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рд╡реЗ рдмрд╛рд╣рд░ рд╕реЗ рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред
рд╣реЗрдб рдкреЙрдЗрдВрдЯрд░ рдХреЛ рди рдЫреВрдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдВрдмреЛрдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЗрдВрдбреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдкреЙрдЗрдВрдЯрд░ - (0,1) рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ - "рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ" рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреБрдХреНрдд рдЯреНрдпреВрдкрд▓ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред
=> UPDATE hot SET s = 'E'; => SELECT * FROM heap_page('hot',0);
ctid | state | xmin | xmax | hhu | hot | t_ctid -------+---------------+----------+-------+-----+-----+-------- (0,1) | redirect to 4 | | | | | (0,2) | normal | 3990 | 0 (a) | | t | (0,2) (0,3) | unused | | | | | (0,4) | normal | 3989 (c) | 3990 | t | t | (0,2) (4 rows)
рдзреНрдпрд╛рди рджреЗрдВ:
- рдЯреНрдпреВрдкрд▓реНрд╕ (0,1), (0,2) рдФрд░ (0,3) рдХреЛ рд╡реИрдХреНрдпреВрдо рдХрд┐рдпрд╛ рдЧрдпрд╛ред
- рд╣реЗрдб рдкреЙрдЗрдВрдЯрд░ (0,1) рдмрдирд╛ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ "рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ" рд╕реНрдерд┐рддрд┐ рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд▓реА рд╣реИред
- рдирдИ рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг рдУрд╡рд░рд╡реЛрдЯ (0,2) рдХреЗ рдмрд╛рдж рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕ рдЯрдкрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рдереЗ, рдФрд░ рдкреЙрдЗрдВрдЯрд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ("рдЕрдкреНрд░рдпреБрдХреНрдд" рд╕реНрдерд┐рддрд┐)ред
рдЪрд▓реЛ рдХрдИ рдмрд╛рд░ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:
=> UPDATE hot SET s = 'F'; => UPDATE hot SET s = 'G'; => SELECT * FROM heap_page('hot',0);
ctid | state | xmin | xmax | hhu | hot | t_ctid -------+---------------+----------+----------+-----+-----+-------- (0,1) | redirect to 4 | | | | | (0,2) | normal | 3990 (c) | 3991 (c) | t | t | (0,3) (0,3) | normal | 3991 (c) | 3992 | t | t | (0,5) (0,4) | normal | 3989 (c) | 3990 (c) | t | t | (0,2) (0,5) | normal | 3992 | 0 (a) | | t | (0,5) (5 rows)
рдЕрдЧрд▓реЗ рдЕрджреНрдпрддрди рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкреЗрдЬ рд╡реИрдХреНрдпреВрдорд┐рдВрдЧ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ:
=> UPDATE hot SET s = 'H'; => SELECT * FROM heap_page('hot',0);
ctid | state | xmin | xmax | hhu | hot | t_ctid -------+---------------+----------+-------+-----+-----+-------- (0,1) | redirect to 5 | | | | | (0,2) | normal | 3993 | 0 (a) | | t | (0,2) (0,3) | unused | | | | | (0,4) | unused | | | | | (0,5) | normal | 3992 (c) | 3993 | t | t | (0,2) (5 rows)
рдлрд┐рд░ рд╕реЗ, рдХреБрдЫ рдЯреБрдкрд▓реНрд╕ рдХреЛ рд╡реИрдХреНрдпреВрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реВрдЪрдХ рдХреЛ рдЪреЗрди рдХреЗ рд╕рд┐рд░ рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖: рдпрджрд┐ рд╕реНрддрдВрднреЛрдВ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдХреНрд╕рд░ рдЕрджреНрдпрддрди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрджреНрдпрддрди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреГрд╖реНрда рд╕реНрдерд╛рди рдЖрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
fillfactor
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрдо рд╕реЗ рдХрдо
fillfactor
, рдЕрдзрд┐рдХ рдЦрд╛рд▓реА рд╕реНрдерд╛рди рдПрдХ рдкреГрд╖реНрда рдореЗрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рднреМрддрд┐рдХ рдЖрдХрд╛рд░ рдмрдврд╝рддрд╛ рд╣реИред
рдПрдХ рдЧрд░реНрдо рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЯреВрдЯрдирд╛
рдпрджрд┐ рдкреГрд╖реНрда рдХреЛ рдирдпрд╛ рдЯрдкрд▓ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рд╕реНрдерд╛рди рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ, рддреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЯреВрдЯ рдЬрд╛рдПрдЧреАред рдФрд░ рд╣рдореЗрдВ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдкреГрд╖реНрда рдореЗрдВ рд╕реНрдерд┐рдд рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╕рдВрджрд░реНрдн рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдПрдХ рд╕рдорд╡рд░реНрддреА рд▓реЗрдирджреЗрди рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ рдмрдирд╛рдПрдВред
| => BEGIN ISOLATION LEVEL REPEATABLE READ; | => SELECT count(*) FROM hot;
| count | ------- | 1 | (1 row)
рд╕реНрдиреИрдкрд╢реЙрдЯ рдкреГрд╖реНрда рдореЗрдВ рдЯреБрдкрд▓реНрд╕ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ред рдЕрдм рдкрд╣рд▓реЗ рд╕рддреНрд░ рдореЗрдВ рдПрдХ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:
=> UPDATE hot SET s = 'I'; => UPDATE hot SET s = 'J'; => UPDATE hot SET s = 'K'; => SELECT * FROM heap_page('hot',0);
ctid | state | xmin | xmax | hhu | hot | t_ctid -------+---------------+----------+----------+-----+-----+-------- (0,1) | redirect to 2 | | | | | (0,2) | normal | 3993 (c) | 3994 (c) | t | t | (0,3) (0,3) | normal | 3994 (c) | 3995 (c) | t | t | (0,4) (0,4) | normal | 3995 (c) | 3996 | t | t | (0,5) (0,5) | normal | 3996 | 0 (a) | | t | (0,5) (5 rows)
рдЕрдЧрд▓реЗ рдЕрджреНрдпрддрди рдореЗрдВ, рдкреГрд╖реНрда рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрди-рдкреЗрдЬ рд╡реИрдХреНрдпреВрдо рдХреБрдЫ рднреА рдЦрд╛рд▓реА рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реЛрдЧрд╛:
=> UPDATE hot SET s = 'L';
| => COMMIT;
=> SELECT * FROM heap_page('hot',0);
ctid | state | xmin | xmax | hhu | hot | t_ctid -------+---------------+----------+----------+-----+-----+-------- (0,1) | redirect to 2 | | | | | (0,2) | normal | 3993 (c) | 3994 (c) | t | t | (0,3) (0,3) | normal | 3994 (c) | 3995 (c) | t | t | (0,4) (0,4) | normal | 3995 (c) | 3996 (c) | t | t | (0,5) (0,5) | normal | 3996 (c) | 3997 | | t | (1,1) (5 rows)
рдЯрдкрд▓ (0,5) рдореЗрдВ, (1,1) рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИ, рдЬреЛ рдкреЗрдЬ 1 рдореЗрдВ рд╣реИред
=> SELECT * FROM heap_page('hot',1);
ctid | state | xmin | xmax | hhu | hot | t_ctid -------+--------+------+-------+-----+-----+-------- (1,1) | normal | 3997 | 0 (a) | | | (1,1) (1 row)
рдЕрдм рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЗрд╕рдХреА рдЧрд░реНрдо рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рд╢реБрд░реБрдЖрдд рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреА рд╣реИ:
=> SELECT * FROM index_page('hot_id',1);
itemoffset | ctid ------------+------- 1 | (1,1) 2 | (0,1) (2 rows)
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд╕реНрддреБрддрдГ рдЗрди-рдкреЗрдЬ рд╡реИрдХреНрдпреВрдо рдФрд░ HOT рдЕрдкрдбреЗрдЯреНрд╕ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрднрд╛рд╡ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдЙрддреНрддрд░ рддрд▓рд╛рд╢рдиреЗ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЖрдкрдХреЛ README.HOT рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ ред
рдкрд░ рдкрдврд╝реЗрдВ ред