{"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\/it\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql","title":{"rendered":"Risparmiamo sui grandi volumi in PostgreSQL","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Continuando il tema della registrazione di grandi flussi di dati, sollevato <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/497008\/\">dall'articolo precedente sul partizionamento<\/a><\/noindex>, in questo esamineremo i metodi attraverso i quali \u00e8 possibile <b>ridurre la dimensione \"fisica\" dei dati salvati<\/b> in PostgreSQL e il loro impatto sulle prestazioni del server.<\/p>\n<p>Parleremo di <b>impostazioni TOAST e allineamento dei dati<\/b>. \"In media\", questi metodi consentiranno di risparmiare non troppi risorse, ma \u2014 senza modificare il codice dell'applicazione.<\/p>\n<p><img decoding=\"async\" alt=\"Risparmiamo sui grandi volumi in PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/4d43b9b43edb10c4c8f13159c7dd1eac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTuttavia, la nostra esperienza si \u00e8 rivelata piuttosto produttiva in questo senso, poich\u00e9 lo storage di quasi qualsiasi monitoraggio \u00e8 per sua natura <b>per lo pi\u00f9 append-only<\/b> per quanto riguarda i dati registrati. E se siete interessati a come si pu\u00f2 insegnare al database a scrivere su disco invece di <b>200MB\/s<\/b> la met\u00e0 \u2014 vi invito sotto.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Piccoli segreti dei big data<\/h2>\n<p>\nPer il profilo di lavoro <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/487380\/\">del nostro servizio<\/a><\/noindex>, riceve regolarmente dai log <b>pacchetti di testo<\/b>.<\/p>\n<p>E poich\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/sbis.ru\/all_services\">il complesso SBIS<\/a><\/noindex>, i cui database monitoriamo, \u00e8 un prodotto multi-componente con strutture dati complesse, le query <b>per raggiungere le massime prestazioni<\/b> risultano piuttosto simili <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/486072\/\">\u00abmultivolume\u00bb con logica algoritmica complessa<\/a><\/noindex>. Quindi, anche il volume di ciascun singolo esemplare della richiesta o del piano di esecuzione risultante nel nostro log risulta essere \u00abin media\u00bb piuttosto grande.<\/p>\n<p>Esaminiamo la struttura di una delle tabelle in cui scriviamo i dati \u00abgrezzi\u00bb \u2014 cio\u00e8 il testo originale della registrazione del log:<\/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 -- chiave di sezione\n    date\n, data -- la cosa pi\u00f9 importante\n    text\n, PRIMARY KEY(pack, recno)\n);<\/code><\/pre>\n<p>\nUna tabella tipica (gi\u00e0 partizionata, naturalmente, quindi questo \u00e8 un modello di sezione), dove la cosa pi\u00f9 importante \u00e8 il testo. A volte piuttosto voluminoso.<\/p>\n<p>Ricordiamo che la dimensione \u00abfisica\u00bb di una registrazione in PG non pu\u00f2 occupare pi\u00f9 di una pagina di dati, mentre la dimensione \u00ablogica\u00bb \u00e8 un'altra questione. Per memorizzare un valore voluminoso nel campo (varchar\/text\/bytea) si utilizza <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast\">la tecnologia TOAST<\/a><\/noindex>:<\/p>\n<blockquote><p>PostgreSQL utilizza una dimensione di pagina fissa (di solito 8 KB) e non consente ai tuple di occupare pi\u00f9 pagine. Pertanto, non \u00e8 possibile memorizzare direttamente valori molto grandi nei campi. Per superare questo limite, i valori di campo pi\u00f9 grandi vengono compressi e\/o suddivisi in pi\u00f9 righe fisiche. Questo avviene in modo trasparente per l'utente e influisce in modo trascurabile sulla maggior parte del codice del server. Questo metodo \u00e8 noto come TOAST \u2026<\/p><\/blockquote>\n<p>\nInfatti, per ogni tabella con campi \"potenzialmente grandi\" viene automaticamente <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast#STORAGE-TOAST-ONDISK\">creata una tabella parallela con la \"fetta\"<\/a><\/noindex> di ogni registrazione \"grande\" segmentata in pezzi da 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>\nCio\u00e8, se dobbiamo scrivere una riga con un valore \"grande\" <code>data<\/code>, la scrittura reale avverr\u00e0 <b>non solo nella tabella principale e nel suo PK, ma anche in TOAST e nel suo PK<\/b>.<\/p>\n<h4>Riduciamo l'impatto del TOAST<\/h4>\n<p>\nMa la maggior parte delle registrazioni non \u00e8 poi cos\u00ec grande, <b>dovrebbero rientrare in 8KB<\/b> \u2014 come possiamo risparmiare su questo?..<\/p>\n<p>Qui ci aiuta l'attributo <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast#STORAGE-TOAST-ONDISK\"><code>STORAGE<\/code><\/a><\/noindex> della colonna della tabella:<\/p>\n<blockquote>\n<ul>\n<li><b>EXTENDED<\/b> consente sia la compressione che la memorizzazione separata. Questo \u00e8 <b>l'opzione standard<\/b> per la maggior parte dei tipi di dati compatibili con TOAST. Inizialmente viene tentata la compressione, quindi viene eseguita la memorizzazione al di fuori della tabella se la riga \u00e8 ancora troppo grande.<\/li>\n<li><b>MAIN<\/b> consente la compressione, ma non la memorizzazione separata. (In effetti, la memorizzazione separata verr\u00e0 comunque eseguita per tali colonne, ma solo <b>come ultima risorsa<\/b>, quando non ci sono altri modi per ridurre la riga in modo che possa entrare nella pagina.)<\/li>\n<\/ul>\n<\/blockquote>\n<p>In effetti, \u00e8 esattamente ci\u00f2 di cui abbiamo bisogno per il testo \u2014 <b>massimizzare la compressione e se proprio non ci sta \u2014 spostarlo in TOAST<\/b>. Questo pu\u00f2 essere fatto direttamente \"al volo\", con un solo comando:<\/p>\n<pre><code class=\"sql\">ALTER TABLE rawdata_orig ALTER COLUMN data SET STORAGE MAIN;<\/code><\/pre>\n<p><\/p>\n<h4>Come valutare l'effetto<\/h4>\n<p>\nPoich\u00e9 il flusso di dati cambia ogni giorno, non possiamo confrontare cifre assolute, ma in termini relativi pi\u00f9 <b>piccola parte<\/b> abbiamo registrato in TOAST \u2014 meglio \u00e8. Ma qui c'\u00e8 un rischio: pi\u00f9 grande \u00e8 il nostro volume \"fisico\" di ciascun singolo record, pi\u00f9 \"ampio\" diventa l'indice, perch\u00e9 \u00e8 necessario coprire un numero maggiore di pagine di dati.<\/p>\n<p>Sezione <b>prima delle modifiche<\/b>:<\/p>\n<pre><code class=\"plaintext\">heap  = 37GB (39%)\nTOAST = 54GB (57%)\nPK    =  4GB ( 4%)\n<\/code><\/pre>\n<p>\nSezione <b>dopo le modifiche<\/b>:<\/p>\n<pre><code class=\"plaintext\">heap  = 37GB (67%)\nTOAST = 16GB (29%)\nPK    =  2GB ( 4%)<\/code><\/pre>\n<p>\nIn effetti, noi <b>abbiamo iniziato a scrivere in TOAST il 50% in meno<\/b>, il che ha alleggerito non solo il disco, ma anche la CPU:<\/p>\n<p><img decoding=\"async\" alt=\"Risparmiamo sui grandi volumi in PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/547485eff9c6491ffe4d59e5c81f656d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Risparmiamo sui grandi volumi in PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/6bd3b18146c20959693f961e41fff447.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNoter\u00f2 che abbiamo anche iniziato a \"leggere\" meno il disco, non solo a \"scrivere\" \u2014 poich\u00e9 quando si inserisce un record in una tabella, \u00e8 necessario \"leggere\" anche parte dell'albero di ogni indice, per determinare la sua futura posizione in essi.<\/p>\n<h2>A chi sta bene utilizzare PostgreSQL 11<\/h2>\n<p>\nDopo l'aggiornamento a PG11, abbiamo deciso di continuare a \"ottimizzare\" TOAST e abbiamo notato che a partire da questa versione \u00e8 disponibile il parametro configurabile <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>Il codice di gestione TOAST viene attivato solo quando il valore della riga, che deve essere memorizzato nella tabella, supera la dimensione di TOAST_TUPLE_THRESHOLD byte (solitamente 2 KB). Il codice TOAST comprimer\u00e0 e\/o sposter\u00e0 i valori del campo al di fuori della tabella finch\u00e9 il valore della riga non scende sotto i byte di TOAST_TUPLE_TARGET (un valore variabile, anch'esso generalmente di 2 KB) o se non \u00e8 possibile ridurre ulteriormente il volume.<\/p><\/blockquote>\n<p>Abbiamo deciso che i dati che abbiamo di solito sono o \"davvero brevi\" oppure \"molto lunghi\", quindi abbiamo deciso di limitarci al valore minimo possibile:<\/p>\n<pre><code class=\"sql\">ALTER TABLE rawplan_orig SET (toast_tuple_target = 128);<\/code><\/pre>\n<p>\nVediamo come le nuove impostazioni hanno influito sul caricamento del disco dopo la riconfigurazione:<\/p>\n<p><img decoding=\"async\" alt=\"Risparmiamo sui grandi volumi in PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/ccaa4879e413a566b362d01582eb8c19.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNon male! La media <b>la coda al disco si \u00e8 ridotta<\/b> di circa 1,5 volte, e il tasso di 'occupazione' del disco \u00e8 diminuito di circa il 20%! Ma potrebbe aver influito sul CPU?<\/p>\n<p><img decoding=\"async\" alt=\"Risparmiamo sui grandi volumi in PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/f7026e5809853d35c6fb7a8376b9f369.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAlmeno non \u00e8 andata peggio. Anche se, \u00e8 difficile da giudicare, se persino questi volumi non riescono a sollevare il caricamento medio del CPU sopra <b>5%<\/b>.<\/p>\n<h2>Cambiando l'ordine degli addendi, la somma\u2026 cambia!<\/h2>\n<p>\nCome \u00e8 noto, un centesimo risparmia un rublo, e con i nostri volumi di archiviazione di circa <b>10TB\/mese<\/b> anche una piccola ottimizzazione pu\u00f2 portare a un buon profitto. Per questo motivo, abbiamo prestato attenzione alla struttura fisica dei nostri dati \u2014 come specificamente <b>i campi sono 'disposti' all'interno della registrazione<\/b> di ciascuna delle tabelle.<\/p>\n<p>Perch\u00e9 a causa di <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/444536\/\">dell'allineamento dei dati<\/a><\/noindex> questo influisce direttamente <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/ee\/development\/ordering_table_columns.html\">sul volume risultante<\/a><\/noindex>:<\/p>\n<blockquote><p>Molte architetture prevedono l'allineamento dei dati sui confini delle parole macchina. Ad esempio, in un sistema x86 a 32 bit, gli interi (tipo integer, 4 byte) vengono allineati sul confine delle parole da 4 byte, cos\u00ec come i numeri in virgola mobile a doppia precisione (tipo double precision, 8 byte). In un sistema a 64 bit, i valori double saranno allineati sul confine delle parole da 8 byte. Questa \u00e8 un'altra ragione per cui si possono avere incompatibilit\u00e0.<\/p>\n<p>A causa dell'allineamento, la dimensione di una riga di tabella dipende dall'ordine in cui sono disposti i campi. Di solito, questo effetto non \u00e8 molto evidente, ma in alcuni casi pu\u00f2 portare a un aumento significativo delle dimensioni. Ad esempio, se si mescolano i campi di tipo char(1) e integer, di solito ci saranno 3 byte vuoti tra di loro.<\/p><\/blockquote>\n<p>\nIniziamo con modelli sintetici:<\/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 byte\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 byte<\/code><\/pre>\n<p>\nDa dove provengono questi 2 byte in pi\u00f9 nel primo caso? \u00c8 semplice \u2014 <b>il smallint a 2 byte si allinea sul confine da 4 byte<\/b> prima del campo successivo, mentre se \u00e8 l'ultimo non c'\u00e8 niente da allineare e non ce n'\u00e8 bisogno.<\/p>\n<p>In teoria, va tutto bene e si possono spostare i campi come si vuole. Verifichiamo con dati reali usando uno degli esempi di tabella, la cui sezione giornaliera occupa circa 10-15 GB.<\/p>\n<p>Struttura originale:<\/p>\n<pre><code class=\"sql\">CREATE TABLE public.plan_20190220\n(\n-- Eredita da table plan:  pack uuid NOT NULL,\n-- Eredita da table plan:  recno smallint NOT NULL,\n-- Eredita da table plan:  host uuid,\n-- Eredita da table plan:  ts timestamp with time zone,\n-- Eredita da table plan:  exectime numeric(32,3),\n-- Eredita da table plan:  duration numeric(32,3),\n-- Eredita da table plan:  bufint bigint,\n-- Eredita da table plan:  bufmem bigint,\n-- Eredita da table plan:  bufdsk bigint,\n-- Eredita da table plan:  apn uuid,\n-- Eredita da table plan:  ptr uuid,\n-- Eredita da table 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>\nSezione dopo il cambio dell'ordine delle colonne: esattamente <b>gli stessi campi, solo con un ordine diverso<\/b>:<\/p>\n<pre><code class=\"sql\">CREATE TABLE public.plan_20190221\n(\n-- Eredit\u00e0 dalla tabella plan:  dt date NOT NULL,\n-- Eredit\u00e0 dalla tabella plan:  ts timestamp with time zone,\n-- Eredit\u00e0 dalla tabella plan:  pack uuid NOT NULL,\n-- Eredit\u00e0 dalla tabella plan:  recno smallint NOT NULL,\n-- Eredit\u00e0 dalla tabella plan:  host uuid,\n-- Eredit\u00e0 dalla tabella plan:  apn uuid,\n-- Eredit\u00e0 dalla tabella plan:  ptr uuid,\n-- Eredit\u00e0 dalla tabella plan:  bufint bigint,\n-- Eredit\u00e0 dalla tabella plan:  bufmem bigint,\n-- Eredit\u00e0 dalla tabella plan:  bufdsk bigint,\n-- Eredit\u00e0 dalla tabella plan:  exectime numeric(32,3),\n-- Eredit\u00e0 dalla tabella 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>\nIl volume totale della sezione \u00e8 determinato dal numero di \"fatti\" ed \u00e8 influenzato solo dai processi esterni, quindi divideremo la dimensione dell'heap (<code>pg_relation_size<\/code>) per il numero di registrazioni in essa \u2014 quindi otteniamo <b>la dimensione media della registrazione memorizzata<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"Risparmiamo sui grandi volumi in PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/06be2d7d70d223e7678f9a478e4c293f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Meno il 6% del volume<\/b>, ottimo!<\/p>\n<p>Ma non \u00e8 tutto roseo \u2014 infatti <b>non possiamo cambiare l'ordine dei campi negli indici<\/b>, e quindi nel \"complesso\" (<code>pg_total_relation_size<\/code>)\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Risparmiamo sui grandi volumi in PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/8beff38e5034fc0d40665b75cb3b3625.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u2026 e qui comunque <b>abbiamo risparmiato l'1.5%<\/b>, senza cambiare una riga di codice. Esatto!<\/p>\n<p><img decoding=\"async\" alt=\"Risparmiamo sui grandi volumi in PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/10f4a2151465a38bf45823a5d360302b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Voglio sottolineare che la disposizione dei campi sopra riportata non \u00e8 necessariamente la pi\u00f9 ottimale. Infatti, alcuni blocchi di campi non vogliamo \u00abspezzarli\u00bb per motivi estetici \u2014 ad esempio, una coppia <code>(pack, recno)<\/code>, che costituisce la PK per questa tabella.<\/p>\n<p>Nel complesso, definire una disposizione \u00abminimale\u00bb dei campi \u00e8 un compito relativamente semplice di \u00abesplorazione\u00bb. Pertanto, puoi ottenere risultati anche migliori dei nostri con i tuoi dati \u2014 prova!<br \/>\n<br \/>Fonte: <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\/it\/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=\"it_IT\" \/>\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\/it\/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\udd47Risparmiamo qualche centesimo sui grandi volumi in PostgreSQL | ProHoster","description":"Proseguendo il tema della registrazione di grandi flussi di dati, sollevato dall'articolo precedente sul partizionamento, esamineremo i modi per ridurre le dimensioni \u00abfisiche\u00bb archiviate in PostgreSQL e il loro impatto sulle prestazioni del server. Si parler\u00e0 delle impostazioni di TOAST e dell'allineamento dei dati. In media, questi metodi permetteranno di risparmiare risorse non eccessive, ma senza alcuna modifica al codice dell'applicazione. Tuttavia,","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/79039","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=79039"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/79039\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/79040"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=79039"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=79039"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=79039"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}