แแแ แซแแแแแก แแแแ แฌแแแแญแ แแแ แแแแ แแแแแชแแแแ แแแแแแแแแก แฉแแฌแแ แแก แแแแแก แแแแ แซแแแแแแก
แฉแแแ แแแกแแฃแแ แแแ TOAST แแแ แแแแขแ แแแ แแ แแแแแชแแแแ แแแกแฌแแ แแแ. "แกแแจแฃแแแแ", แแก แแแแแแแแ แแ แแแแแแแแก แซแแแแแ แแแแ แ แแกแฃแ แกแก, แแแแ แแ แแแแแแแชแแแก แแแแแก แจแแชแแแแก แแแ แแจแ.
แแฃแแชแ, แฉแแแแ แแแแแชแแแแแแ แแ แแฎแ แแ แซแแแแแ แแ แแแฃแฅแขแแฃแแ แแฆแแแฉแแแ, แ แแแแแ แแแกแ แแฃแแแแแ แแแแฅแแแก แแแแแกแแแแ แ แแแแแขแแ แแแแแก แจแแแแฎแแแ แซแแ แแแแแแ แแฎแแแแ แแแแแขแแแแ แฉแแฌแแ แแแ แแแแแชแแแแแแก แแแแแกแแแ แแกแแ. แแ แแฃ แแแแแขแแ แแกแแแ, แ แแแแ แจแแแแซแแแแ แแกแฌแแแแแ แแแแแชแแแแ แแแแแก แแแกแแแ แฉแแฌแแ แ 200MB / แฌ แแแฎแแแแ แ - แแแฎแแแ แแแขแแก แฅแแแจ.
แแแแ แแแแแชแแแแแแก แแแขแแ แ แกแแแแฃแแแแแแแแ
แกแแแฃแจแแ แแ แแคแแแแก แแแฎแแแแแ
แแ แแแก แจแแแแแ
แแแแแ แแแแแแฎแแแแ แแ แ-แแ แแ แชแฎแ แแแแก แกแขแ แฃแฅแขแฃแ แแก, แ แแแแแจแแช แฉแแแ แแฌแแ แ "แแแแแแฃแ" แแแแแชแแแแแก - แแแฃ, แแฅ แแ แแก แแ แแแแแแแฃแ แ แขแแฅแกแขแ แแฃแ แแแแแก แฉแแแแฌแแ แแแแ:
CREATE TABLE rawdata_orig(
pack -- PK
uuid NOT NULL
, recno -- PK
smallint NOT NULL
, dt -- ะบะปัั ัะตะบัะธะธ
date
, data -- ัะฐะผะพะต ะณะปะฐะฒะฝะพะต
text
, PRIMARY KEY(pack, recno)
);
แขแแแแฃแ แ แแแจแแแ (แฃแแแ แแแงแแคแแแแ, แ แ แแฅแแ แฃแแแ, แแกแ แ แแ, แแก แแ แแก แแแแงแแคแแแแแแก แจแแแแแแ), แกแแแแช แงแแแแแแ แแแแจแแแแแแแแแแ แขแแฅแกแขแ. แแแแฏแแ แกแแแแแแ แแแชแฃแแแแแแ.
แจแแแแฎแกแแแแแ, แ แแ PG-แจแ แแ แแ แฉแแแแฌแแ แแก โแคแแแแแฃแ แโ แแแแ แแ แจแแแซแแแแ แแแแแแแแก แแแแแชแแแแแแก แแ แแแ แแแขแ แแแแ แแ, แแแแ แแ โแแแแแแฃแ แโ แแแแ แกแฃแ แกแฎแแ แกแแแแแฎแแ. แแแแจแ แแแชแฃแแแแแแ แแแแจแแแแแแแแก (varchar/text/bytea) แฉแแกแแฌแแ แแ แแแแแแงแแแแ
PostgreSQL แแงแแแแแก แคแแฅแกแแ แแแฃแแ แแแแ แแแก แแแแแก (แ แแแแ แช แฌแแกแ, 8 แแ) แแ แแ แแซแแแแก แขแฃแแแแแก แกแแจแฃแแแแแแก แ แแแแแแแแ แแแแ แแแก แแแแ แชแแแแแ. แแฅแแแแ แแแแแแแแแแ แ, แจแแฃแซแแแแแแแ แแแแแก แซแแแแแ แแแแ แแแแจแแแแแแแแแแก แแแ แแแแแ แจแแแแฎแแ. แแ แจแแแฆแฃแแแแก แแแกแแซแแแแแ, แแแแ แแแแแก แแแแจแแแแแแแแแ แจแแแฃแแจแฃแแแ แแ/แแ แแงแแคแ แแ แแแแ แคแแแแแฃแ แฎแแแแ. แแก แฎแแแแ แแแแฎแแแ แแแแแกแแแแก แจแแฃแแฉแแแแแแ แแ แแชแแ แ แแแแแแแแก แแฎแแแแก แกแแ แแแ แแก แแแแแแแ. แแก แแแแแแ แชแแแแแแแ แ แแแแ แช แกแแแฆแแแ แซแแแ...
แคแแฅแขแแแ แแแแ, แงแแแแ แชแฎแ แแแแกแแแแก "แแแขแแแชแแฃแ แแ แแแแ" แแแแแแแ, แแแขแแแแขแฃแ แแ
TOAST(
chunk_id
integer
, chunk_seq
integer
, chunk_data
bytea
, PRIMARY KEY(chunk_id, chunk_seq)
);
แแแฃ, แแฃ แฉแแแ แฃแแแ แแแแฌแแ แแ แกแขแ แแฅแแแ โแแแแโ แแแแจแแแแแแแแ data
, แแแจแแ แแแฎแแแแ แ แแแแฃแ แ แฉแแฌแแ แ แแ แ แแฎแแแแ แแแแแแ แแแแแแแก แแ แแแก PK-แก, แแ แแแแ TOAST-แก แแ แแแก PK-แก.
แขแแแกแขแแก แแแแแแแแก แจแแแชแแ แแแ
แแแแ แแ แฉแแแแ แฉแแแแฌแแ แแแแก แฃแแแขแแกแแแ แฏแแ แแแแแ แแ แช แแกแ แแแแแ, แฃแแแ แจแแแกแแแแแแแแแแก 8KB-แก - แ แแแแ แแแแแแแ แคแฃแแ แแแแแ?..
แกแฌแแ แแ แแฅ แแแแฎแแแ แแแ แแขแ แแแฃแขแ STORAGE
- แแแคแแ แแแแแ แแซแแแแ แ แแแแ แช แจแแแฃแแจแแแก, แแกแแแ แชแแแแ แจแแแแฎแแแก แกแแจแฃแแแแแแก. แแก แกแขแแแแแ แขแฃแแ แแแ แแแแขแ TOAST-แแก แจแแกแแแแแแกแ แแแแแชแแแแ แฃแแแขแแกแแแแกแแแแก. แแก แฏแแ แชแแแแแแก แจแแแกแ แฃแแแก แจแแแฃแแจแแ, แจแแแแแ แแแแฎแแแก แแแก แชแฎแ แแแแก แแแ แแ, แแฃ แแฌแแ แแแ แฏแแ แแแแแ แซแแแแแ แแแแแ.
- แแแแแแ แ แกแแจแฃแแแแแแก แแซแแแแ แจแแแฃแแจแแ, แแแแ แแ แแ แ แชแแแแ แจแแแแฎแแ. (แคแแฅแขแแแ แแแแ, แชแแแแ แจแแแแฎแแ แแแแแ แจแแกแ แฃแแแแแ แแกแแแ แกแแแขแแแแกแแแแก, แแแแ แแ แแฎแแแแ แ แแแแ แช แแแแ แกแแจแฃแแแแแ, แ แแแแกแแช แกแฎแแ แแแ แแ แแ แแก แกแขแ แแฅแแแแก แจแแแฃแแจแแแก แแกแ, แ แแ แแแ แแแแแแกแแแก แแแแ แแแ.)
แกแแแแแแแแแแจแ, แแก แแ แแก แแฃแกแขแแ แแก, แ แแช แฉแแแ แแแญแแ แแแแ แขแแฅแกแขแแกแแแแก - แจแแแฃแแจแแ แจแแซแแแแแกแแแแแแ แแ แแ แแฃ แกแแแ แแแ แแ แฏแแแแ แฉแแแแ แกแแแฆแแแ แซแแแแจแ. แแก แจแแแซแแแแ แแแแแแแแก แแแ แแแแแ แคแ แแแแก แแ แแก, แแ แแ แแ แซแแแแแแ:
ALTER TABLE rawdata_orig ALTER COLUMN data SET STORAGE MAIN;
แ แแแแ แจแแแแคแแกแแ แแคแแฅแขแ
แแแแแแแแ แแแแแชแแแแ แแแแแแ แงแแแแแแฆแแฃแ แแ แแชแแแแแ, แฉแแแ แแ แจแแแแแซแแแ แจแแแแแแ แแ แแแกแแแฃแขแฃแ แ แ แแชแฎแแแแ, แแแแ แแ แจแแแแ แแแแแ แแแแแกแแแ แแกแแ แฃแคแ แ แแชแแ แ แฌแแแ แฉแแแ แแก แแแแฌแแ แแ แกแแแฆแแแ แซแแแแจแ - แแแ แฃแแแแแกแ. แแแแ แแ แแฅ แแ แแก แกแแจแแจแ แแแแ - แ แแช แฃแคแ แ แแแแแ แแแแแแฃแแ แชแแแแแฃแแ แฉแแแแฌแแ แแก โแคแแแแแฃแ แโ แแแชแฃแแแแ, แแแ แฃแคแ แ โแคแแ แแโ แฎแแแแ แแแแแฅแกแ, แ แแแแแ แฉแแแ แฃแแแ แแแแคแแ แแ แแแแแชแแแแแแก แแแขแ แแแแ แแ.
แกแแฅแชแแ แชแแแแแแแแแแแแ:
heap = 37GB (39%)
TOAST = 54GB (57%)
PK = 4GB ( 4%)
แกแแฅแชแแ แชแแแแแแแแแแก แจแแแแแ:
heap = 37GB (67%)
TOAST = 16GB (29%)
PK = 2GB ( 4%)
แคแแฅแขแแแ แแแแ, แฉแแแ แแแแฌแงแ แกแแแฆแแแ แซแแแแก แฌแแ แ 2-แฏแแ แแแแแแแแ แฎแจแแ แแ, แ แแแแแแแช แแแแขแแแ แแ แแ แ แแฎแแแแ แแแกแแ, แแ แแแแ CPU:
แแฆแแแแจแแแ, แ แแ แแแกแแแก โแแแแฎแแแกแแกโ แฉแแแแช แแแแแแขแแ แแแแแ แแ แแ แ แแฎแแแแ โแฉแแฌแแ แแกแแกโ - แ แแแแแ แฉแแแแฌแแ แแก แชแฎแ แแแจแ แฉแแกแแแกแแก แแกแแแ แฃแแแ โแฌแแแแแแแฎแแโ แแแแแแฃแแ แแแแแฅแกแแก แฎแแก แแแฌแแแ, แ แแแ แแแแแกแแแฆแแ แแ แแแกแ แแแแแแแแ แแแแแชแแ แแแแจแ.
แแแกแแช แจแแฃแซแแแ แแแ แแแ แแชแฎแแแ แแก PostgreSQL 11-แแ
PG11-แแ แแแแแฎแแแแแก แจแแแแแ, แแแแแแฌแงแแแขแแ แแแแแแแ แซแแแแแแแ TOAST-แแก โแแฃแแแแแโ แแ แจแแแแแจแแแ, แ แแ แแ แแแ แกแแแแแ แแแฌแงแแแฃแแ แแแ แแแแขแ แ toast_tuple_target
TOAST แแแแฃแจแแแแแแก แแแแ แแ แแแแแ แแฎแแแแ แแแจแแ, แ แแแแกแแช แชแฎแ แแแจแ แจแแกแแแแฎแ แแฌแแ แแแแก แแแแจแแแแแแแ แแฆแแแแขแแแ TOAST_TUPLE_THRESHOLD แแแแขแก (แฉแแแฃแแแแ แแ 2 แแ). TOAST แแแแ แจแแแฃแแจแแแก แแ/แแ แแแแแแขแแแก แแแแแก แแแแจแแแแแแแแแก แชแฎแ แแแแแแ แแแแแ, แกแแแแ แแฌแแ แแแแก แแแแจแแแแแแแ แแ แแแฎแแแแ TOAST_TUPLE_TARGET แแแแขแแ แแแแแแแ (แชแแแแแ แแแแจแแแแแแแ, แแกแแแ แฉแแแฃแแแแ แแ 2 แแ) แแ แแแแ แแแ แจแแแชแแ แแแแ.
แฉแแแ แแแแแแฌแงแแแขแแ, แ แแ แแแแแชแแแแแ, แ แแแแแแแช แฉแแแฃแแแแ แแ แแแแฅแแก, แแ แแก แแ โแซแแแแแ แแแแแโ แแ โแซแแแแแ แแ แซแแแโ, แแแแขแแ แแแแแแฌแงแแแขแแ แจแแแแแแฆแฃแแ แแแแแแแแฃแ แ แจแแกแแซแแ แแแแจแแแแแแแแ:
ALTER TABLE rawplan_orig SET (toast_tuple_target = 128);
แแแแฎแแ, แ แแแแ แแแแฅแแแแ แแฎแแแแ แแแ แแแแขแ แแแแ แแแกแแแก แฉแแขแแแ แแแแแ แฎแแแแฎแแแ แแแแคแแแฃแ แแชแแแก แจแแแแแ:
แฒชแฃแแ แแ แแ! แกแแจแฃแแแ แแแกแแแ แ แแแ แจแแแชแแ แแ แแแแฎแแแแแแ 1.5-แฏแแ แแ แแแกแแ โแแแขแแแ แแฃแแโ 20 แแ แแชแแแขแแ! แแแแ แแ แแฅแแแ แแแแ แ แแฆแแชแแแแ แแ แแแแฅแแแแ แแ แแชแแกแแ แแ?
แแแแแช แแ แแแฃแแ แแกแแ. แแฃแแชแ, แซแแแแแ แแแแกแฏแแแแ, แแฃ แแกแแแ แแแชแฃแแแแแแ แแแแแช แแแ แแแแฆแแแแก แกแแจแฃแแแ CPU แแแขแแแ แแแแก 5%.
แขแแ แแแแแแแก แแแแแแแแแก แจแแชแแแแ แฏแแแ... แแชแแแแแ!
แแแแแฎแกแแแแแแ, แแแแ แแแแแแก แ แฃแแแก แแ แฉแแแแ แจแแแแฎแแแก แแแชแฃแแแแแ แแก แแแแฎแแแแแแ 10 แขแ/แแแแจแ แแชแแ แ แแแขแแแแแแชแแแกแแช แแ แจแแฃแซแแแ แแแ แแ แแแแแแ แแแแแชแแก. แแแแขแแ, แงแฃแ แแแฆแแแ แแแแแฅแชแแแ แฉแแแแ แแแแแชแแแแแแก แคแแแแแฃแ แกแขแ แฃแฅแขแฃแ แแก - แแฃแกแขแแ แ แแแแ แฉแแแแฌแแ แแก แจแแแแแ โแแแฌแงแแแแแโ แแแแแแ แแแแแแฃแแ แแแแแแ.
แแแแก แแแแ, แ แแ
แแแแ แ แแ แฅแแขแแฅแขแฃแ แ แฃแแ แฃแแแแแงแแคแก แแแแแชแแแแ แแแกแฌแแ แแแแก แแแแฅแแแแก แกแแขแงแแแแแก แกแแแฆแแ แแแแ. แแแแแแแแแ, 32-แแแขแแแ x86 แกแแกแขแแแแแ, แแแแแ แ แแชแฎแแแแ (แแแแแแแ แขแแแ, 4 แแแแขแ) แแแกแฌแแ แแแแ 4-แแแแขแแแแ แกแแขแงแแแก แกแแแฆแแแ แแ, แแกแแแ แ แแแแ แช แแ แแแแ แกแแแฃแกแขแแก แแชแฃแ แแแ แฌแแ แขแแแแก แ แแชแฎแแแแ (แแ แแแแ แกแแแฃแกแขแแก แแชแฃแ แแแ แฌแแ แขแแแ, 8 แแแแขแ). แฎแแแ 64-แแแขแแแ แกแแกแขแแแแแ แแ แแแแ แแแแจแแแแแแแแแ แแแกแฌแแ แแแแ 8-แแแแขแแแแ แกแแขแงแแแแแก แกแแแฆแแ แแแแแ. แแก แจแแฃแแแแกแแแแแแแก แแแแแ แแ แแ แแแแแแแ.
แแแกแฌแแ แแแแก แแแแ, แชแฎแ แแแแก แแฌแแ แแแแก แแแแ แแแแแแแแแแฃแแแ แแแแแแแก แแแแแแแแแแ แแแแแ. แ แแแแ แช แฌแแกแ, แแก แแคแแฅแขแ แแ แแ แแก แซแแแแแ แจแแกแแแฉแแแแ, แแแแ แแ แแแแแแ แ แจแแแแฎแแแแแจแ แจแแแซแแแแ แแแแแแฌแแแแก แแแแแก แแแแจแแแแแแแแแ แแ แแ. แแแแแแแแแ, แแฃ แจแแฃแ แแแ char(1) แแ แแแแแ แ แแชแฎแแแก แแแแแแก, แแแ แจแแ แแก แฉแแแฃแแแแ แแ แแแแฎแแ แฏแแแ 3 แแแแขแ.
แแแแแฌแงแแ แกแแแแแแฃแ แ แแแแแแแแแ:
SELECT pg_column_size(ROW(
'0000-0000-0000-0000-0000-0000-0000-0000'::uuid
, 0::smallint
, '2019-01-01'::date
));
-- 48 ะฑะฐะนั
SELECT pg_column_size(ROW(
'2019-01-01'::date
, '0000-0000-0000-0000-0000-0000-0000-0000'::uuid
, 0::smallint
));
-- 46 ะฑะฐะนั
แกแแแแแ แแแฉแแแ แ แแแแแแแแ แแแแแขแแแแแ แแแแขแ แแแ แแแ แจแแแแฎแแแแแจแ? แฒแก แแแ แขแแแแ - 2-แแแแขแ แฌแแ แแแแแแ แแแกแฌแแ แแแฃแแแ 4-แแแแขแแแ แกแแแฆแแแ แแ แจแแแแแ แแแแแแแ แแ แ แแชแ แแก แแแแแ, แแ แแคแแ แแ แแ แแ แแ แแก แกแแญแแ แ แแแกแฌแแ แแแ.
แแแแ แแฃแแแ, แงแแแแแคแแ แ แแแ แแแแแ แแ แจแแแแซแแแแ แแแแแแแก แแแแแแแแแแ แแกแ, แ แแแแ แช แแกแฃแ แ. แแแแแ แจแแแแแแฌแแแ แแก แ แแแแฃแ แแแแแชแแแแแแ แแ แ-แแ แแ แชแฎแ แแแแก แแแแแแแแแก แแแแแงแแแแแแ, แ แแแแแก แงแแแแแแฆแแฃแ แ แแแแงแแคแแแแแ แแแแแแแก 10-15 แแ.
แกแแฌแงแแกแ แกแขแ แฃแฅแขแฃแ แ:
CREATE TABLE public.plan_20190220
(
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: pack uuid NOT NULL,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: recno smallint NOT NULL,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: host uuid,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: ts timestamp with time zone,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: exectime numeric(32,3),
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: duration numeric(32,3),
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: bufint bigint,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: bufmem bigint,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: bufdsk bigint,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: apn uuid,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: ptr uuid,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: dt date,
CONSTRAINT plan_20190220_pkey PRIMARY KEY (pack, recno),
CONSTRAINT chck_ptr CHECK (ptr IS NOT NULL),
CONSTRAINT plan_20190220_dt_check CHECK (dt = '2019-02-20'::date)
)
INHERITS (public.plan)
แแแแงแแคแแแแแ แกแแแขแแก แ แแแแก แจแแชแแแแก แจแแแแแ - แแฃแกแขแแ แแแแแ แแแแแแ, แฃแแ แแแแ แแแแกแฎแแแแแแฃแแ แ แแแ:
CREATE TABLE public.plan_20190221
(
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: dt date NOT NULL,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: ts timestamp with time zone,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: pack uuid NOT NULL,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: recno smallint NOT NULL,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: host uuid,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: apn uuid,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: ptr uuid,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: bufint bigint,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: bufmem bigint,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: bufdsk bigint,
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: exectime numeric(32,3),
-- ะฃะฝะฐัะปะตะดะพะฒะฐะฝะฐ from table plan: duration numeric(32,3),
CONSTRAINT plan_20190221_pkey PRIMARY KEY (pack, recno),
CONSTRAINT chck_ptr CHECK (ptr IS NOT NULL),
CONSTRAINT plan_20190221_dt_check CHECK (dt = '2019-02-21'::date)
)
INHERITS (public.plan)
แแแแงแแคแแแแแแก แแแแแแแ แแแชแฃแแแแ แแแแแกแแแฆแแ แแแ "แคแแฅแขแแแแก" แ แแแแแแแแแ แแ แแแแแแแแแแฃแแแ แแฎแแแแ แแแ แ แแ แแชแแกแแแแ, แแกแ แ แแ, แแแแแ แแแแงแแ แแ แแแแก แแแแ (pg_relation_size
) แแแกแจแ แฉแแแแฌแแ แแแแก แ แแแแแแแแแ - แแแฃ แแแฆแแแ แ แแแแฃแ แแ แจแแแแฎแฃแแ แฉแแแแฌแแ แแก แกแแจแฃแแแ แแแแ:
แแแแฃแก 6% แแแชแฃแแแแ, แแแแ!
แแแแ แแ แงแแแแแคแแ แ, แ แ แแฅแแ แฃแแแ, แแ แช แแกแ แแแ แแแกแคแแ แแ - แแแแแก แแ แแแแแก, แแแแแฅแกแแแจแ แฉแแแ แแ แจแแแแแซแแแ แจแแแชแแแแแ แแแแแแแก แแแแแแแแแแ แแแแแ, แจแแกแแแแแแกแแ, "แแแแแแแ" (pg_total_relation_size
) ...
...แแกแแ แแฅแแช แแแแแแแ 1.5%แแแแแก แแ แแ แฎแแแแก แจแแชแแแแก แแแ แแจแ. แฒแแแฎ แแแแฎ!
แแฆแแแแจแแแ, แ แแ แแแแแแแก แแแฌแงแแแแก แแแแแแฆแแแจแแฃแแ แแแ แแแแขแ แแ แแ แแก แแก แคแแฅแขแ, แ แแ แแก แงแแแแแแ แแแขแแแแแฃแ แแ. แแแแก แแแแ, แ แแ แแ แแกแฃแ แ แแกแแแขแแแฃแ แ แแแแแแแแแก แแแแ แแแแแแแก แแแแแแ แแ แแแแแแก โแแแฌแงแแแขแโ - แแแแแแแแแ, แฌแงแแแแ (pack, recno)
, แ แแแแแแช แแ แแก PK แแ แชแฎแ แแแแกแแแแก.
แแแแแแแ, แแแแแแแก โแแแแแแแแฃแ แโ แแแฌแงแแแแก แแแแแแแ แกแแแแแแ แแแ แขแแแ โแฃแฎแแจแ แซแแแแกโ แแแแชแแแแ. แแแแขแแ, แแฅแแแ แจแแแแซแแแแ แแแแฆแแ แแแแแ แฃแแแแแกแ แจแแแแแแแ แแฅแแแแ แแแแแชแแแแแแแแ, แแแแ แ แฉแแแแ - แกแชแแแแ!
แฌแงแแ แ: www.habr.com