{"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\/nl\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql","title":{"rendered":"Bespaar een beetje geld op grote hoeveelheden in PostgreSQL","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Het onderwerp van het vastleggen van grote gegevensstromen, dat in <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/497008\/\">het vorige artikel over partitionering werd aangesneden,<\/a><\/noindex>komt hier aan bod met manieren om <b>de 'fysieke' omvang van opgeslagen<\/b> gegevens in PostgreSQL te verminderen en de impact daarvan op de serverprestaties.<\/p>\n<p>We gaan het hebben over <b>TOAST-instellingen en dataverlies.<\/b>. 'Gemiddeld' zullen deze methodes niet veel middelen besparen, maar ze vereisen ook helemaal geen wijziging van de applicatiecode.<\/p>\n<p><img decoding=\"async\" alt=\"Bespaar een beetje geld op grote hoeveelheden in PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/4d43b9b43edb10c4c8f13159c7dd1eac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOnze ervaring in dit opzicht is echter zeer productief gebleken, aangezien de opslag voor vrijwel elke monitoring van nature <b>grotendeels append-only<\/b> is met betrekking tot de gegevens die worden geschreven. En als je je afvraagt hoe je de database kunt leren om op een snelheid van <b>200MB\/s<\/b> de helft minder te schrijven - lees dan verder.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Kleine geheimen van grote data<\/h2>\n<p>\nVanwege het type werk <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/487380\/\">van onze service, ontvangt het regelmatig tekstpakketten uit de logs.<\/a><\/noindex>Aangezien <b>het gecombineerde systeem van SBIS,<\/b>.<\/p>\n<p>wiens databases we controleren, een veelzijdig product met complexe datastructuren is, zijn de verzoeken <noindex><a rel=\"nofollow\" href=\"https:\/\/sbis.ru\/all_services\">om maximale prestaties te bereiken<\/a><\/noindex>soms echt <b>'multi-volume' met complexe algoritmische logica.<\/b> Het resultaat is dat de omvang van elk afzonderlijk exemplaar van een verzoek of uitvoeringsplan in de door ons ontvangen logs 'gemiddeld' behoorlijk groot is. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/486072\/\">Laten we eens kijken naar de structuur van een van de tabellen waarin we 'rauwe' gegevens schrijven - dat wil zeggen de originele tekst uit de logregistratie:<\/a><\/noindex>CREATE TABLE rawdata_orig(\n  pack -- PK\n    uuid NOT NULL\n, recno -- PK\n    smallint NOT NULL\n, dt -- sectiesleutel\n    date\n, data -- het allerbelangrijkste\n    text\n, PRIMARY KEY(pack, recno)\n);<\/p>\n<p>Een typische tabel (al gepartitioneerd, uiteraard, dus dit is een sectiesjabloon), waarbij de tekst het belangrijkste is. Soms behoorlijk omvangrijk.<\/p>\n<pre><code class=\"sql\">Vergeet niet dat de 'fysieke' omvang van een record in PG niet groter kan zijn dan \u00e9\u00e9n datablok, maar de 'logische' omvang - dat is een heel ander verhaal. Om een volumineuze waarde (varchar\/text\/bytea) in een veld op te slaan, wordt<\/code><\/pre>\n<p>\nde TOAST-technologie gebruikt.<\/p>\n<p>Laten we ons herinneren dat de \"fysieke\" grootte van een record in PG niet meer dan \u00e9\u00e9n gegevenspagina mag innemen, maar de \"logische\" grootte is iets heel anders. Om een grote waarde in een veld (varchar\/text\/bytea) op te slaan, wordt er gebruik gemaakt van <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast\">de TOAST-technologie<\/a><\/noindex>:<\/p>\n<blockquote><p>PostgreSQL gebruikt een vaste paginagrootte (meestal 8 KB) en staat niet toe dat tuples meerdere pagina's in beslag nemen. Daarom is het niet mogelijk om zeer grote waardevelden direct op te slaan. Om deze beperking te omzeilen, worden grote waardevelden gecomprimeerd en\/of verdeeld over meerdere fysieke rijen. Dit gebeurt onopgemerkt voor de gebruiker en heeft slechts een geringe impact op het grootste deel van de servercode. Deze methode staat bekend als TOAST \u2026<\/p><\/blockquote>\n<p>\nIn feite wordt er automatisch voor elke tabel met \"potentieel grote\" velden <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast#STORAGE-TOAST-ONDISK\">een bijbehorende tabel aangemaakt met \"snedes\"<\/a><\/noindex> van elke \"grote\" opname in segmenten van 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>\nDat wil zeggen, als we een rij met een \"groot\" waarde moeten opslaan, <code>data<\/code>zal de werkelijke opname plaatsvinden <b>niet alleen in de hoofdtafel en zijn PK, maar ook in TOAST en zijn PK.<\/b>.<\/p>\n<h4>De impact van TOAST verminderen<\/h4>\n<p>\nMaar de meeste opnames zijn nog steeds niet zo groot, <b>moeten binnen 8KB passen<\/b> \u2014 hoe kunnen we hierop besparen?..<\/p>\n<p>Hier komt de attribuut <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast#STORAGE-TOAST-ONDISK\"><code>STORAGE<\/code><\/a><\/noindex> van de kolom in de tabel ons te hulp:<\/p>\n<blockquote>\n<ul>\n<li><b>EXTENDED<\/b> staat zowel compressie als aparte opslag toe. Dit <b>is de standaardoptie<\/b> voor de meeste datatypes die compatibel zijn met TOAST. Eerst wordt geprobeerd om compressie uit te voeren, vervolgens wordt de opslag buiten de tabel geprobeerd als de rij nog steeds te groot is.<\/li>\n<li><b>MAIN<\/b> staat compressie toe, maar niet aparte opslag. (In feite zal aparte opslag echter worden uitgevoerd voor dergelijke kolommen, maar alleen <b>als uiterste maatregel<\/b>, wanneer er geen andere manier is om de rij te verkleinen zodat deze op de pagina past.)<\/li>\n<\/ul>\n<\/blockquote>\n<p>In feite is dit precies wat we nodig hebben voor tekst \u2014 <b>zo veel mogelijk comprimeren, en als het echt niet past \u2014 verplaatsen naar TOAST.<\/b>Dit kan rechtstreeks \"on-the-fly\" met \u00e9\u00e9n commando:<\/p>\n<pre><code class=\"sql\">ALTER TABLE rawdata_orig ALTER COLUMN data SET STORAGE MAIN;<\/code><\/pre>\n<p><\/p>\n<h4>Hoe het effect te evalueren<\/h4>\n<p>\nAangezien de datastroom elke dag verandert, kunnen we geen absolute cijfers vergelijken, maar in relatieve termen, hoe <b>minder proportie<\/b> we in TOAST hebben opgeslagen \u2014 hoe beter. Maar hier is een risico \u2014 hoe groter ons \"fysieke\" volume van elke afzonderlijke opname, hoe \"breder\" de index wordt, omdat we meer gegevenspagina's moeten dekken.<\/p>\n<p>Sectie <b>voor de wijzigingen<\/b>:<\/p>\n<pre><code class=\"plaintext\">heap  = 37GB (39%)\nTOAST = 54GB (57%)\nPK    =  4GB ( 4%)\n<\/code><\/pre>\n<p>\nSectie <b>na de wijzigingen<\/b>:<\/p>\n<pre><code class=\"plaintext\">heap  = 37GB (67%)\nTOAST = 16GB (29%)\nPK    =  2GB ( 4%)<\/code><\/pre>\n<p>\nIn feite <b>schrijven we nu 2 keer minder naar TOAST.<\/b>, wat niet alleen de schijf, maar ook de CPU ontlastte:<\/p>\n<p><img decoding=\"async\" alt=\"Bespaar een beetje geld op grote hoeveelheden in PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/547485eff9c6491ffe4d59e5c81f656d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Bespaar een beetje geld op grote hoeveelheden in PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/6bd3b18146c20959693f961e41fff447.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIk merk op dat we de schijf niet alleen minder 'schrijven', maar ook minder 'lezen' \u2014 omdat we bij het invoegen van een record in een bepaalde tabel ook een deel van de boom van elke index moeten 'lezen' om de toekomstige positie daarin te bepalen.<\/p>\n<h2>Wie goed kan leven met PostgreSQL 11<\/h2>\n<p>\nNa de update naar PG11 besloten we verder te gaan met het 'tunen' van TOAST en merkten we op dat vanaf deze versie een instelparameter beschikbaar is geworden: <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>De TOAST-verwerkingscode wordt alleen geactiveerd wanneer de waarde van de rij die in de tabel moet worden opgeslagen groter is dan TOAST_TUPLE_THRESHOLD bytes (meestal 2 KB). De TOAST-code zal waarden van velden comprimeren en\/of buiten de tabel plaatsen totdat de rijwaarde kleiner wordt dan TOAST_TUPLE_TARGET bytes (een variabele die meestal ook 2 KB is) of het impossible is om het volume te verkleinen.<\/p><\/blockquote>\n<p>We besloten dat onze gegevens meestal ofwel 'heel kort' zijn ofwel 'heel lang', dus we besloten ons te beperken tot de minimaal mogelijke waarde:<\/p>\n<pre><code class=\"sql\">ALTER TABLE rawplan_orig SET (toast_tuple_target = 128);<\/code><\/pre>\n<p>\nLaten we eens kijken hoe de nieuwe instellingen de schijfbelasting na de herconfiguratie hebben be\u00efnvloed:<\/p>\n<p><img decoding=\"async\" alt=\"Bespaar een beetje geld op grote hoeveelheden in PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/ccaa4879e413a566b362d01582eb8c19.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNiet slecht! De gemiddelde <b>wachtrij naar de schijf is ongeveer<\/b> 1,5 keer verkort, en de 'bezetting' van de schijf is met 20% afgenomen! Maar heeft dit misschien ook invloed gehad op de CPU?<\/p>\n<p><img decoding=\"async\" alt=\"Bespaar een beetje geld op grote hoeveelheden in PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/f7026e5809853d35c6fb7a8376b9f369.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIn ieder geval is het zeker niet slechter geworden. Hoewel het moeilijk te beoordelen is, als zelfs dergelijke volumes de gemiddelde CPU-belasting niet hoger kunnen krijgen dan <b>5%<\/b>.<\/p>\n<h2>Bij het wisselen van de termen verandert de som\u2026<\/h2>\n<p>\nZoals bekend bespaart een cent een roebel, en met onze opslagvolume van ongeveer <b>10TB\/maand<\/b> kan zelfs een kleine optimalisatie een goed resultaat opleveren. Daarom hebben we aandacht besteed aan de fysieke structuur van onze gegevens \u2014 namelijk hoe precies <b>'de velden zijn binnen een record ingepakt'<\/b> in elk van de tabellen.<\/p>\n<p>Omdat door <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/444536\/\">gegevensuitlijning<\/a><\/noindex> dit direct <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/ee\/development\/ordering_table_columns.html\">invloed heeft op het resulterende volume.<\/a><\/noindex>:<\/p>\n<blockquote><p>Veel architecturen vereisen uitlijning van gegevens naar de grenzen van woordlengtes. Bijvoorbeeld, op een 32-bits x86-systeem worden gehele getallen (type integer, 4 bytes) uitgelijnd op een 4-byte woordgrens, net als zwevende getallen met dubbele precisie (type double precision, 8 bytes). En op een 64-bits systeem worden double-waarden uitgelijnd op een 8-byte woordgrens. Dit is nog een reden voor incompatibiliteit.<\/p>\n<p>Door de uitlijning hangt de grootte van de tabelrij af van de volgorde van de velden. Gewoonlijk is dit effect niet sterk merkbaar, maar in sommige gevallen kan het leiden tot een aanzienlijke toename van de grootte. Bijvoorbeeld, als je velden van de types char(1) en integer door elkaar plaatst, zullen er tussen hen meestal 3 bytes verloren gaan.<\/p><\/blockquote>\n<p>\nLaten we beginnen met synthetische modellen:<\/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>\nWaar zijn de extra bytes in het eerste geval vandaan gekomen? Heel eenvoudig \u2014 <b>de 2-byte smallint is uitgelijnd op een 4-byte grens<\/b> voor het volgende veld, en wanneer het laatste is, is er niets uit te lijnen en ook geen reden.<\/p>\n<p>In theorie is alles goed en kunnen we de velden naar believen verplaatsen. Laten we dit testen met echte gegevens aan de hand van een van de tabellen, waarvan het dagelijkse sectie 10-15GB groot is.<\/p>\n<p>Oorspronkelijke structuur:<\/p>\n<pre><code class=\"sql\">CREATE TABLE public.plan_20190220\n(\n-- Ge\u00ebrfd van tabel plan:  pack uuid NOT NULL,\n-- Ge\u00ebrfd van tabel plan:  recno smallint NOT NULL,\n-- Ge\u00ebrfd van tabel plan:  host uuid,\n-- Ge\u00ebrfd van tabel plan:  ts timestamp with time zone,\n-- Ge\u00ebrfd van tabel plan:  exectime numeric(32,3),\n-- Ge\u00ebrfd van tabel plan:  duration numeric(32,3),\n-- Ge\u00ebrfd van tabel plan:  bufint bigint,\n-- Ge\u00ebrfd van tabel plan:  bufmem bigint,\n-- Ge\u00ebrfd van tabel plan:  bufdsk bigint,\n-- Ge\u00ebrfd van tabel plan:  apn uuid,\n-- Ge\u00ebrfd van tabel plan:  ptr uuid,\n-- Ge\u00ebrfd van 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>\nSectie na het veranderen van de volgorde van de kolommen \u2014 precies <b>dezelfde velden, alleen in een andere volgorde<\/b>:<\/p>\n<pre><code class=\"sql\">CREATE TABLE public.plan_20190221\n(\n-- Ge\u00ebrfd van tabel plan:  dt date NOT NULL,\n-- Ge\u00ebrfd van tabel plan:  ts timestamp with time zone,\n-- Ge\u00ebrfd van tabel plan:  pack uuid NOT NULL,\n-- Ge\u00ebrfd van tabel plan:  recno smallint NOT NULL,\n-- Ge\u00ebrfd van tabel plan:  host uuid,\n-- Ge\u00ebrfd van tabel plan:  apn uuid,\n-- Ge\u00ebrfd van tabel plan:  ptr uuid,\n-- Ge\u00ebrfd van tabel plan:  bufint bigint,\n-- Ge\u00ebrfd van tabel plan:  bufmem bigint,\n-- Ge\u00ebrfd van tabel plan:  bufdsk bigint,\n-- Ge\u00ebrfd van tabel plan:  exectime numeric(32,3),\n-- Ge\u00ebrfd van 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>\nDe totale omvang van de sectie wordt bepaald door het aantal 'feiten' en is alleen afhankelijk van externe processen, daarom delen we de grootte van de heap (<code>pg_relation_size<\/code>) voor het aantal records erin \u2014 dus we krijgen <b>de gemiddelde grootte van een echte opgeslagen record<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"Bespaar een beetje geld op grote hoeveelheden in PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/06be2d7d70d223e7678f9a478e4c293f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Min 6% volume<\/b>, uitstekend!<\/p>\n<p>Maar het is natuurlijk niet allemaal zo rooskleurig \u2014 want <b>kunnen we de volgorde van de velden in de indexen niet veranderen<\/b>, en daarom \u2018in het algemeen\u2019 (<code>pg_total_relation_size<\/code>)\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Bespaar een beetje geld op grote hoeveelheden in PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/8beff38e5034fc0d40665b75cb3b3625.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u2026 toch ook hier <b>hebben we 1,5% bespaard<\/b>, zonder zelfs maar een regel code te veranderen. Inderdaad!<\/p>\n<p><img decoding=\"async\" alt=\"Bespaar een beetje geld op grote hoeveelheden in PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/10f4a2151465a38bf45823a5d360302b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ik merk op dat de bovenstaande variant van veldindeling \u2014 niet per se de meest optimale is. Omdat sommige blokken velden willen we uit esthetische overwegingen niet \u2018scheuren\u2019 \u2014 bijvoorbeeld een paar <code>(pack, recno)<\/code>, dat de PK vormt voor deze tabel.<\/p>\n<p>Over het geheel genomen is het bepalen van de \u2018minimale\u2019 veldindeling een relatief eenvoudige \u2018bruteforce\u2019 taak. Daarom kunt u met uw eigen gegevens zelfs betere resultaten behalen dan wij \u2014 probeer het eens!<br \/>\n<br \/>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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\udd47 We besparen een cent op grote hoeveelheden in PostgreSQL | ProHoster","description":"Voortbouwend op het onderwerp van het opnemen van grote datastromen, aangekaart in het vorige artikel over partitionering, zullen we nu manieren bespreken om dat te doen.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/79039","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=79039"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/79039\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/79040"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=79039"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=79039"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=79039"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}