{"id":79039,"date":"2020-04-23T19:43:26","date_gmt":"2020-04-23T17:43:26","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql"},"modified":"2020-04-23T19:43:26","modified_gmt":"2020-04-23T17:43:26","slug":"ekonomim-kopeechku-na-bolshih-obemah-v-postgresql","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql","title":{"rendered":"S\u00e4\u00e4stame sentti suurte mahtude puhul PostgreSQL-is","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>J\u00e4tkates teemat suurte andmevoogude salvestamisest, mis t\u00f5statati <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/497008\/\">eelnevas artiklis jaotamisest<\/a><\/noindex>, vaatame selles, kuidas <b>v\u00e4hendada PostgreSQL-is salvestatava \"f\u00fc\u00fcsilise\" suuruse<\/b> ja nende m\u00f5ju serveri j\u00f5udlusele.<\/p>\n<p>R\u00e4\u00e4gime <b>TOAST seadistustest ja andmete joondamisest.<\/b>. \"Keskelt\" need meetodid v\u00f5imaldavad s\u00e4\u00e4sta mitte liiga palju ressursse, kuid t\u00e4iesti ilma rakenduskoodi modifitseerimata.<\/p>\n<p><img decoding=\"async\" alt=\"S\u00e4\u00e4stame sentti suurte mahtude puhul PostgreSQL-is\" src=\"\/wp-content\/uploads\/2020\/04\/4d43b9b43edb10c4c8f13159c7dd1eac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKuid meie kogemus osutus selles osas \u00fcsna produktiivseks, kuna peaaegu igasugune j\u00e4lgimine on olemuselt <b>enamasti append-only<\/b> salvestatavate andmete osas. Ja kui teid huvitab, kuidas \u00f5petada andmebaasi kirjutama kettale <b>200MB\/s<\/b> pool v\u00e4hem - palun lugege edasi.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>V\u00e4ikesed saladused suurtest andmetest<\/h2>\n<p>\nMeie teenuse <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/487380\/\">profiil<\/a><\/noindex>, sellele saadetakse regulaarselt logidest <b>teksti paketid.<\/b>.<\/p>\n<p>Ja kuna <noindex><a rel=\"nofollow\" href=\"https:\/\/sbis.ru\/all_services\">SBIS-i kompleks<\/a><\/noindex>, mille andmebaase me j\u00e4lgime, on mitmekomponentne toode keeruliste andmestruktuuridega, siis tekivad ka p\u00e4ringud <b>maksimaalse j\u00f5udluse saavutamiseks<\/b> \u00fcpris selliseid <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/486072\/\">\"multivihikutes\" keeruka algoritmilise loogikaga.<\/a><\/noindex>Nii et iga eraldi p\u00e4ringu v\u00f5i tulemuse t\u00e4itmise plaani maht, mis meile logisse j\u00f5uab, osutub \"keskmiselt\" piisavalt suureks.<\/p>\n<p>Vaadakem \u00fchte tabeli struktuuri, kuhu kirjutame \"toored\" andmed - see t\u00e4hendab algset tekstiv\u00e4li logikirjest:<\/p>\n<pre><code class=\"sql\">CREATE TABLE rawdata_orig(\n  pack -- PK\n    uuid NOT NULL\n, recno -- PK\n    smallint NOT NULL\n, dt -- sektori v\u00f5ti\n    date\n, data -- k\u00f5ige olulisem\n    text\n, PRIMARY KEY(pack, recno)\n);<\/code><\/pre>\n<p>\nT\u00fc\u00fcpiline selline tabel (juba jaotatud, loomulikult, seet\u00f5ttu on see - sektsiooni mall), kus k\u00f5ige olulisem on tekst. Aeg-ajalt piisavalt mahukas.<\/p>\n<p>K\u00fcll aga meenutame, et PG-s \u00fche salvestuse \"f\u00fc\u00fcsiline\" suurus ei saa olla suurem kui \u00fcks andmeleht, kuid \"loogiline\" suurus - see on hoopis teine asi. Mahuka v\u00e4\u00e4rtuse (varchar\/text\/bytea) salvestamiseks kasutatakse <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast\">TOAST tehnoloogiat.<\/a><\/noindex>:<\/p>\n<blockquote><p>PostgreSQL kasutab fikseeritud lehe suurust (tavaliselt 8 KB) ja ei luba tuple'idel h\u00f5ivata mitu lehte. Seet\u00f5ttu ei saa v\u00e4ga suuri v\u00e4li v\u00e4\u00e4rtusi otse salvestada. Selle piirati \u00fcletamiseks suurte v\u00e4li v\u00e4\u00e4rtused kompressitakse ja\/v\u00f5i jagatakse mitmeks f\u00fc\u00fcsiliseks reaks. See toimub kasutajale m\u00e4rkamatult ja m\u00f5jutab suurem osa serveri koodist vaid v\u00e4he. See meetod on tuntud kui TOAST \u2026<\/p><\/blockquote>\n<p>\nTegelikult luuakse iga tabeli jaoks, millel on \"potentsiaalselt suured\" v\u00e4ljad, automaatselt <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast#STORAGE-TOAST-ONDISK\">paaristabel \"t\u00fckkide\" jaoks<\/a><\/noindex> iga \"suur\" kirje segmentideks 2KB:<\/p>\n<pre><code class=\"sql\">TOAST(\n  chunk_id\n    integer\n, chunk_seq\n    integer\n, chunk_data\n    bytea\n, PRIMARY KEY(chunk_id, chunk_seq)\n);<\/code><\/pre>\n<p>\nSeega, kui peame salvestama rea, millel on \"suur\" v\u00e4\u00e4rtus <code>data<\/code>, siis toimub tegelik salvestamine <b>mitte ainult p\u00f5hitaotlusse ja selle PK-sse, vaid ka TOAST-i ja selle PK-sse<\/b>.<\/p>\n<h4>V\u00e4hendame TOAST-i m\u00f5ju<\/h4>\n<p>\nKuid enamik meie kirjetest ei ole siiski nii suured, <b>peaksid 8KB mahtuma<\/b> \u2014 kuidas selle pealt s\u00e4\u00e4sta?..<\/p>\n<p>Siin tuleb meile appi atribuuti <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast#STORAGE-TOAST-ONDISK\"><code>STORAGE<\/code><\/a><\/noindex> tabeli veerus:<\/p>\n<blockquote>\n<ul>\n<li><b>EXTENDED<\/b> lubab nii tihendamist kui ka eraldi salvestamist. See <b>on standardne variant<\/b> enamikule TOAST-iga \u00fchilduvatele andmet\u00fc\u00fcpidele. Esiteks proovitakse teha tihendamine, seej\u00e4rel salvestatakse v\u00e4lja tabelist, kui rida on endiselt liiga suur.<\/li>\n<li><b>MAIN<\/b> lubab tihendamist, kuid mitte eraldi salvestamist. (Tegelikult toimub eraldi salvestamine, kuid ainult <b>viimase abin\u00f5una<\/b>, kui muud v\u00f5imalust ei ole, et rida piisavalt v\u00e4ikeseks teha, et see lehte mahtuks.)<\/li>\n<\/ul>\n<\/blockquote>\n<p>Tegelikult on see t\u00e4pselt see, mida me vajame tekstile \u2014 <b>maksimaalselt tihendada ja kui miski ei mahu \u2014 viia TOAST-i<\/b>. Seda on v\u00f5imalik teha otse \"lendu\", \u00fche k\u00e4suga:<\/p>\n<pre><code class=\"sql\">ALTER TABLE rawdata_orig ALTER COLUMN data SET STORAGE MAIN;<\/code><\/pre>\n<p><\/p>\n<h4>Kuidas hinnata m\u00f5ju<\/h4>\n<p>\nKuna iga p\u00e4ev andmevoog muutub, ei saa me v\u00f5rrelda absoluutarve, kuid suhtelist: mida <b>v\u00e4iksem osa<\/b> oleme TOAST-i salvestanud \u2014 seda parem. Kuid siin on oht \u2014 mida suurem on meie \"f\u00fc\u00fcsiline\" maht iga \u00fcksiku kirje puhul, seda \"laiemaks\" muutub indeks, kuna tuleb katta rohkem andmelehti.<\/p>\n<p>Jaotis <b>enne muudatusi<\/b>:<\/p>\n<pre><code class=\"plaintext\">heap  = 37GB (39%)\nTOAST = 54GB (57%)\nPK    =  4GB ( 4%)\n<\/code><\/pre>\n<p>\nJaotis <b>p\u00e4rast muudatusi<\/b>:<\/p>\n<pre><code class=\"plaintext\">heap  = 37GB (67%)\nTOAST = 16GB (29%)\nPK    =  2GB ( 4%)<\/code><\/pre>\n<p>\nTegelikult oleme <b>hakkanud TOAST-i kirjutama 2 korda harvem<\/b>, mis v\u00e4hendas mitte ainult kettaruumihaldust, vaid ka CPU-koormust:<\/p>\n<p><img decoding=\"async\" alt=\"S\u00e4\u00e4stame sentti suurte mahtude puhul PostgreSQL-is\" src=\"\/wp-content\/uploads\/2020\/04\/547485eff9c6491ffe4d59e5c81f656d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"S\u00e4\u00e4stame sentti suurte mahtude puhul PostgreSQL-is\" src=\"\/wp-content\/uploads\/2020\/04\/6bd3b18146c20959693f961e41fff447.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTahan m\u00e4rkida, et me hakkasime ketast v\u00e4hem \"lugema\", mitte ainult \"kirjutama\" \u2014 kuna kirje lisamisel m\u00f5nesse tabelisse tuleb \"lugeda\" ka osa iga indeksi puust, et m\u00e4\u00e4rata selle tulevane positsioon indeksites.<\/p>\n<h2>Kellele meeldib PostgreSQL 11-s elada<\/h2>\n<p>\nP\u00e4rast PG11-le \u00fcleminekut otsustasime j\u00e4tkata TOAST-i \"tuningut\" ja t\u00e4helepanu juhtida sellele, et alates sellest versioonist on saanud seadistada parameetrit <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/11\/storage-toast#STORAGE-TOAST-ONDISK\"><code>toast_tuple_target<\/code><\/a><\/noindex>:<\/p>\n<blockquote><p>TOAST-i t\u00f6\u00f6tlemise kood k\u00e4ivitub ainult siis, kui tabelis salvestatav stringi v\u00e4\u00e4rtus \u00fcletab TOAST_TUPLE_THRESHOLD baitides (tavaliselt 2 kB). TOAST-i kood hakkab tihendama ja \/ v\u00f5i viima v\u00e4lja andmev\u00e4lja tabelist, kuni stringi v\u00e4\u00e4rtus on v\u00e4iksem kui TOAST_TUPLE_TARGET baitides (muutuv v\u00e4\u00e4rtus, samuti tavaliselt 2 kB) v\u00f5i kuni v\u00e4iksemaks muutmine ei ole enam v\u00f5imalik.<\/p><\/blockquote>\n<p>Otsustasime, et meie andmed on tavaliselt kas \"\u00fclimalt l\u00fchikesed\" v\u00f5i \"v\u00e4ga pikad\", seega otsustasime j\u00e4\u00e4da minimaalselt v\u00f5imalikule v\u00e4\u00e4rtusele:<\/p>\n<pre><code class=\"sql\">ALTER TABLE rawplan_orig SET (toast_tuple_target = 128);<\/code><\/pre>\n<p>\nVaatame, kuidas uued seaded on m\u00f5jutanud kettaruumi p\u00e4rast \u00fcmberseadmisi:<\/p>\n<p><img decoding=\"async\" alt=\"S\u00e4\u00e4stame sentti suurte mahtude puhul PostgreSQL-is\" src=\"\/wp-content\/uploads\/2020\/04\/ccaa4879e413a566b362d01582eb8c19.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPole paha! Keskmine <b>kettajuhtimise ooteaeg v\u00e4henes<\/b> umbes 1,5 korda ja ketta \"kasutatus\" \u2014 20% v\u00f5rra! Kuid v\u00f5ib-olla see kuidagi m\u00f5jutas CPU-d?<\/p>\n<p><img decoding=\"async\" alt=\"S\u00e4\u00e4stame sentti suurte mahtude puhul PostgreSQL-is\" src=\"\/wp-content\/uploads\/2020\/04\/f7026e5809853d35c6fb7a8376b9f369.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIgal juhul ei saanud hullemaks. Kuigi, keeruline on hinnata, kui isegi sellised mahud ei suuda keskmist CPU-koormust t\u00f5sta \u00fcle <b>5%<\/b>.<\/p>\n<h2>Kohtade vahetamisega muutub summa\u2026!<\/h2>\n<p>\nNagu teada, kaitseb \u00fche kopika abiga rubla, ja meie salvestusmahud, mis on umbes <b>10TB\/kuus<\/b> suudavad isegi v\u00e4ike optimeerimine pakkuda head kasu. Seet\u00f5ttu p\u00f6\u00f6rasime t\u00e4helepanu oma andmete f\u00fc\u00fcsilisele struktuurile \u2014 kuidas konkreetselt <b>\"paigutatud\" v\u00e4ljad igas tabeli kirjes.<\/b> Kuna andmete \"joondamine\"<\/p>\n<p>m\u00f5jutab otseselt <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/444536\/\">saavutatud mahtu.<\/a><\/noindex> Paljud arhitektuurid eeldavad andmete joondamist masinale vastavatesse piirteesse. N\u00e4iteks 32-bitises x86 s\u00fcsteemis on t\u00e4isarvud (t\u00fc\u00fcp integer, mille suurus on 4 baiti) joondatud 4-baitsete s\u00f5nade piiridesse, nagu ka topelt t\u00e4psusega ujukomaarvud (t\u00fc\u00fcp double precision, 8 baiti). Ja 64-bitises s\u00fcsteemis on topeltv\u00e4\u00e4rtused joondatud 8-baitsete s\u00f5nade piiridesse. See on veel \u00fcks p\u00f5hjus \u00fchilduvuse probleemidele. <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/ee\/development\/ordering_table_columns.html\">m\u00f5jub l\u00f5ppmahule<\/a><\/noindex>:<\/p>\n<blockquote><p>Paljud arhitektuurid n\u00e4evad ette andmete joondamist masinas\u00f5nade piiride j\u00e4rgi. N\u00e4iteks 32-bitises x86 s\u00fcsteemis joondatakse t\u00e4isarvud (t\u00fc\u00fcp integer, 4 bait) 4-baitiste s\u00f5nade piirile, samuti ka kahekordse t\u00e4psusega ujuvpunktarvud (t\u00fc\u00fcp double precision, 8 bait). 64-bitises s\u00fcsteemis joondatakse double v\u00e4\u00e4rtused 8-baitiste s\u00f5nade piirile. See on veel \u00fcks mittesobivuse p\u00f5hjus.<\/p>\n<p>Ridade t\u00f5ttu s\u00f5ltub tabeli rida tulpa j\u00e4rjekorrast. Tavaliselt ei ole see efekt liiga silmatorkav, kuid m\u00f5nel juhul v\u00f5ib see p\u00f5hjustada olulist suuruse suurenemist. N\u00e4iteks, kui segada char(1) ja integer t\u00fc\u00fcpe, siis nende vahel kaob tavaliselt 3 baiti.<\/p><\/blockquote>\n<p>\nAlustame s\u00fcnteetiliste mudelitega:<\/p>\n<pre><code class=\"sql\">SELECT pg_column_size(ROW(\n  '0000-0000-0000-0000-0000-0000-0000-0000'::uuid\n, 0::smallint\n, '2019-01-01'::date\n));\n-- 48 baiti\n\nSELECT pg_column_size(ROW(\n  '2019-01-01'::date\n, '0000-0000-0000-0000-0000-0000-0000-0000'::uuid\n, 0::smallint\n));\n-- 46 baiti<\/code><\/pre>\n<p>\nKust ilmus esimeses n\u00e4ites paar liigset baiti? K\u00f5ik on lihtne \u2014 <b>2-baidine smallint joondatakse 4-baidise piiri j\u00e4rgi<\/b> enne j\u00e4rgmist v\u00e4lja, kuid kui see on viimane, siis ei ole joondamiseks midagi.<\/p>\n<p>Teoorias on k\u00f5ik h\u00e4sti ja v\u00e4lju saab paigutada meelevaldselt. Kontrollime reaalseid andmeid \u00fche tabeli n\u00e4itel, mille p\u00e4evase sektsiooni maht on 10\u201315GB.<\/p>\n<p>Algne struktuur:<\/p>\n<pre><code class=\"sql\">CREATE TABLE public.plan_20190220\n(\n-- P\u00e4randatud tabelist plan:  pack uuid NOT NULL,\n-- P\u00e4randatud tabelist plan:  recno smallint NOT NULL,\n-- P\u00e4randatud tabelist plan:  host uuid,\n-- P\u00e4randatud tabelist plan:  ts timestamp with time zone,\n-- P\u00e4randatud tabelist plan:  exectime numeric(32,3),\n-- P\u00e4randatud tabelist plan:  duration numeric(32,3),\n-- P\u00e4randatud tabelist plan:  bufint bigint,\n-- P\u00e4randatud tabelist plan:  bufmem bigint,\n-- P\u00e4randatud tabelist plan:  bufdsk bigint,\n-- P\u00e4randatud tabelist plan:  apn uuid,\n-- P\u00e4randatud tabelist plan:  ptr uuid,\n-- P\u00e4randatud tabelist plan:  dt date,\n  CONSTRAINT plan_20190220_pkey PRIMARY KEY (pack, recno),\n  CONSTRAINT chck_ptr CHECK (ptr IS NOT NULL),\n  CONSTRAINT plan_20190220_dt_check CHECK (dt = '2019-02-20'::date)\n)\nINHERITS (public.plan)<\/code><\/pre>\n<p>\nSektsioon p\u00e4rast veergude j\u00e4rjekorra muutmist \u2014 t\u00e4pselt <b>samad v\u00e4ljad, ainult j\u00e4rjekord on erinev<\/b>:<\/p>\n<pre><code class=\"sql\">CREATE TABLE public.plan_20190221\n(\n-- P\u00e4randatud tabelist plan:  dt date NOT NULL,\n-- P\u00e4randatud tabelist plan:  ts timestamp with time zone,\n-- P\u00e4randatud tabelist plan:  pack uuid NOT NULL,\n-- P\u00e4randatud tabelist plan:  recno smallint NOT NULL,\n-- P\u00e4randatud tabelist plan:  host uuid,\n-- P\u00e4randatud tabelist plan:  apn uuid,\n-- P\u00e4randatud tabelist plan:  ptr uuid,\n-- P\u00e4randatud tabelist plan:  bufint bigint,\n-- P\u00e4randatud tabelist plan:  bufmem bigint,\n-- P\u00e4randatud tabelist plan:  bufdsk bigint,\n-- P\u00e4randatud tabelist plan:  exectime numeric(32,3),\n-- P\u00e4randatud tabelist plan:  duration numeric(32,3),\n  CONSTRAINT plan_20190221_pkey PRIMARY KEY (pack, recno),\n  CONSTRAINT chck_ptr CHECK (ptr IS NOT NULL),\n  CONSTRAINT plan_20190221_dt_check CHECK (dt = '2019-02-21'::date)\n)\nINHERITS (public.plan)<\/code><\/pre>\n<p>\nSektsiooni kogumaht m\u00e4\u00e4ratakse \u00abfaktide\u00bb arvu j\u00e4rgi ja s\u00f5ltub ainult v\u00e4listest protsessidest, seega jagame heap'i suuruse (<code>pg_relation_size<\/code>kandmisel on arvestatud kirjeid \u2014 seega saame <b>keskmise suurusega salvestatud kirje<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"S\u00e4\u00e4stame sentti suurte mahtude puhul PostgreSQL-is\" src=\"\/wp-content\/uploads\/2020\/04\/06be2d7d70d223e7678f9a478e4c293f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Miinus 6% mahust<\/b>, suurep\u00e4rane!<\/p>\n<p>Kuid k\u00f5ik pole siiski nii roosiline \u2014 sest <b>indeksites ei saa me v\u00e4ljade j\u00e4rjekorda muuta<\/b>, seega \"\u00fcldiselt\" (<code>pg_total_relation_size<\/code>)\u2026<\/p>\n<p><img decoding=\"async\" alt=\"S\u00e4\u00e4stame sentti suurte mahtude puhul PostgreSQL-is\" src=\"\/wp-content\/uploads\/2020\/04\/8beff38e5034fc0d40665b75cb3b3625.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n... siiski ka siin <b>s\u00e4\u00e4stsime 1,5%<\/b>, muutes koodis ainsatki rida. Nii see on!<\/p>\n<p><img decoding=\"async\" alt=\"S\u00e4\u00e4stame sentti suurte mahtude puhul PostgreSQL-is\" src=\"\/wp-content\/uploads\/2020\/04\/10f4a2151465a38bf45823a5d360302b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Tahan m\u00e4rkida, et eespool toodud v\u00e4ljade paigutus ei ole kindlasti k\u00f5ige optimaalsem. Kuna m\u00f5ned v\u00e4ljade plokid ei taha \u201ekatkestada\u201c juba esteetilistel p\u00f5hjustel \u2014 n\u00e4iteks paar <code>(pack, recno)<\/code>, mis on selle tabeli PK.<\/p>\n<p>\u00dcldiselt on \u201eminimaalse\u201c v\u00e4ljade paigutuse m\u00e4\u00e4ramine piisavalt lihtne \u201ekatsetamise\u201c \u00fclesanne. Seega saate oma andmetega saavutada isegi paremaid tulemusi kui meil \u2014 proovige!<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/tensor\/blog\/498292\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u0442\u0435\u043c\u0443 \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0434\u043d\u044f\u0442\u0443\u044e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u043f\u0440\u043e \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432 \u044d\u0442\u043e\u0439 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u00ab\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439\u00bb \u0440\u0430\u0437\u043c\u0435\u0440 \u0445\u0440\u0430\u043d\u0438\u043c\u043e\u0433\u043e \u0432 PostgreSQL, \u0438 \u0438\u0445 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0420\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043f\u0440\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 TOAST \u0438 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u00ab\u0412 \u0441\u0440\u0435\u0434\u043d\u0435\u043c\u00bb \u044d\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0437\u0430\u0442\u043e \u2014 \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0435\u0437 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":79040,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-79039","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u0442\u0435\u043c\u0443 \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0434\u043d\u044f\u0442\u0443\u044e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u043f\u0440\u043e \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432 \u044d\u0442\u043e\u0439 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0436\u043d\u043e.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u042d\u043a\u043e\u043d\u043e\u043c\u0438\u043c \u043a\u043e\u043f\u0435\u0435\u0447\u043a\u0443 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0432 PostgreSQL | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u0442\u0435\u043c\u0443 \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0434\u043d\u044f\u0442\u0443\u044e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u043f\u0440\u043e \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432 \u044d\u0442\u043e\u0439 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0436\u043d\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-04-23T17:43:26+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-23T17:43:26+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47S\u00e4\u00e4stame senti suurte mahtude puhul PostgreSQL-is | ProHoster","description":"J\u00e4tkates eelneva artikli teemat suure andmepooluse salvestamisest jaotamise osas, vaatame selles, kuidas seda teha.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u042d\u043a\u043e\u043d\u043e\u043c\u0438\u043c \u043a\u043e\u043f\u0435\u0435\u0447\u043a\u0443 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0432 PostgreSQL | ProHoster","og:description":"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u0442\u0435\u043c\u0443 \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0434\u043d\u044f\u0442\u0443\u044e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u043f\u0440\u043e \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432 \u044d\u0442\u043e\u0439 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0436\u043d\u043e.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-04-23T17:43:26+00:00","article:modified_time":"2020-04-23T17:43:26+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"79039","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:46:33","updated":"2022-09-28 06:02:32","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/79039","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=79039"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/79039\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/79040"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=79039"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=79039"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=79039"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}