แแแแ แแ แ แ แแแฎแแแแ, แแฃ แแกแแแ แฃแกแแแแแแแ แขแแแ (แแ แซแแแแแแแแแ OLAP แแแขแแแ แแแ OLTP แแแแแชแแแแ แแแแแแ) แฏแแ แแแแแ แแ แกแแแแแก? แฒ แแแแ แกแฃแคแแ แแฅแขแแฃแ แแ แแแแแกแแชแแแแแ แแแแแแ แแแ แจแแแแ แขแงแแฃแแ แฎแแ แ แแ แซแแแ แแแแฎแแแแแ แแ แแ แแแแแแฏแแแ แ แแแ?
แกแแแแแแกแแแก แแแจแแ
แแแ แแแ แ แแแจแ, แแแแแ แแแแแกแแแฆแแ แแ, แ แ แแ แแก แแ แแแแแแ, แ แแแแแก แแแแแแ แแแแช แแแแแแ แแ แ แแแแ แจแแแซแแแแ แฌแแ แแแแจแแแก.
แ แแแแ แช แฌแแกแ, แแก แกแแขแฃแแชแแ แฎแแแแ แจแแแแ แแแแ แแแขแแ แ แแแแแแแแ, แแแแ แแ แ แแแแแจแแช แแก แฎแแแแ แแแแ แ แชแแแแแแแ. แ แแแแ แช แฌแแกแ, แแก แแ แแแแกแฎแแแแแแฃแแ แแแขแ แ/แแแ แแแแขแแแ/แ แแแขแแแแแแ, แ แแแแแแแช แฎแจแแ แแ แกแ แฃแแแแแ UPDATE, แแ แแฃแคแแ -แ แแแ แแแแแแแแแแก แแฃแแแแแแ แแแแแแแแ แ แแแแแแแก แแแกแแแฃแจแแแแแแแ, แ แแแแแแ แฉแแแแฌแแ แแแ แแฃแแแแแแ INSERT/DELETE แฎแแแแ.
แจแแแแชแแแแ แแแแแแ แแแแแ แแแ แแแแขแ แ แแแขแแแแแแแ:
CREATE TABLE tbl(k text PRIMARY KEY, v integer);
CREATE INDEX ON tbl(v DESC); -- ะฟะพ ััะพะผั ะธะฝะดะตะบัั ะฑัะดะตะผ ัััะพะธัั ัะตะนัะธะฝะณ
INSERT INTO
tbl
SELECT
chr(ascii('a'::text) + i) k
, 0 v
FROM
generate_series(0, 25) i;
แแ แแแ แแแแแฃแ แแ, แกแฎแแ แแแแจแแ แจแ, แแฌแงแแแ แแ แซแแแ, แแ แซแแแ แแแแฎแแแแ, แ แแฃแแ แกแขแแขแแกแขแแแแก แจแแแ แแแแแ, แแแแ แแ แแ แแแแฅแแแแแแก แฉแแแแก แแแแแแแแ:
SELECT pg_sleep(10000);
แแฎแแ แฉแแแ แแแแ แฏแแ แแแแฎแแแแ แแ แ-แแ แแ แแ แแชแฎแแแแแก แแแแจแแแแแแแแก. แแฅแกแแแ แแแแแขแแก แกแแฌแแแแแแกแแแแก, แแแแแ แแแแแแแแแ แแก
DO $$
DECLARE
i integer;
tsb timestamp;
tse timestamp;
d double precision;
BEGIN
PERFORM dblink_connect('dbname=' || current_database() || ' port=' || current_setting('port'));
FOR i IN 1..10000 LOOP
tsb = clock_timestamp();
PERFORM dblink($e$UPDATE tbl SET v = v + 1 WHERE k = 'a';$e$);
tse = clock_timestamp();
IF i % 1000 = 0 THEN
d = (extract('epoch' from tse) - extract('epoch' from tsb)) * 1000;
RAISE NOTICE 'i = %, exectime = %', lpad(i::text, 5), lpad(d::text, 5);
END IF;
END LOOP;
PERFORM dblink_disconnect();
END;
$$ LANGUAGE plpgsql;
NOTICE: i = 1000, exectime = 0.524
NOTICE: i = 2000, exectime = 0.739
NOTICE: i = 3000, exectime = 1.188
NOTICE: i = 4000, exectime = 2.508
NOTICE: i = 5000, exectime = 1.791
NOTICE: i = 6000, exectime = 2.658
NOTICE: i = 7000, exectime = 2.318
NOTICE: i = 8000, exectime = 2.572
NOTICE: i = 9000, exectime = 2.929
NOTICE: i = 10000, exectime = 3.808
แฒ แ แแแฎแแ? แ แแขแแ แแฃแแแแช แแ แแ แฉแแแแฌแแ แแก แฃแแแ แขแแแแกแ แแแแแฎแแแแแกแแแแก แจแแกแ แฃแแแแแก แแ แ แจแแแชแแ แแ 7-แฏแแ โ 0.524ms-แแแ 3.808ms-แแแ? แแ แฉแแแแ แ แแแขแแแแ แกแฃแ แฃแคแ แ แแแแ แแแ แแแแ.
แแก แงแแแแแคแแ แ MVCC-แแก แแ แแแแ.
แแก แงแแแแแคแแ แ แแฎแแแ
VACUUM VERBOSE tbl;
INFO: vacuuming "public.tbl"
INFO: "tbl": found 0 removable, 10026 nonremovable row versions in 45 out of 45 pages
DETAIL: 10000 dead row versions cannot be removed yet, oldest xmin: 597439602
แแฐ, แแแกแแฌแแแแแ แแ แแคแแ แแ! แแแ แแแแแฃแ แแ แแแจแแแแฃแแ แแแแฎแแแแ แฎแแแก แแแแจแแแก - แแแแแก แแ แแแแแก, แแแก แจแแแซแแแแ แแแแกแแ แแแฃแแแแก แแ แแแ แกแแแแแ (แ แ แแฃ?) แแแแแ แแแ แแ แแกแแแ แแแกแแแแก แฎแแแแแกแแฌแแแแแ แฃแแแ แแงแแก. แแ แแแแขแแแแช แแ VACUUM FULL แแ แแแแแแฎแแแ แแแ.
แแแแแแแก "แแแ แแแ".
แแแแ แแ แฉแแแ แแฃแกแขแแ แแแชแแ, แ แแ แแ แจแแแแแฎแแแก แฉแแแแ แชแฎแ แแแ แแ แกแญแแ แแแแ. แแแแขแแ, แฉแแแ แแแแแ แแแชแแแแแ แกแแกแขแแแแก แแฃแจแแแแแก แแแแแแแขแฃแ แแฆแแ แแแแ แแแแ แฃแแแแแก, แชแฎแ แแแแแแ แงแแแแแคแ แแก แแ แแกแแญแแ แ แแแแฆแแแแ - แกแฃแ แแชแแ แ โแฎแแแแโ, แ แแแแแ VACUUM แแแแแแแก.
แฃแคแ แ แแแกแแแแแแ, แแแแแ แจแแแฎแแแแ แแฃแคแแ แฃแแ แชแฎแ แแแแก แจแแแแฎแแแแแก แแแแแแแแก. แแแฃ แแ แแก INSERT/DELETE-แแก แแแแ แแแแแแ แแ แแแแฏแแ แชแฎแ แแแ แกแ แฃแแแแ แชแแ แแแแแ. แแแแ แแ แแฃ แชแแ แแแแ แแ แแ แแก, แฉแแแ แฃแแแ แจแแแแแฎแแ แแแกแ แแแแแแแแ แ แจแแแแแ แกแ.
#0: แกแแขแฃแแชแแแก แจแแคแแกแแแ
แแแกแแแแแแ, แ แแ แจแแแแซแแแแ แกแชแแแแ แ แแแแ แแแแแแแแ แแแแแแแกแแแ แงแแแแแ แแแแ แแชแแแก แจแแแแแแแช, แแแแ แแ แแแแก แแแแ แแแ แ แแ แแฅแแก - แขแแฅแแแแฃแ แ แฎแแ แฏแแแ แแจแแแ แแ แฃแคแ แ แแแขแ แแฅแแแแ, แแแแ แ แกแแแแแแ แแแแฎแแแแแแแก แแแแขแแ แฃแแแ แแแแแแ.
แแแแแ แฉแแแแแแงแแแแแแ แแ แแขแแ แแฃแแแแ - "แแแฅแแแแแแแก แแ แแ", แแฃ:
- VACUUM แแแแฅแแแแแ แกแแแแแแ แแแแ แฎแแแก แฌแแ
แฉแแแ แแแแแ แแซแแแ แแแขแแแ แแแแก, แแกแ แ แแ แแงแแก 60 แฌแแแ แแแแ [แแแขแ]แแแแฃแฃแแแแแ. - แคแแแแแฃแ แ แแแแแแแก แแแแ แกแแแแแแแแ แแแแแ
แแแแแ แแแแแกแแแฆแแ แแ แ แแแแ แช แแ แฏแแ แแแขแ แแแแ แแแแแก แ แแแแแแแแ (8KB แแแแแแแ) แแแแแแแแฃแ แแแแแกแแแ แจแแแแ แแแแ - 1 แแแแ แแ แแแแกแแแแก + 1 แแแแ แแแแแแฃแแ แแแแแฅแกแแกแแแแก - แแแขแแแชแแฃแ แแ แชแแ แแแแ แแแแแแแกแแแแก. แแฃ แฉแแแ แแแแแ, แ แแ แแแ แแแแฃแแ แ แแแแแแแแแก แแแแแชแแแแแ แงแแแแแแแแก แแแ แฉแแแ แแฃแคแแ แจแ โแแแ แแแแฃแ แแโ, แแแแแแจแแฌแแแแแแ แแ แคแแ แแฃแแแก แจแแกแฌแแ แแแ.
แแแแแกแขแฃแ แแแแก แแแแฎแแแแ
SELECT
relpages
, ((
SELECT
count(*)
FROM
pg_index
WHERE
indrelid = cl.oid
) + 1) << 13 size_norm -- ััั ะฟัะฐะฒะธะปัะฝะตะต ะดะตะปะฐัั * current_setting('block_size')::bigint, ะฝะพ ะบัะพ ะผะตะฝัะตั ัะฐะทะผะตั ะฑะปะพะบะฐ?..
, pg_total_relation_size(oid) size
, coalesce(extract('epoch' from (now() - greatest(
pg_stat_get_last_vacuum_time(oid)
, pg_stat_get_last_autovacuum_time(oid)
))), 1 << 30) vaclag
FROM
pg_class cl
WHERE
oid = $1::regclass -- tbl
LIMIT 1;
relpages | size_norm | size | vaclag
-------------------------------------------
0 | 24576 | 1105920 | 3392.484835
#1: แฏแแ แแแแแ แแแแฃแฃแแ
แฌแแแแกแฌแแ แแแ แแแชแแแแ แแแ แแแแแฃแ แ แจแแแแแฎแแ แแแแจแแแแแแแแแ แแแแ แแแ แแฃ แแ แ - แแฃแกแขแแ แ แแแแแแ แฉแแแแฌแแ แ แแแฎแแ โแแแซแแแแแแฃแแโ แแแฌแงแแแแก แแฆแแแแ. แแแแขแแ, แ แแแแกแแช แแแแแแฌแงแแแขแ แ แแแแ แแ แแแแแแฃแจแแแ แชแฎแ แแแ, แแแแแกแแแแ แจแแแแฎแแแแแจแ, แฏแแ แฃแแแ แจแแแแกแ แฃแแแ แแแกแแ แแแแฃแฃแแ - VACUUM FULL-แแกแแแ แแแแกแฎแแแแแแแ, แแก แแ แฃแจแแแก แฎแแแก แฌแแแแแฎแแ-แฉแแฌแแ แแก แแแแแชแแแแแแแ แแฃแจแแแแแก แแแ แแแแแฃแ แแ แแชแแกแแแก.
แแแแแแ แแฃแแแ, แแแก แจแแฃแซแแแ แแแฃแงแแแแแแแแ แแแแกแฃแคแแแแแก แฃแแแขแแกแ แแแฌแแแ, แ แแกแ แฌแแจแแแช แแแแแแ. แแแแฎ, แแ แแ แชแฎแ แแแแก แจแแแแแแแ แจแแแแแฎแแแแ แฉแแแแแแ แฌแแแ "แชแฎแแแ แฅแแจแแ", แ แแช แจแแแแชแแ แแแก แแแ แฎแแแแ แซแแแแแแแก - แแ, แจแแกแแแแแแกแแ, แฉแแแแ แแแแกแแฎแฃแ แแแแก แขแ แแแแแฅแชแแแก แแแแ แกแฎแแแแแก แแแแแแแแแก แแแแแแ แแ แแก.
#2: แแ แแก แแแแแ แกแแฎแแจแ?
แแแแแ แจแแแแแแฌแแแ, แแ แแก แแฃ แแ แ แ แแแแ แชแฎแ แแแจแ แกแแแ แแแ:
TABLE tbl LIMIT 1;
แแฃ แแ แช แแ แแ แฉแแแแฌแแ แ แแ แแแ แฉแ, แแแจแแ แฉแแแ แจแแแแแซแแแ แแแแแแแ แแแแ แ แ แแ แแแแฃแจแแแแแแแ, แฃแแ แแแแ แแแแแแแแแ
แแก แแแฅแแแแแแก แแกแแแ, แ แแแแ แช แฃแแแ แแแ DELETE แแ แซแแแแแ แแแแแแฃแแ แชแฎแ แแแแกแแแแก, แแแแ แแ แแแแ แแ แฃแคแ แ แกแฌแ แแคแแ, แ แแแแแ แแก แ แแแแฃแ แแ แแ แแกแแแแแ แแแก แชแฎแ แแแแแก. แฃแคแ แ แแแขแแช, แแก แแแฃแงแแแแแแแแ แแแแแแกแฃแคแแแแก แแแกแแแ แแแแแแก, แแแแขแแ แแ แแ แแก แกแแญแแ แ แจแแแแแ แแแแฃแฃแแแก แแแแ แแชแแแก แจแแกแ แฃแแแแ.
แแญแแ แแแแแ แแฃ แแ แ แชแฎแ แแแแก แแแแแแแแแแ แแแแก แแ แแชแฎแแแแแก แแแแแขแแแ แแแ (RESTART IDENTITY) แแฅแแแแ แแแแแกแแฌแงแแแขแแ.
#3: แงแแแแ - แแแ แแแแแแแ!
แแแแแแแแ แฉแแแ แแแฃแจแแแแ แฃแแฆแ แแกแแ แแแแแฃแ แแแขแฃแ แแแ แแแแจแ, แกแแแแ แแแแแฌแแแแ แชแฎแ แแแจแ แฉแแแแฌแแ แแแแก แแ แแ แกแแแแแแก, แแแฆแแชแแก แจแแแซแแ แฃแแแ แแแแฌแแ แ แแฅ แ แแฆแแช. แฉแแแ แแ แฃแแแ แแแแแแ แแแ แแก แแแคแแ แแแชแแ, แแแ แ แ แ? แแกแแ, แฉแแแ แฃแแแ แแแแ แฌแแฃแแแแ, แ แแ แแแแแแแแแแแแแ แแแ แแแแ แแแฌแแ แก.
แแแแกแแแแแก แฉแแแ แฃแแแ แฉแแ แแแ แกแแ แแแแแแแชแแแแ- แแแแแแชแแ แฉแแแแ แขแ แแแแแฅแชแแแกแแแแก (แแแแฎ, แแฅ แแแฌแงแแแ แขแ แแแแแฅแชแแแก) แแ แฉแแแแขแแ แแแแแแ โแแญแแแ แแโ:
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
LOCK TABLE tbl IN ACCESS EXCLUSIVE MODE;
แแแแแแแแแก แแก แแแแ แแแแแกแแแฆแแ แแแ แแ แแแแ แแชแแแแแ, แ แแแแแแ แจแแกแ แฃแแแแแช แแแแแแ แแแกแแ.
#4: แแแขแแ แแกแแ แแแแคแแแฅแขแ
แฉแแแ แแฅ แแแแแแแแ แ แแ แแแแแแ, แ แแ "แแแแแแแแก" แแแจแแแ - แ แ แแแฎแแแแ, แแฃ แแแแแ แแ แแแแแแขแจแ แแแกแแ แแฅแขแแฃแ แ แแงแ, แแแแแแแแแ, แแแกแแแ แแแแฎแฃแแแแก? แแ แแแแแแก แแแแแจแแแแแก แแแแแแแแจแ โแแแแแแแแแแโ แแ แฌแแแแแฎแแแก แแกแฃแ แแแแแแ แแแแแแแแงแ แแแแแ...
แแแแก แแแแแแแ แแกแแชแแแแแแแ, แฉแแแ โแจแแแฌแแ แแแ แแแแกโ - แแฃ แฉแแแ แแแ แจแแแซแแแแ แกแแแแขแแก แแแแแแแแ แแแ แแแแฃแแ (แแแกแแฆแแแ แแแแแ) แแ แแจแ, แแแจแแ แแแแแฆแแแ แแแแแแแแแแกแก แแแแแแแ, แแแแ แแ แแแแแช แซแแแแแ แแ แฉแแแแ แแแแ. แกแฎแแแแ.
แแแแกแแแแแก แแแแงแแแแ แกแแกแแแก แชแแแแแ
SET statement_timeout = ...;LOCK TABLE ...;
แแแแกแแแแแก, แ แแ แแแแแแแแแแแ แแ แแแฅแแแแแก แกแแฅแแ แชแแแแแแก โแซแแแแโ แแแแจแแแแแแแแก แแฆแแแแแแกแแแ, แฉแแแ แแแงแแแแแ แคแแ แแแก แแแแแแแแ แแแแก แแแงแแแแแ, แ แแแแแแช แแฆแฃแแแแก แแแ แแแแขแ แแก แคแแ แแแแแก แแแแแแแแ แ แขแ แแแแแฅแชแแแแแ.
แฉแแแ แแแแฎแกแแแก, แ แแ statement_timeout แแ แชแแแแแแ แงแแแแ แจแแแแแแ แแแแฎแแแแแแ, แแกแ แ แแ แขแ แแแแแฅแชแแ แแ แจแแแซแแแแ แแแแแแ แแแก แแแฃแฆแแแแ แแแแจแแแแแแแแแแแแ, แแฃ แชแฎแ แแแจแ แแแแ แ แแแแแชแแแแ.
#5: แแแแแแแแ แแ แแแแแชแแแแแ
แแฃ แชแฎแ แแแ แแ แแ แแก แแแแแแแแ แชแแ แแแแ, แแแแแชแแแแแ แฎแแแแฎแแ แฃแแแ แจแแแแแฎแแก แแแแฎแแแ แ แแ แแแแแแ แชแฎแ แแแแก แแแแแงแแแแแแ:
CREATE TEMPORARY TABLE _tmp_swap ON COMMIT DROP AS TABLE tbl;
แฎแแแแแฌแแ แ ON COMIT DROP แแแจแแแแก, แ แแ แขแ แแแแแฅแชแแแก แแแกแแกแ แฃแแก แแ แแแแแแ แชแฎแ แแแ แจแแฌแงแแแขแก แแ แกแแแแแแก แแ แแ แแ แแก แกแแญแแ แ แแแกแ แฎแแแแ แฌแแจแแ แแแแจแแ แแก แแแแขแแฅแกแขแจแ.
แแแแแแแแ แฉแแแ แแแแ แแฃแแแแ, แ แแ แแ แแ แแก แแแแ แ โแชแแชแฎแแแโ แแแแแชแแแ, แแก แแแแ แแชแแ แกแแแแแแ แกแฌแ แแคแแ แฃแแแ แแแแฎแแ แชแแแแแแก.
แแแ, แกแฃแ แแกแแ! แแ แแแแแแแฌแงแแแ แขแ แแแแแฅแชแแแก แแแกแ แฃแแแแแก แจแแแแแ
แกแแแแแแ แกแชแแแแ แแก แจแแแแแแ
แฉแแแ แแแงแแแแแ แแ "แคแกแแแแ-แแแแแแก":
# ัะพะฑะธัะฐะตะผ ััะฐัะธััะธะบั ั ัะฐะฑะปะธัั
stat <-
SELECT
relpages
, ((
SELECT
count(*)
FROM
pg_index
WHERE
indrelid = cl.oid
) + 1) << 13 size_norm
, pg_total_relation_size(oid) size
, coalesce(extract('epoch' from (now() - greatest(
pg_stat_get_last_vacuum_time(oid)
, pg_stat_get_last_autovacuum_time(oid)
))), 1 << 30) vaclag
FROM
pg_class cl
WHERE
oid = $1::regclass -- table_name
LIMIT 1;
# ัะฐะฑะปะธัะฐ ะฑะพะปััะต ัะตะปะตะฒะพะณะพ ัะฐะทะผะตัะฐ ะธ VACUUM ะฑัะป ะดะฐะฒะฝะพ
if stat.size > 2 * stat.size_norm and stat.vaclag is None or stat.vaclag > 60:
-> VACUUM %table;
try:
-> BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
# ะฟััะฐะตะผัั ะทะฐั
ะฒะฐัะธัั ะผะพะฝะพะฟะพะปัะฝัั ะฑะปะพะบะธัะพะฒะบั ั ะฟัะตะดะตะปัะฝัะผ ะฒัะตะผะตะฝะตะผ ะพะถะธะดะฐะฝะธั 1s
-> SET LOCAL statement_timeout = '1s'; SET LOCAL lock_timeout = '1s';
-> LOCK TABLE %table IN ACCESS EXCLUSIVE MODE;
# ะฝะฐะดะพ ัะฑะตะดะธัััั ะฒ ะฟัััะพัะต ัะฐะฑะปะธัั ะฒะฝัััะธ ััะฐะฝะทะฐะบัะธะธ ั ะฑะปะพะบะธัะพะฒะบะพะน
row <- TABLE %table LIMIT 1;
# ะตัะปะธ ะฒ ัะฐะฑะปะธัะต ะฝะตั ะฝะธ ะพะดะฝะพะน "ะถะธะฒะพะน" ะทะฐะฟะธัะธ - ะพัะธัะฐะตะผ ะตะต ะฟะพะปะฝะพัััั, ะฒ ะฟัะพัะธะฒะฝะพะผ ัะปััะฐะต - "ะฟะตัะตะฒััะฐะฒะปัะตะผ" ะฒัะต ะทะฐะฟะธัะธ ัะตัะตะท ะฒัะตะผะตะฝะฝัั ัะฐะฑะปะธัั
if row is None:
-> TRUNCATE TABLE %table RESTART IDENTITY;
else:
# ัะพะทะดะฐะตะผ ะฒัะตะผะตะฝะฝัั ัะฐะฑะปะธัั ั ะดะฐะฝะฝัะผะธ ัะฐะฑะปะธัั-ะพัะธะณะธะฝะฐะปะฐ
-> CREATE TEMPORARY TABLE _tmp_swap ON COMMIT DROP AS TABLE %table;
# ะพัะธัะฐะตะผ ะพัะธะณะธะฝะฐะป ะฑะตะท ัะฑัะพัะฐ ะฟะพัะปะตะดะพะฒะฐัะตะปัะฝะพััะธ
-> TRUNCATE TABLE %table;
# ะฒััะฐะฒะปัะตะผ ะฒัะต ัะพั
ัะฐะฝะตะฝะฝัะต ะฒะพ ะฒัะตะผะตะฝะฝะพะน ัะฐะฑะปะธัะต ะดะฐะฝะฝัะต ะพะฑัะฐัะฝะพ
-> INSERT INTO %table TABLE _tmp_swap;
-> COMMIT;
except Exception as e:
# ะตัะปะธ ะผั ะฟะพะปััะธะปะธ ะพัะธะฑะบั, ะฝะพ ัะพะตะดะธะฝะตะฝะธะต ะฒัะต ะตัะต "ะถะธะฒะพ" - ัะปะพะฒะธะปะธ ัะฐะนะผะฐัั
if not isinstance(e, InterfaceError):
-> ROLLBACK;
แจแแกแแซแแแแแแแ แแฃ แแ แ แแแแแชแแแแแแก แแแแ แแ แแแแแแแ แแแ?แแ แแแชแแแจแ, แจแแกแแซแแแแแแแ, แแฃ แแแแแ แชแฎแ แแแแก แแแแ แแ แแ แแก แแแแแฃแแ แกแฎแแ แแฅแขแแแแแแแแแ BL แแฎแ แแแแ แแ FK DB แแฎแ แแแแ:
CREATE TABLE _swap_%table(LIKE %table INCLUDING ALL);
INSERT INTO _swap_%table TABLE %table;
DROP TABLE %table;
ALTER TABLE _swap_%table RENAME TO %table;
แแแแแ แแแแฃแจแแแ แกแแ แแแขแ แฌแงแแ แแก แชแฎแ แแแจแ แแ แจแแแแแแฌแแแ แแแขแ แแแ:
VACUUM tbl;
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET LOCAL statement_timeout = '1s'; SET LOCAL lock_timeout = '1s';
LOCK TABLE tbl IN ACCESS EXCLUSIVE MODE;
CREATE TEMPORARY TABLE _tmp_swap ON COMMIT DROP AS TABLE tbl;
TRUNCATE TABLE tbl;
INSERT INTO tbl TABLE _tmp_swap;
COMMIT;
relpages | size_norm | size | vaclag
-------------------------------------------
0 | 24576 | 49152 | 32.705771
แงแแแแแคแแ แ แแแแแแแแ! แชแฎแ แแแ 50-แฏแแ แจแแแชแแ แแ แแ แงแแแแ แแแแแฎแแแแ แแกแแ แกแฌแ แแคแแ แแแแแก.
แฌแงแแ แ: www.habr.com