Te haere tonu i te kaupapa o te tuhi i nga awa raraunga nui i whakaarahia e
Ka korero tatou mo Tautuhinga TOAST me te tirohanga raraunga. "I te toharite," kaore enei tikanga e whakaora i nga rauemi maha, engari me te kore e whakarereke i te waehere tono.
Heoi, i puta mai to maatau wheako he tino whai hua mo tenei ahuatanga, na te mea ko te rokiroki o te nuinga o nga mahi tirotiro na tona ahuatanga te nuinga apiti-anake i runga i nga raraunga kua tuhia. A, ki te whakaaro koe me pehea e taea ai e koe te whakaako i te papaa raraunga ki te tuhi ki te kōpae 200MB / s haurua te nui - tēnā i raro i te ngeru.
Nga mea ngaro iti o nga raraunga nui
Ma te tohu mahi
Ana mai ano
Me titiro ki te hanganga o tetahi o nga ripanga ka tuhia e tatou nga raraunga "mata" - ara, koinei te tuhinga taketake mai i te urunga rangitaki:
CREATE TABLE rawdata_orig(
pack -- PK
uuid NOT NULL
, recno -- PK
smallint NOT NULL
, dt -- ключ секции
date
, data -- самое главное
text
, PRIMARY KEY(pack, recno)
);
He tohu angamaheni (kua wehea, o te akoranga, no reira he tauira waahanga tenei), ko te mea nui ko te tuhinga. I etahi wa ka tino nui.
Kia maumahara ko te rahi "a-tinana" o te rekoata kotahi i roto i te PG kaore e taea te noho neke atu i te kotahi wharangi o nga raraunga, engari ko te rahi "arorau" he mea tino rereke. Hei tuhi uara rōrahi (varchar/text/bytea) ki tētahi āpure, whakamahia
Ka whakamahi a PostgreSQL i te rahi o te wharangi (ko te tikanga 8 KB), karekau e tuku i nga tuple ki te hora i nga wharangi maha. Na reira, kaore e taea te penapena tika i nga uara mara nui rawa atu. Hei hinga i tenei herenga, ka kopakihia nga uara mara nui, ka wehea ranei ki nga raina tinana maha. Ka puta tenei kaore i te mohiohia e te kaiwhakamahi me te iti o te paanga ki te nuinga o nga waehere tūmau. Ko tenei tikanga e mohiotia ana ko TOAST...
Inaa, mo ia tepu me nga mara "he nui pea", aunoa
TOAST(
chunk_id
integer
, chunk_seq
integer
, chunk_data
bytea
, PRIMARY KEY(chunk_id, chunk_seq)
);
Arā, mena ka tuhia he aho me te uara "nui". data
, katahi ka puta te rekoata tuturu ehara ki te tepu matua me tana PK anake, engari ki TOAST me tana PK.
Te whakaiti i te awe TOAST
Engari ko te nuinga o a maatau rekoata kaore ano i te rahi, me uru ki te 8KB - Me pehea taku penapena moni mo tenei?..
I konei ka tae mai te huanga ki te awhina STORAGE
- HE WHAKAMAHI ka taea e rua te kōpeketanga me te rokiroki motuhake. Tenei kōwhiringa paerewa mo te nuinga o nga momo raraunga whai TOAST. I te tuatahi ka ngana ki te mahi kōpeketanga, katahi ka penapena ki waho o te tepu mena he nui rawa te rarangi.
- HAND ka taea te kōpeke engari kaua e wehea te rokiroki. (Ae ra, ka mahia tonu te rokiroki motuhake mo aua pou, engari anake hei huarahi whakamutunga, ina karekau he huarahi kee hei whakaheke i te aho kia pai ai ki te wharangi.)
Inaa, koinei tonu te mea e hiahiatia ana mo te tuhinga - kōpeketia i te mea e taea ana, a ki te kore e pai, hoatu ki roto TOAST. Ka taea te mahi tika i runga i te rere, me te whakahau kotahi:
ALTER TABLE rawdata_orig ALTER COLUMN data SET STORAGE MAIN;
Me pehea te arotake i te paanga
I te mea ka huri te rerenga raraunga i ia ra, kaore e taea te whakataurite i nga tau tino, engari i runga i nga tikanga wahi iti I tuhia e matou ki te TOAST - he pai ake. Engari he raru kei konei - ko te nui ake o te rōrahi "tinana" o ia rekoata takitahi, ka "whanui" te taurangi, na te mea he nui ake nga wharangi o nga raraunga ka kapi.
Wāhanga i mua i nga huringa:
heap = 37GB (39%)
TOAST = 54GB (57%)
PK = 4GB ( 4%)
Wāhanga i muri i nga huringa:
heap = 37GB (67%)
TOAST = 16GB (29%)
PK = 2GB ( 4%)
I roto i te meka, tatou I timata te tuhi ki TOAST 2 nga wa iti ake, i wetewete i te kōpae anake, engari ko te PTM hoki:
Ka kite ahau kua iti ake taatau ki te "panui" i te kōpae, ehara i te "tuhi" anake - na te mea ka whakauruhia he rekoata ki roto i te teepu, me "panui" tetahi waahanga o te rakau o ia taurangi hei whakatau tūnga a meake nei i roto ia ratou.
Ko wai ka noho pai i runga i te PostgreSQL 11
Whai muri i te whakahou ki te PG11, i whakatau matou ki te haere tonu ki te "whakatangi" TOAST me te kite i timata mai i tenei putanga ka waatea te tawhā mo te whakatangi. toast_tuple_target
Ka mura noa te waehere tukatuka TOAST ina nui ake te uara haupae hei penapena ki te ripanga i te TOAST_TUPLE_THRESHOLD paita (ko te tikanga 2 KB). Ko te waehere TOAST ka kopiri, ka nekehia ranei nga uara mara ki waho o te ripanga kia iti iho te uara haupae i te TOAST_TUPLE_TARGET paita (he uara taurangi, he 2 KB te tikanga) kare ranei e taea te whakaiti te rahi.
I whakatau matou ko nga raraunga kei a matou i te nuinga o te waa he "tino poto" ranei "tino roa", no reira ka whakatau matou ki te whakawhāiti i a matou ki te iti rawa o te uara:
ALTER TABLE rawplan_orig SET (toast_tuple_target = 128);
Tirohia te pehea i pa ai nga tautuhinga hou ki te uta kōpae i muri i te whirihora ano:
Ehara i te kino! Wawaenga kua heke te tūtira ki te kōpae tata ki te 1.5 nga wa, a ko te kōpae "mahi" he 20 ōrau! Engari tera pea i pa ki te PTM?
I te iti rawa kaore i tino kino. Ahakoa, he uaua ki te whakatau mena kaore e taea e enei pukapuka te whakanui ake i te utaina PTM toharite 5%.
Ma te huri i nga waahi o nga kupu, ka huri te tapeke...!
E mohio ana koe, he pene te penapena i te ruble, me a maatau pukapuka rokiroki e pa ana 10TB/marama ahakoa he iti te arotautanga ka whai hua pai. Na reira, i aro atu matou ki te hanganga-a-tinana o a matou raraunga - me pehea "whakapae" nga mara i roto i te rekoata ia o nga tepu.
No te mea na
He maha nga hoahoanga e whakarato ana i nga raraunga mo nga rohe kupu miihini. Hei tauira, i runga i te punaha 32-bit x86, ko nga tauoti (momo tauoti, 4 paita) ka whakatiarohia ki runga i te rohenga kupu 4-paita, ka pera ano me te rua o nga tau ira maanu (te rua nga paita maanu, 8 nga paita). A, i runga i te punaha moka-64, ko nga uara takirua ka whakahaangai ki nga rohe kupu 8-paita. He take ano tenei mo te kore hototahi.
Nā te tīaroaro, ka whakawhirinaki te rahi o te haupae ripanga ki te raupapa o ngā āpure. I te nuinga o nga wa kaore e tino kitea tenei paanga, engari i etahi wa ka nui ake te rahi o te rahi. Hei tauira, ki te whakakotahi koe i nga mara tohu (1) me nga mara tauoti, ka 3 nga paita ka moumou i waenga.
Me timata me nga tauira waihanga:
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 байт
I ahu mai i hea etahi paita taapiri i te keehi tuatahi? He ngawari noa - 2-paita iti e tirohia ana ki te rohe 4-paita i mua i te mara e whai ake nei, a, i te wa ko te mea whakamutunga, kaore he mea me te kore e tika kia whakahāngai.
I roto i te ariā, he pai nga mea katoa, ka taea e koe te whakarereke i nga mara ki taau e pai ai. Me tirotirohia i runga i nga raraunga tuuturu ma te whakamahi i te tauira o tetahi o nga tepu, ko te waahanga o ia ra kei te 10-15GB.
Hanganga tuatahi:
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)
Wāhanga i muri i te huri i te raupapa tīwae - tika he rite nga mara, he rereke noa te raupapa:
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)
Ko te rahinga o te waahanga ka whakatauhia e te maha o nga "meka" ka whakawhirinaki ki nga tikanga o waho anake, na me wehewehe te rahi o te puranga (pg_relation_size
) ma te maha o nga rekoata kei roto - ara, ka whiwhi tatou te rahi toharite o te rekoata rongoa:
Minu 6% rōrahi, Nui!
Engari ko nga mea katoa, ko te tikanga, ehara i te mea tino maamaa - i muri i nga mea katoa, i roto i nga tohu kaore e taea te whakarereke i te raupapa o nga mara, na reira “i te nuinga” (pg_total_relation_size
) ...
... kei konei ano hoki i tiakina 1.5%me te kore e huri i tetahi rarangi waehere. Ae, ae!
Ka kite ahau ko te waahanga o runga ake mo te whakarite mara ehara i te mea ko te mea tino pai rawa atu. Na te mea kaore koe e pai ki te "haea" etahi poraka mara mo nga take ataahua - hei tauira, he tokorua (pack, recno)
, ko te PK mo tenei tepu.
I te nuinga o te waa, ko te whakatau i te whakaritenga "iti rawa" o nga mara he mahi "kaha kaha". Na reira, ka taea e koe te whiwhi hua pai ake i o raraunga i a maatau - whakamatauria!
Source: will.com