{"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\/da\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql","title":{"rendered":"Spar penge p\u00e5 store m\u00e6ngder i PostgreSQL","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Forts\u00e6ttende emnet om registrering af store datastreams, som blev rejst <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/497008\/\">i den tidligere artikel om partitionering<\/a><\/noindex>, vil vi i denne se p\u00e5 metoderne, som kan <b>reducere den \"fysiske\" st\u00f8rrelse af det gemte<\/b> i PostgreSQL, og deres indflydelse p\u00e5 serverens ydeevne.<\/p>\n<p>Vi vil tale om <b>TOAST-indstillinger og datajustering<\/b>. \"I gennemsnit\" vil disse metoder ikke spare for mange ressourcer, men de kr\u00e6ver slet ingen \u00e6ndringer af applikationens kode.<\/p>\n<p><img decoding=\"async\" alt=\"Spar penge p\u00e5 store m\u00e6ngder i PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/4d43b9b43edb10c4c8f13159c7dd1eac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVores erfaring har dog vist sig at v\u00e6re ret produktiv i denne henseende, da opbevaringen af n\u00e6sten enhver overv\u00e5gning i sin natur er <b>st\u00f8rstedelen append-only<\/b> set fra dataskrivning. Og hvis du er nysgerrig efter, hvordan man kan l\u00e6re databasen at skrive til disk med <b>200MB\/s<\/b> halv st\u00f8rrelse \u2014 er du velkommen under cut.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Sm\u00e5 hemmeligheder fra store data<\/h2>\n<p>\nI forhold til <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/487380\/\">vores services profil<\/a><\/noindex>, modtager den regelm\u00e6ssigt fra loggene <b>tekstpakker<\/b>.<\/p>\n<p>Og da <noindex><a rel=\"nofollow\" href=\"https:\/\/sbis.ru\/all_services\">SBIS-systemet<\/a><\/noindex>, hvis databaser vi overv\u00e5ger, er et flerkomponentprodukt med komplekse datastrukturer, s\u00e5 bliver foresp\u00f8rgslerne <b>for at opn\u00e5 maksimal ydeevne<\/b> ret meget <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/486072\/\">\"flertoml\u00e6kker\" med kompleks algoritmisk logik.<\/a><\/noindex>S\u00e5 st\u00f8rrelsen af hver enkelt instans af foresp\u00f8rgslen eller den resulterende udf\u00f8relsesplan, der n\u00e5r os i loggen, viser sig at v\u00e6re \"i gennemsnit\" ret stor.<\/p>\n<p>Lad os se p\u00e5 strukturen af en af tabellerne, hvor vi skriver \"r\u00e5\" data \u2014 alts\u00e5 den originale tekst fra logregistreringen:<\/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 -- sektionens n\u00f8gle\n    date\n, data -- det vigtigste\n    text\n, PRIMARY KEY(pack, recno)\n);<\/code><\/pre>\n<p>\nEn typisk tabel (allerede partitioneret, uden tvivl, derfor er dette en skabelon til sektion), hvor det vigtigste er teksten. Nogle gange ret omfattende.<\/p>\n<p>Lad os huske, at den \"fysiske\" st\u00f8rrelse af en post i PG ikke kan overstige \u00e9n datagruppe, men den \"logiske\" st\u00f8rrelse er en helt anden sag. For at skrive en stor v\u00e6rdi (varchar\/text\/bytea) i et felt anvendes <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast\">TOAST-teknologien.<\/a><\/noindex>:<\/p>\n<blockquote><p>PostgreSQL bruger en fast sidest\u00f8rrelse (normalt 8 KB) og tillader ikke, at tupler optager mere end \u00e9n side. Derfor kan meget store feltv\u00e6rdier ikke gemmes direkte. For at overvinde denne begr\u00e6nsning komprimeres og\/eller opdeles store feltv\u00e6rdier i flere fysiske r\u00e6kker. Dette sker uset for brugeren og p\u00e5virker kun en lille del af serverkoden. Denne metode er kendt som TOAST \u2026<\/p><\/blockquote>\n<p>\nFaktisk oprettes der automatisk et par af tabeller med \"potentielt store\" felter <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast#STORAGE-TOAST-ONDISK\">en \"skiver\"<\/a><\/noindex> for hver \"stor\" post segmenteret i 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>\nDet vil sige, at hvis vi skal gemme en r\u00e6kke med en \"stor\" v\u00e6rdi <code>data<\/code>, s\u00e5 vil den faktiske optagelse ske <b>ikke kun i hovedtabellen og dens PK, men ogs\u00e5 i TOAST og dens PK<\/b>.<\/p>\n<h4>Reducer TOAST-p\u00e5virkningen<\/h4>\n<p>\nMen st\u00f8rstedelen af vores poster er trods alt ikke s\u00e5 store, <b>de burde kunne v\u00e6re inden for 8KB<\/b> \u2014 hvordan kan vi spare p\u00e5 dette?..<\/p>\n<p>Her kommer attributten <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast#STORAGE-TOAST-ONDISK\"><code>STORAGE<\/code><\/a><\/noindex> for kolonnen i tabellen os til hj\u00e6lp:<\/p>\n<blockquote>\n<ul>\n<li><b>EXTENDED<\/b> tillader b\u00e5de kompression og separat opbevaring. Det er <b>den standardmulighed<\/b> for de fleste datatyper, der er kompatible med TOAST. F\u00f8rst fors\u00f8ges det at udf\u00f8re kompression, derefter \u2014 at gemme uden for tabellen, hvis r\u00e6kke stadig er for stor.<\/li>\n<li><b>MAIN<\/b> tillader kompression, men ikke separat opbevaring. (Faktisk vil separat opbevaring dog blive udf\u00f8rt for s\u00e5danne kolonner, men kun <b>som en sidste udvej<\/b>, n\u00e5r der ikke er nogen anden m\u00e5de at reducere r\u00e6kken p\u00e5, s\u00e5 den kan placeres p\u00e5 siden.)<\/li>\n<\/ul>\n<\/blockquote>\n<p>Faktisk er dette pr\u00e6cis, hvad vi har brug for til tekst \u2014 <b>maksimalt at komprimere, og hvis det slet ikke kan v\u00e6re der \u2014 at flytte det til TOAST.<\/b>Dette kan g\u00f8res direkte \"on the fly\" med en kommando:<\/p>\n<pre><code class=\"sql\">ALTER TABLE rawdata_orig ALTER COLUMN data SET STORAGE MAIN;<\/code><\/pre>\n<p><\/p>\n<h4>Hvordan vurdere effekten<\/h4>\n<p>\nDa datam\u00e6ngden \u00e6ndrer sig dagligt, kan vi ikke sammenligne absolutte tal, men i forhold til hvor <b>mindre andel<\/b> vi har gemt i TOAST \u2014 jo bedre. Men her er der en fare \u2014 jo st\u00f8rre vores \"fysiske\" volumen af hver enkelt post, jo \"bredere\" bliver indekset, fordi der skal d\u00e6kkes et st\u00f8rre antal databasissider.<\/p>\n<p>Sektion <b>f\u00f8r \u00e6ndringer<\/b>:<\/p>\n<pre><code class=\"plaintext\">heap  = 37GB (39%)\nTOAST = 54GB (57%)\nPK    =  4GB ( 4%)\n<\/code><\/pre>\n<p>\nSektion <b>efter \u00e6ndringer<\/b>:<\/p>\n<pre><code class=\"plaintext\">heap  = 37GB (67%)\nTOAST = 16GB (29%)\nPK    =  2GB ( 4%)<\/code><\/pre>\n<p>\nFaktisk, vi <b>Vi skriver nu i TOAST dobbelt s\u00e5 sj\u00e6ldent<\/b>, hvilket ikke kun har lettet disken, men ogs\u00e5 CPU'en:<\/p>\n<p><img decoding=\"async\" alt=\"Spar penge p\u00e5 store m\u00e6ngder i PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/547485eff9c6491ffe4d59e5c81f656d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Spar penge p\u00e5 store m\u00e6ngder i PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/6bd3b18146c20959693f961e41fff447.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJeg bem\u00e6rker, at vi ogs\u00e5 er blevet bedre til at \"l\u00e6se\" disken mindre, ikke kun \"skrive\" - fordi n\u00e5r vi inds\u00e6tter en post i en tabel, skal vi \"l\u00e6se\" en del af tr\u00e6et for hver af indeksene for at bestemme dens fremtidige position i dem.<\/p>\n<h2>Hvem har det godt med PostgreSQL 11<\/h2>\n<p>\nEfter opgraderingen til PG11 besluttede vi at forts\u00e6tte med at \"finjustere\" TOAST og lagde m\u00e6rke til, at fra denne version blev parameteren <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>Koden til behandling af TOAST aktiveres kun, n\u00e5r v\u00e6rdien af strengen, der skal gemmes i tabellen, overstiger TOAST_TUPLE_THRESHOLD bytes (normalt 2 KB). TOAST-koden vil komprimere og\/eller flytte v\u00e6rdierne uden for tabellen, indtil strengen bliver mindre end TOAST_TUPLE_TARGET bytes (variabel st\u00f8rrelse, ogs\u00e5 normalt 2 KB) eller det bliver umuligt at reducere volumen.<\/p><\/blockquote>\n<p>Vi besluttede, at vores data normalt enten er \"meget korte\" eller \"meget lange\", s\u00e5 vi besluttede at begr\u00e6nse os til den mindste mulige v\u00e6rdi:<\/p>\n<pre><code class=\"sql\">ALTER TABLE rawplan_orig SET (toast_tuple_target = 128);<\/code><\/pre>\n<p>\nLad os se, hvordan de nye indstillinger har p\u00e5virket diskbelastningen efter justeringen:<\/p>\n<p><img decoding=\"async\" alt=\"Spar penge p\u00e5 store m\u00e6ngder i PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/ccaa4879e413a566b362d01582eb8c19.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIkke d\u00e5rligt! Den gennemsnitlige <b>diskk\u00f8 er blevet reduceret<\/b> med cirka 1,5 gange, og diskens \"bel\u00e6gning\" er faldet med 20%! Men har det muligvis haft en indvirkning p\u00e5 CPU'en?<\/p>\n<p><img decoding=\"async\" alt=\"Spar penge p\u00e5 store m\u00e6ngder i PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/f7026e5809853d35c6fb7a8376b9f369.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nI det mindste er det ikke blevet v\u00e6rre. Selvom det er sv\u00e6rt at bed\u00f8mme, hvis s\u00e5 store m\u00e6ngder stadig ikke kan h\u00e6ve den gennemsnitlige belastning p\u00e5 CPU'en over <b>5%<\/b>.<\/p>\n<h2>Fra \u00e6ndringen af placeringen af ledetr\u00e5dene... \u00e6ndrer summen sig!<\/h2>\n<p>\nSom bekendt sparer en rubel penge, og med vores lagringsvolumener p\u00e5 <b>10TB\/m\u00e5ned<\/b> kan selv en lille optimering give en god fortjeneste. Derfor lagde vi m\u00e6rke til den fysiske struktur af vores data - hvordan felterne specifikt <b>\"er placeret\" indeni hver post<\/b> af disse tabeller.<\/p>\n<p>Fordi p\u00e5 grund af <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/444536\/\">datajustering<\/a><\/noindex> har det direkte <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/ee\/development\/ordering_table_columns.html\">indflydelse p\u00e5 det samlede volumen.<\/a><\/noindex>:<\/p>\n<blockquote><p>Mange arkitekturer kr\u00e6ver datajustering p\u00e5 gr\u00e6nserne for maskinord. For eksempel vil p\u00e5 et 32-bit system x86 blive hele tal (integer-type, opptager 4 bytes) justeret til gr\u00e6nsen for 4-byte ord, ligesom dobbeltpr\u00e6cisions flydende tal (double precision-type, 8 bytes). P\u00e5 et 64-bit system vil double-v\u00e6rdier blive justeret til gr\u00e6nsen for 8-byte ord. Dette er endnu en grund til inkompatibilitet.<\/p>\n<p>P\u00e5 grund af justeringen afh\u00e6nger st\u00f8rrelsen af tabelr\u00e6kken af r\u00e6kkef\u00f8lgen af felterne. Normalt er denne effekt ikke s\u00e6rlig m\u00e6rkbar, men i nogle tilf\u00e6lde kan det f\u00f8re til en betydelig stigning i st\u00f8rrelsen. For eksempel, hvis man blander felterne char(1) og integer, vil der normalt g\u00e5 3 bytes til spilde mellem dem.<\/p><\/blockquote>\n<p>\nLad os begynde med syntetiske modeller:<\/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 bytes\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 bytes<\/code><\/pre>\n<p>\nHvor kom de ekstra bytes fra i f\u00f8rste tilf\u00e6lde? Det er ganske enkelt \u2014 <b>den 2-byte smallint justeres til en 4-byte gr\u00e6nse<\/b> f\u00f8r det n\u00e6ste felt, og n\u00e5r det st\u00e5r sidst, er der ikke noget at justere og ikke noget behov.<\/p>\n<p>I teorien er alt godt, og man kan omarrangere felterne, som man \u00f8nsker. Lad os tjekke det med reelle data, som et eksempel p\u00e5 en af tabellerne, hvis daglige sektion tager omkring 10-15GB.<\/p>\n<p>Den oprindelige struktur:<\/p>\n<pre><code class=\"sql\">CREATE TABLE public.plan_20190220\n(\n-- Arvet fra tabel plan:  pack uuid NOT NULL,\n-- Arvet fra tabel plan:  recno smallint NOT NULL,\n-- Arvet fra tabel plan:  host uuid,\n-- Arvet fra tabel plan:  ts timestamp with time zone,\n-- Arvet fra tabel plan:  exectime numeric(32,3),\n-- Arvet fra tabel plan:  duration numeric(32,3),\n-- Arvet fra tabel plan:  bufint bigint,\n-- Arvet fra tabel plan:  bufmem bigint,\n-- Arvet fra tabel plan:  bufdsk bigint,\n-- Arvet fra tabel plan:  apn uuid,\n-- Arvet fra tabel plan:  ptr uuid,\n-- Arvet fra tabel 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>\nSektionen efter \u00e6ndring af r\u00e6kkef\u00f8lgen af kolonnerne \u2014 er pr\u00e6cist <b>de samme felter, kun i en anden r\u00e6kkef\u00f8lge<\/b>:<\/p>\n<pre><code class=\"sql\">CREATE TABLE public.plan_20190221\n(\n-- Arvet fra tabel plan:  dt date NOT NULL,\n-- Arvet fra tabel plan:  ts timestamp with time zone,\n-- Arvet fra tabel plan:  pack uuid NOT NULL,\n-- Arvet fra tabel plan:  recno smallint NOT NULL,\n-- Arvet fra tabel plan:  host uuid,\n-- Arvet fra tabel plan:  apn uuid,\n-- Arvet fra tabel plan:  ptr uuid,\n-- Arvet fra tabel plan:  bufint bigint,\n-- Arvet fra tabel plan:  bufmem bigint,\n-- Arvet fra tabel plan:  bufdsk bigint,\n-- Arvet fra tabel plan:  exectime numeric(32,3),\n-- Arvet fra tabel 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>\nDen samlede st\u00f8rrelse af sektionen bestemmes af antallet af \"fakta\" og afh\u00e6nger kun af eksterne processer, s\u00e5 vi deler st\u00f8rrelsen af heap (<code>pg_relation_size<\/code>) p\u00e5 antallet af poster i den \u2014 s\u00e5 vi f\u00e5r <b>den gennemsnitlige st\u00f8rrelse af den reelle lagrede post<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"Spar penge p\u00e5 store m\u00e6ngder i PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/06be2d7d70d223e7678f9a478e4c293f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Minus 6% volumen<\/b>, fremragende!<\/p>\n<p>Men alt er selvf\u00f8lgelig ikke s\u00e5 rosenr\u00f8dt \u2014 for <b>kan vi ikke \u00e6ndre r\u00e6kkef\u00f8lgen af felterne i indeksene<\/b>, og derfor er \"generelt\" (<code>pg_total_relation_size<\/code>)\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Spar penge p\u00e5 store m\u00e6ngder i PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/8beff38e5034fc0d40665b75cb3b3625.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u2026 alligevel her <b>sparet 1,5%<\/b>, uden at \u00e6ndre en eneste linje kode. S\u00e5 ja!<\/p>\n<p><img decoding=\"async\" alt=\"Spar penge p\u00e5 store m\u00e6ngder i PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/10f4a2151465a38bf45823a5d360302b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Lad mig bem\u00e6rke, at den ovenfor beskrevne r\u00e6kkef\u00f8lge af felterne \u2014 ikke n\u00f8dvendigvis den mest optimale. Fordi nogle blokke af felter vil man ikke gerne \"br\u00e6kke\" af \u00e6stetiske grunde \u2014 for eksempel et par <code>(pack, recno)<\/code>, som er PK for denne tabel.<\/p>\n<p>Generelt set er definitionen af den \"mindste\" r\u00e6kkef\u00f8lge af felter en relativt simpel \"brute force\" opgave. S\u00e5 du kan p\u00e5 dine data f\u00e5 resultater, der endda er bedre end vores \u2014 pr\u00f8v!<br \/>\n<br \/>Kilde: <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.3 - 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\/da\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47Sparer en lille skilling p\u00e5 store m\u00e6ngder i PostgreSQL | ProHoster","description":"I forl\u00e6ngelse af emnet om at registrere store datastreams, som blev rejst i den tidligere artikel om partitionering, vil vi i denne se p\u00e5 de metoder, som kan anvendes.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/79039","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=79039"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/79039\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/79040"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=79039"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=79039"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=79039"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}