{"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":"Kogume kokku v\u00e4ikese raha suuremate mahtude puhul PostgreSQL-is","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>J\u00e4tkates teemat suurte andmevoogude salvestamisest, t\u00f5statatud <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/497008\/\">eelnevas artiklis sektsioneerimise kohta<\/a><\/noindex>, vaatleme selles, kuidas <b>v\u00e4heneda \u201ef\u00fc\u00fcsilist\u201c suurust salvestatud<\/b> PostgreSQL-is ja nende m\u00f5ju serveri tulemuslikkusele.<\/p>\n<p>Jutt l\u00e4heb <b>TOAST seadistustest ja andmete joondamisest<\/b>. \u201eKeskmiselt\u201d v\u00f5imaldavad need meetodid s\u00e4\u00e4sta mitte liiga palju ressursse, kuid \u2014 t\u00e4iesti ilma rakenduskoodi modifitseerimiseta.<\/p>\n<p><img decoding=\"async\" alt=\"Kogume kokku v\u00e4ikese raha suuremate 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 praktiliselt iga j\u00e4lgimise salvestus on oma olemuselt <b>suurel m\u00e4\u00e4ral ainult append-only<\/b> salvestatavate andmete osas. Ja kui teid huvitab, kuidas \u00f5petada andmebaasi kirjutama kettale asemel <b>200 MB\/s<\/b> kaks korda v\u00e4hem \u2014 tulge edasi.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Suurte andmete v\u00e4ikesed saladused<\/h2>\n<p>\nMeie teenuse <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/487380\/\">profilatsiooni j\u00e4rgi<\/a><\/noindex>, saab regulaarselt logidelt <b>tekstipakette<\/b>.<\/p>\n<p>Ja kuna <noindex><a rel=\"nofollow\" href=\"https:\/\/sbis.ru\/all_services\">SBIS kompleks<\/a><\/noindex>, kelle andmebaase me j\u00e4lgime, on mitmekomponendiline toode keeruliste andmestruktuuridega, siis on ka p\u00e4ringud <b>maksimaalse tulemuslikkuse saavutamiseks<\/b> t\u00e4iesti sellised <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/486072\/\">\u201emitme k\u00f6itega\u201c keerulise algoritmilise loogikaga<\/a><\/noindex>. Seega on iga individuaalse p\u00e4ringu v\u00f5i saadud t\u00e4itmisplaani maht meie logis \"keskmiselt\" piisavalt suur.<\/p>\n<p>Vaatame \u00fchte tabeli struktuuri, kuhu kirjutame \"tooreid\" andmeid \u2014 st originaalteksti 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 -- sektsiooni 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 seotud, loomulikult, seega on see \u2014 sektsiooni mall), kus k\u00f5ige olulisem on tekst. Kohati piisavalt mahukas.<\/p>\n<p>Kasutame meeles, et PG-s \u00fche kirje \"f\u00fc\u00fcsiline\" suurus ei saa \u00fcletada \u00fchte andmelehek\u00fclge, kuid \"loogiline\" suurus on sootuks teine asi. Mahuliste v\u00e4\u00e4rtuste (varchar\/text\/bytea) salvestamiseks v\u00e4ljal kasutatakse <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast\">tehnoloogiat TOAST<\/a><\/noindex>:<\/p>\n<blockquote><p>PostgreSQL kasutab fikseeritud lehe suurust (tavaliselt 8 KB) ja ei luba tupletitel h\u00f5ivata mitut lehte. Seet\u00f5ttu ei saa v\u00e4ga suuri v\u00e4li v\u00e4\u00e4rtusi otse salvestada. Selle piirangu \u00fcletamiseks surutakse suured v\u00e4li v\u00e4\u00e4rtused kokku ja\/v\u00f5i jagatakse mitmeks f\u00fc\u00fcsiliseks reale. See toimub kasutajale m\u00e4rkamatult ja m\u00f5jutab enamikku serveri koodist minimaalselt. Seda meetodit tuntakse TOAST &#8230;<\/p><\/blockquote>\n<p>\nTegelikult luuakse iga 'potentsiaalselt suure' v\u00e4lja tabeli jaoks automaatselt <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast#STORAGE-TOAST-ONDISK\">paarne tabel 't\u00fckeldamisega'<\/a><\/noindex> iga 'suure' kirje kohta segmentide kaupa 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>\nSee t\u00e4hendab, et kui peame kirjutama rea, millel on 'suur' v\u00e4\u00e4rtus <code>data<\/code>, siis t\u00f5eline salvestamine toimub <b>mitte ainult p\u00f5hitaotlemises ja selle PK-s, vaid ka TOAST-is ja selle PK-s<\/b>.<\/p>\n<h4>V\u00e4hendame TOAST-i m\u00f5ju<\/h4>\n<p>\nKuid enamik kirjeid ei ole siiski nii suured, <b>8KB peaks olema piisav<\/b> \u2014 kuidas selle pealt kokku hoida?..<\/p>\n<p>Siin tuleb meile appi atribuut <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 pakkimist kui ka eraldi salvestamist. See <b>on standardne valik<\/b> enamikule TOAST-iga \u00fchilduvatest andmet\u00fc\u00fcpidest. Esiteks proovitakse teha tihendamist, seej\u00e4rel - salvestamist tabeli v\u00e4listesse osadesse, kui rida on endiselt liiga suur.<\/li>\n<li><b>PEA<\/b> lubab tihendamist, kuid mitte eraldi salvestamist. (Tegelikult tehakse eraldi salvestamine selliste v\u00e4ljade puhul siiski, kuid ainult <b>\u00e4\u00e4rmuslikul juhul<\/b>, kui pole muid v\u00f5imalusi, et rida v\u00e4hendada nii, et see mahtuks lehek\u00fcljele.)<\/li>\n<\/ul>\n<\/blockquote>\n<p>Tegelikult on see t\u00e4pselt see, mida me tekstiga vajame - <b>maksimaalselt tihendada, ja kui ei mahu, siis viia TOAST-i<\/b>. Seda saab teha otse \"lennul\", \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 andmevoog muutub iga p\u00e4ev, ei saa me v\u00f5rrelda absoluutseid numbreid, vaid suhtelisi. <b>mida v\u00e4iksem osa<\/b> me TOAST-i salvestasime - seda parem. Kuid siin on oht - mida suurem on meie iga eraldi kirje \"f\u00fc\u00fcsiline\" maht, seda \"laiem\" muutub indeks, kuna peame katma rohkem andmelehti.<\/p>\n<p>Sektsioon <b>enne muudatusi<\/b>:<\/p>\n<pre><code class=\"plaintext\">heap  = 37GB (39%)\nTOAST = 54GB (57%)\nPK    =  4GB ( 4%)\n<\/code><\/pre>\n<p>\nSektsioon <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, me <b>oleme hakanud TOAST-i kirjutama kaks korda harvemini<\/b>, mis leevendas mitte ainult ketast, vaid ka CPU-d:<\/p>\n<p><img decoding=\"async\" alt=\"Kogume kokku v\u00e4ikese raha suuremate mahtude puhul PostgreSQL-is\" src=\"\/wp-content\/uploads\/2020\/04\/547485eff9c6491ffe4d59e5c81f656d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Kogume kokku v\u00e4ikese raha suuremate mahtude puhul PostgreSQL-is\" src=\"\/wp-content\/uploads\/2020\/04\/6bd3b18146c20959693f961e41fff447.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTahan m\u00e4rkida, et me oleme hakanud v\u00e4hem ka ketast \u00ablugema\u00bb, mitte ainult \u00abkirjutama\u00bb \u2014 kuna mingi tabelisse kirje sisestamisel tuleb lugeda ka osa iga indeksi puust, et m\u00e4\u00e4rata selle tulevane positsioon nendes.<\/p>\n<h2>Kellele elada PostgreSQL 11 peal h\u00e4sti<\/h2>\n<p>\nP\u00e4rast PG11-le \u00fcleminekut otsustasime TOAST-i \u00abtuningut\u00bb edasi viia ja panime t\u00e4hele, et alates sellest versioonist on seadistatav parameter <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 aktiveerub ainult siis, kui tabelisse salvestatav ridade v\u00e4\u00e4rtus \u00fcletab TOAST_TUPLE_THRESHOLD baitides (tavaliselt 2 KB). TOAST-i kood hakkab tihendama v\u00f5i viima v\u00e4lja v\u00e4\u00e4rtusi tabelist, kuni ridade v\u00e4\u00e4rtus j\u00e4\u00e4b alla TOAST_TUPLE_TARGET baitide (muutuva suurusega, samuti tavaliselt 2 KB) v\u00f5i kuni edasine v\u00e4hendamine pole v\u00f5imalik.<\/p><\/blockquote>\n<p>Otsustasime, et meie andmed on kas \u00abt\u00e4iesti l\u00fchikesed\u00bb v\u00f5i \u00abv\u00e4ga pikad\u00bb, seega otsustasime piirduda minimaalse v\u00f5imaliku v\u00e4\u00e4rtusega:<\/p>\n<pre><code class=\"sql\">ALTER TABLE rawplan_orig SET (toast_tuple_target = 128);<\/code><\/pre>\n<p>\nVaadake, kuidas uued seaded on m\u00f5jutanud ketta laadimist p\u00e4rast seadistuste muutmist:<\/p>\n<p><img decoding=\"async\" alt=\"Kogume kokku v\u00e4ikese raha suuremate mahtude puhul PostgreSQL-is\" src=\"\/wp-content\/uploads\/2020\/04\/ccaa4879e413a566b362d01582eb8c19.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPole paha! Keskmine <b>ketta j\u00e4rjekord l\u00fchenes<\/b> umbes 1.5 korda ja ketta \u201ekasutatus\u201c v\u00e4henes 20% v\u00f5rra! Aga v\u00f5ib-olla m\u00f5jutas see kuidagi CPU-d?<\/p>\n<p><img decoding=\"async\" alt=\"Kogume kokku v\u00e4ikese raha suuremate mahtude puhul PostgreSQL-is\" src=\"\/wp-content\/uploads\/2020\/04\/f7026e5809853d35c6fb7a8376b9f369.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIgal juhul halvemaks ei l\u00e4inud. Kuigi on raske \u00f6elda, kui isegi sellised mahud ei suuda keskmise CPU koormust t\u00f5sta <b>5%<\/b>.<\/p>\n<h2>Kohavahetusega muutub ka summa!<\/h2>\n<p>\nNagu teada, hoiab rubla rubla ja meie salvestusmahu korral <b>10TB\/kuus<\/b> v\u00f5ib isegi v\u00e4ike optimeerimine anda head kasu. Seet\u00f5ttu p\u00f6\u00f6rasime t\u00e4helepanu oma andmete f\u00fc\u00fcsilisele struktuurile \u2014 kuidas t\u00e4pselt <b>v\u00e4ljad on \u201epaigutatud\u201c iga tabeli<\/b> sissekande sees.<\/p>\n<p>Sest <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/444536\/\">andmete joondamine<\/a><\/noindex> m\u00f5jub otseselt <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/ee\/development\/ordering_table_columns.html\">tulemuslikule mahule<\/a><\/noindex>:<\/p>\n<blockquote><p>Paljud arhitektuurid n\u00f5uavad andmete joondamist masinas\u00f5nade piiride j\u00e4rgi. N\u00e4iteks 32-bitises x86 s\u00fcsteemis joondatakse t\u00e4isarvud (t\u00fc\u00fcp integer, 4 baiti) 4-baidiste s\u00f5nade piiride j\u00e4rgi, nagu ka topelt t\u00e4psuse ujukomaarvud (t\u00fc\u00fcp double precision, 8 baiti). 64-bitises s\u00fcsteemis joondatakse double v\u00e4\u00e4rtused 8-baidiste s\u00f5nade piiride j\u00e4rgi. See on veel \u00fcks p\u00f5hjus, miks tekib \u00fchilduvusprobleeme.<\/p>\n<p>Joondamise t\u00f5ttu s\u00f5ltub tabeli rea suurus v\u00e4ljade paigutuse j\u00e4rjekorrast. T\u00fc\u00fcpiliselt pole see efekt v\u00e4ga m\u00e4rgatav, kuid m\u00f5nel juhul v\u00f5ib see p\u00f5hjustada m\u00e4rkimisv\u00e4\u00e4rse suuruse suurenemise. N\u00e4iteks, kui segada char(1) ja integer t\u00fc\u00fcpi v\u00e4lju, kaob nende vahele 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 tulid kaks \u00fcleliigset baiti esimeses juhul? See on lihtne \u2014 <b>2-baidine smallint joondatakse 4-baidise piiri j\u00e4rgi<\/b> enne j\u00e4rgmist v\u00e4lja, kuid kui see on viimasena, ei ole joondamiseks mitte midagi ja pole vajadust.<\/p>\n<p>Teoorias on k\u00f5ik h\u00e4sti ja saame v\u00e4ljad paigutada kuidas tahes. Kontrollime reaalsed andmed \u00fche tabeli n\u00e4itel, mille p\u00e4evane sektsioon h\u00f5ivab 10-15 GB.<\/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 teine<\/b>:<\/p>\n<pre><code class=\"sql\">LOO KAVA 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)\nP\u00c4RANDAB (public.plan)<\/code><\/pre>\n<p>\nJaotise kogumaht m\u00e4\u00e4ratakse \"faktide\" arvu alusel ja s\u00f5ltub ainult v\u00e4listest protsessidest, seega jagame heap'i suuruse (<code>pg_relation_size<\/code>) selle salvestuste arvuga \u2014 seega saame <b>reaalse salvestuse keskmine suurus<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"Kogume kokku v\u00e4ikese raha suuremate 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>Aga k\u00f5ik ei ole muidugi nii roosiline \u2014 sest <b>indeksite puhul 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=\"Kogume kokku v\u00e4ikese raha suuremate mahtude puhul PostgreSQL-is\" src=\"\/wp-content\/uploads\/2020\/04\/8beff38e5034fc0d40665b75cb3b3625.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u2026 siiski ka siin <b>s\u00e4\u00e4stsime 1,5%<\/b>, muutes koodis ei tilkagi. T\u00e4pselt nii!<\/p>\n<p><img decoding=\"async\" alt=\"Kogume kokku v\u00e4ikese raha suuremate 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 pruugi olla k\u00f5ige optimaalsem. Sest m\u00f5ningaid v\u00e4ljade bloke ei taha juba esteetilistel p\u00f5hjustel \"katkestada\" \u2014 n\u00e4iteks paar <code>(pack, recno)<\/code>, mis on selle tabeli PK.<\/p>\n<p>Kokkuv\u00f5ttes on \"minimaalsete\" v\u00e4ljade paigutuse m\u00e4\u00e4ramine piisavalt lihtne \"\u00fcletamis\u00fclesanne\". Seega v\u00f5ite oma andmete abil saavutada isegi paremaid tulemusi kui meie \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 4.9.10 - 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 \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,\" \/>\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) 4.9.10\" \/>\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 \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,\" \/>\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\udd47Kogume kokku raha suurte mahtude eest PostgreSQLis | ProHoster","description":"K\u00e4esolevas artiklis j\u00e4tkame eelnevalt arutletud suure andmevoogude salvestamise teemas, k\u00e4sitledes meetodeid, mille abil saab v\u00e4hendada PostgreSQLis salvestatud andmete \"f\u00fc\u00fcsilist\" suurust ning nende m\u00f5ju serveri sooritusele. Juttu tuleb TOAST-i seadistustest ja andmete joondamisest. \u201eKeskmiselt\u201c v\u00f5imaldavad need meetodid hoida kokku mitte liiga palju ressursse, kuid \u2014 t\u00e4iesti ilma rakenduskoodi muutmata. Siiski,","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 \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,","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"},"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}]}}