{"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\/de\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql","title":{"rendered":"Wir sparen beim Umgang mit gro\u00dfen Mengen in PostgreSQL.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Im Folgenden, in Ankn\u00fcpfung an das Thema der Erfassung gro\u00dfer Datenstr\u00f6me, das in <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/497008\/\">dem vorhergehenden Artikel \u00fcber Partitionierung behandelt wurde,<\/a><\/noindex>werden wir Methoden untersuchen, mit denen <b>die 'physische' Gr\u00f6\u00dfe der gespeicherten Daten<\/b> in PostgreSQL verringert werden kann und deren Einfluss auf die Serverleistung.<\/p>\n<p>Es geht um <b>TOAST-Einstellungen und Datenausrichtung.<\/b>Durchschnittlich werden diese Methoden nicht besonders viele Ressourcen sparen, aber sie erfordern keinerlei \u00c4nderungen am Anwendungscode.<\/p>\n<p><img decoding=\"async\" alt=\"Wir sparen beim Umgang mit gro\u00dfen Mengen in PostgreSQL.\" src=\"\/wp-content\/uploads\/2020\/04\/4d43b9b43edb10c4c8f13159c7dd1eac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAllerdings war unsere Erfahrung in dieser Hinsicht durchaus produktiv, da das Speicherformat nahezu aller Monitoring-Daten <b>in der Regel append-only ist,<\/b> was die geschriebenen Daten betrifft. Und falls Sie interessiert sind, wie man die Datenbank dazu bringen kann, mit einer Geschwindigkeit von <b>200 MB\/s<\/b> deutlich weniger zu schreiben \u2013 scrollen Sie weiter.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Kleine Geheimnisse gro\u00dfer Daten<\/h2>\n<p>\nIm Rahmen der <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/487380\/\">Aktivit\u00e4ten unseres Services<\/a><\/noindex>, erh\u00e4lt er regelm\u00e4\u00dfig aus den Logs <b>Textpakete.<\/b>.<\/p>\n<p>Da <noindex><a rel=\"nofollow\" href=\"https:\/\/sbis.ru\/all_services\">das SBIS-System,<\/a><\/noindex>dessen Datenbanken wir \u00fcberwachen, ein komplexes Produkt mit komplizierten Datenstrukturen ist, sind die Abfragen <b>zur Erreichung maximaler Leistung<\/b> entsprechend gestaltet. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/486072\/\">\u00abMultivolumes\u00bb mit komplexer algorithmischer Logik<\/a><\/noindex>. Daher ist das Volumen jeder einzelnen Anfrage oder des resultierenden Ausf\u00fchrungsplans in unserem eingehenden Protokoll \u201eim Durchschnitt\u201c betr\u00e4chtlich gro\u00df.<\/p>\n<p>Schauen wir uns die Struktur einer der Tabellen an, in die wir \u201erohe\u201c Daten schreiben \u2013 also den originalen Text aus dem Protokolleintrag:<\/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 -- Abschnittsschl\u00fcssel\n    date\n, data -- das Wichtigste\n    text\n, PRIMARY KEY(pack, recno)\n);<\/code><\/pre>\n<p>\nEine typische solche Tabelle (bereits partitioniert, das ist klar, daher handelt es sich um eine Abschnittsvorlage), wobei der wichtigste Punkt der Text ist. Manchmal recht umfangreich.<\/p>\n<p>Erinnern wir uns daran, dass die \u201ephysische\u201c Gr\u00f6\u00dfe eines Eintrags in PG nicht mehr als eine Datenseite belegen kann, aber die \u201elogische\u201c Gr\u00f6\u00dfe \u2013 das ist eine ganz andere Sache. Um einen umfassenden Wert in ein Feld (varchar\/text\/bytea) zu speichern, wird <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast\">die TOAST-Technologie verwendet<\/a><\/noindex>:<\/p>\n<blockquote><p>PostgreSQL verwendet eine feste Seitengr\u00f6\u00dfe (in der Regel 8 KB) und l\u00e4sst es nicht zu, dass Tupel mehrere Seiten einnehmen. Daher ist es nicht m\u00f6glich, sehr gro\u00dfe Feldwerte direkt zu speichern. Um dieses Limit zu umgehen, werden gro\u00dfe Feldwerte komprimiert und\/oder in mehrere physische Zeilen aufgeteilt. Dies geschieht unbemerkt f\u00fcr den Benutzer und hat nur geringf\u00fcgige Auswirkungen auf den Gro\u00dfteil des Servercodes. Diese Methode ist bekannt als TOAST \u2026<\/p><\/blockquote>\n<p>\nTats\u00e4chlich wird f\u00fcr jede Tabelle mit \u201epotenziell gro\u00dfen\u201c Feldern automatisch <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast#STORAGE-TOAST-ONDISK\">eine zugeh\u00f6rige Tabelle mit \u201eSchnipseln\u201c<\/a><\/noindex> jeder \u201egro\u00dfen\u201c Datensatzsegmente von 2KB erstellt:<\/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>\nDas bedeutet, dass wenn wir eine Zeile mit einem \u201egro\u00dfen\u201c Wert schreiben m\u00fcssen, <code>data<\/code>die tats\u00e4chliche Speicherung nicht nur in der Haupttabelle und ihrem PK erfolgt, sondern auch in TOAST und dessen PK. <b>Reduzierung des TOAST-Einflusses<\/b>.<\/p>\n<h4>Die meisten unserer Eintr\u00e4ge sind jedoch nicht so gro\u00df,<\/h4>\n<p>\nsie sollten in 8KB passen <b>\u2014 wie kann man hier sparen?..<\/b> Hier kommt uns das Attribut<\/p>\n<p>STORAGE <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast#STORAGE-TOAST-ONDISK\"><code>der Spalte der Tabelle zu Hilfe:<\/code><\/a><\/noindex> EXTENDED<\/p>\n<blockquote>\n<ul>\n<li><b>erlaubt sowohl Kompression als auch separate Speicherung. Dies ist<\/b> die Standardvariante. <b>Standardvariante<\/b> f\u00fcr die meisten Datentypen, die mit TOAST kompatibel sind. Zuerst wird versucht, eine Kompression durchzuf\u00fchren, dann erfolgt die Speicherung au\u00dferhalb der Tabelle, falls die Zeile immer noch zu gro\u00df ist.<\/li>\n<li><b>HAUPT<\/b> erlaubt Kompression, jedoch keine separate Speicherung. (In der Tat wird eine separate Speicherung f\u00fcr solche Spalten dennoch durchgef\u00fchrt, aber nur <b>als letztes Mittel<\/b>, wenn es keine andere M\u00f6glichkeit gibt, die Zeile zu reduzieren, damit sie auf die Seite passt.)<\/li>\n<\/ul>\n<\/blockquote>\n<p>In der Tat ist das genau das, was wir f\u00fcr Text ben\u00f6tigen \u2014 <b>maximal zu komprimieren, und falls es wirklich nicht passt \u2014 in TOAST auszulagern<\/b>. Dies kann ganz einfach \u201eon-the-fly\u201c mit einem Befehl gemacht werden:<\/p>\n<pre><code class=\"sql\">ALTER TABLE rawdata_orig ALTER COLUMN data SET STORAGE MAIN;<\/code><\/pre>\n<p><\/p>\n<h4>Wie man die Wirkung beurteilt<\/h4>\n<p>\nDa sich der Datenstrom t\u00e4glich \u00e4ndert, k\u00f6nnen wir keine absoluten Zahlen vergleichen, aber relativ hei\u00dft, je <b>weniger wir in TOAST geschrieben haben \u2014 desto besser. Aber hier gibt es eine Gefahr \u2014 je gr\u00f6\u00dfer unser \u201ephysischer\u201c Umfang jedes einzelnen Eintrags ist, desto \u201ebreiter\u201c wird der Index, da er mehr Seitenabdeckungen erfordert.<\/b> vor den \u00c4nderungen<\/p>\n<p>Abschnitt <b>Heap  = 37GB (39%)\nTOAST = 54GB (57%)\nPK    =  4GB ( 4%)<\/b>:<\/p>\n<pre><code class=\"plaintext\">nach den \u00c4nderungen\n<\/code><\/pre>\n<p>\nAbschnitt <b>Heap  = 37GB (67%)\nTOAST = 16GB (29%)\nPK    =  2GB ( 4%)<\/b>:<\/p>\n<pre><code class=\"plaintext\">Tats\u00e4chlich haben wir<\/code><\/pre>\n<p>\nTats\u00e4chlich sind wir <b>Wir haben in TOAST doppelt so selten geschrieben<\/b>, was nicht nur die Festplatte, sondern auch die CPU entlastet hat:<\/p>\n<p><img decoding=\"async\" alt=\"Wir sparen beim Umgang mit gro\u00dfen Mengen in PostgreSQL.\" src=\"\/wp-content\/uploads\/2020\/04\/547485eff9c6491ffe4d59e5c81f656d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Wir sparen beim Umgang mit gro\u00dfen Mengen in PostgreSQL.\" src=\"\/wp-content\/uploads\/2020\/04\/6bd3b18146c20959693f961e41fff447.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIch m\u00f6chte anmerken, dass wir auch weniger \"lesen\", nicht nur \"schreiben\" \u2014 da beim Einf\u00fcgen eines Eintrags in eine Tabelle auch Teile des Baums jeder der Indizes \"gelesen\" werden m\u00fcssen, um seine zuk\u00fcnftige Position darin zu bestimmen.<\/p>\n<h2>Wer mit PostgreSQL 11 gut leben kann<\/h2>\n<p>\nNach dem Update auf PG11 haben wir beschlossen, das \u201eTuning\u201c von TOAST fortzusetzen und festgestellt, dass ab dieser Version ein konfigurierbarer Parameter verf\u00fcgbar ist <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>Der TOAST-Verarbeitungscode wird nur aktiviert, wenn der Zeichenfolgenwert, der in der Tabelle gespeichert werden soll, gr\u00f6\u00dfer ist als TOAST_TUPLE_THRESHOLD Bytes (normalerweise 2 KB). Der TOAST-Code wird die Feldwerte komprimieren und\/oder au\u00dferhalb der Tabelle verschieben, bis der Zeichenfolgenwert kleiner als TOAST_TUPLE_TARGET Bytes (eine variable Gr\u00f6\u00dfe, ebenfalls normalerweise 2 KB) wird oder eine Verringerung nicht mehr m\u00f6glich ist.<\/p><\/blockquote>\n<p>Wir haben entschieden, dass unsere Daten normalerweise entweder \"sehr kurz\" oder \"sehr lang\" sind, daher beschlossen wir, uns auf den minimal m\u00f6glichen Wert zu beschr\u00e4nken:<\/p>\n<pre><code class=\"sql\">ALTER TABLE rawplan_orig SET (toast_tuple_target = 128);<\/code><\/pre>\n<p>\nLassen Sie uns betrachten, wie sich die neuen Einstellungen auf die Festplattennutzung nach der Umstellung ausgewirkt haben:<\/p>\n<p><img decoding=\"async\" alt=\"Wir sparen beim Umgang mit gro\u00dfen Mengen in PostgreSQL.\" src=\"\/wp-content\/uploads\/2020\/04\/ccaa4879e413a566b362d01582eb8c19.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNicht schlecht! Der durchschnittliche <b>Wartezeit auf die Festplatte hat sich<\/b> ungef\u00e4hr um das 1,5-Fache verringert, und die \"Auslastung\" der Festplatte ist um 20% gesunken! Aber k\u00f6nnte es sein, dass das auch Auswirkungen auf die CPU hat?<\/p>\n<p><img decoding=\"async\" alt=\"Wir sparen beim Umgang mit gro\u00dfen Mengen in PostgreSQL.\" src=\"\/wp-content\/uploads\/2020\/04\/f7026e5809853d35c6fb7a8376b9f369.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAuf jeden Fall ist es nicht schlechter geworden. Es ist jedoch schwierig zu urteilen, da selbst solche Volumina die durchschnittliche CPU-Auslastung nicht wirklich erh\u00f6hen k\u00f6nnen. <b>5%<\/b>.<\/p>\n<h2>Von der Umstellung der Summanden \u00e4ndert sich die Summe\u2026!<\/h2>\n<p>\nWie man wei\u00df, spart der Cent den Rubel, und bei unseren Speichergr\u00f6\u00dfen von etwa <b>10 TB\/Monat<\/b> kann sogar eine kleine Optimierung einen ordentlichen Gewinn bringen. Daher haben wir die physische Struktur unserer Daten in den Blick genommen \u2013 wie konkret <b>die Felder innerhalb der Datens\u00e4tze<\/b> in jeder der Tabellen angeordnet sind.<\/p>\n<p>Denn aufgrund des <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/444536\/\">Datenalignments<\/a><\/noindex> wirkt sich das direkt auf das resultierende Volumen aus. <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/ee\/development\/ordering_table_columns.html\">beeinflusst das resultierende Volumen<\/a><\/noindex>:<\/p>\n<blockquote><p>Viele Architekturen sehen die Ausrichtung von Daten an den Grenzen von Maschinenw\u00f6rtern vor. Zum Beispiel werden auf einem 32-Bit-System x86 ganze Zahlen (Datentyp integer, ben\u00f6tigt 4 Bytes) an der Grenze zu 4-Byte-W\u00f6rtern ausgerichtet, ebenso wie Gleitkommazahlen doppelter Genauigkeit (Datentyp double precision, 8 Bytes). Auf einem 64-Bit-System werden die double-Werte an der Grenze von 8-Byte-W\u00f6rtern ausgerichtet. Dies ist ein weiterer Grund f\u00fcr Inkompatibilit\u00e4ten.<\/p>\n<p>Wegen der Ausrichtung h\u00e4ngt die Gr\u00f6\u00dfe der Tabellenzeile von der Anordnung der Felder ab. In der Regel ist dieser Effekt nicht sehr auff\u00e4llig, kann aber in manchen F\u00e4llen zu einer erheblichen Vergr\u00f6\u00dferung der Gr\u00f6\u00dfe f\u00fchren. Wenn man beispielsweise die Felder der Typen char(1) und integer mischt, gehen in der Regel 3 Bytes verloren.<\/p><\/blockquote>\n<p>\nLassen Sie uns mit synthetischen Modellen beginnen:<\/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>\nWoher kommen die zus\u00e4tzlichen Bytes im ersten Fall? Ganz einfach \u2014 <b>ein 2-Byte-smallint wird an der 4-Byte-Grenze ausgerichtet<\/b> vor dem n\u00e4chsten Feld, und wenn es am Ende steht, gibt es nichts mehr, was ausgerichtet werden m\u00fcsste.<\/p>\n<p>In der Theorie ist alles gut und man kann die Felder beliebig umstellen. Lassen Sie uns das an realen Daten anhand eines der Tabellen \u00fcberpr\u00fcfen, deren t\u00e4glicher Abschnitt jeweils 10-15 GB gro\u00df ist.<\/p>\n<p>Urspr\u00fcngliche Struktur:<\/p>\n<pre><code class=\"sql\">CREATE TABLE public.plan_20190220\n(\n-- Vererbt von der Tabelle plan:  pack uuid NOT NULL,\n-- Vererbt von der Tabelle plan:  recno smallint NOT NULL,\n-- Vererbt von der Tabelle plan:  host uuid,\n-- Vererbt von der Tabelle plan:  ts timestamp with time zone,\n-- Vererbt von der Tabelle plan:  exectime numeric(32,3),\n-- Vererbt von der Tabelle plan:  duration numeric(32,3),\n-- Vererbt von der Tabelle plan:  bufint bigint,\n-- Vererbt von der Tabelle plan:  bufmem bigint,\n-- Vererbt von der Tabelle plan:  bufdsk bigint,\n-- Vererbt von der Tabelle plan:  apn uuid,\n-- Vererbt von der Tabelle plan:  ptr uuid,\n-- Vererbt von der Tabelle 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>\nAbschnitt nach \u00c4nderung der Spaltenreihenfolge \u2014 genau <b>die gleichen Felder, nur in anderer Reihenfolge<\/b>:<\/p>\n<pre><code class=\"sql\">ERSTELLEN TABELLE public.plan_20190221\n(\n-- Abgeleitet von Tabelle plan:  dt datum NICHT NULL,\n-- Abgeleitet von Tabelle plan:  ts zeitstempel mit zeitzone,\n-- Abgeleitet von Tabelle plan:  pack uuid NICHT NULL,\n-- Abgeleitet von Tabelle plan:  recno kleinint NICHT NULL,\n-- Abgeleitet von Tabelle plan:  host uuid,\n-- Abgeleitet von Tabelle plan:  apn uuid,\n-- Abgeleitet von Tabelle plan:  ptr uuid,\n-- Abgeleitet von Tabelle plan:  bufint bigint,\n-- Abgeleitet von Tabelle plan:  bufmem bigint,\n-- Abgeleitet von Tabelle plan:  bufdsk bigint,\n-- Abgeleitet von Tabelle plan:  exectime numerisch(32,3),\n-- Abgeleitet von Tabelle plan:  duration numerisch(32,3),\n  EINSCHRANKUNG plan_20190221_pkey PRIMARY KEY (pack, recno),\n  EINSCHRANKUNG chck_ptr \u00dcBERPR\u00dcFEN (ptr IST NICHT NULL),\n  EINSCHRANKUNG plan_20190221_dt_check \u00dcBERPR\u00dcFEN (dt = '2019-02-21'::datum)\n)\nERBT (public.plan)<\/code><\/pre>\n<p>\nDas Gesamtdatenvolumen des Abschnitts h\u00e4ngt von der Anzahl der \u201eFakten\u201c ab und ist nur von externen Prozessen abh\u00e4ngig, daher teilen wir die Gr\u00f6\u00dfe des Heaps (<code>pg_relation_size<\/code>) durch die Anzahl der Eintr\u00e4ge \u2014 das ergibt <b>die durchschnittliche Gr\u00f6\u00dfe eines tats\u00e4chlich gespeicherten Eintrags<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"Wir sparen beim Umgang mit gro\u00dfen Mengen in PostgreSQL.\" src=\"\/wp-content\/uploads\/2020\/04\/06be2d7d70d223e7678f9a478e4c293f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Minus 6% des Volumens<\/b>, hervorragend!<\/p>\n<p>Aber nat\u00fcrlich ist nicht alles so rosig \u2014 denn <b>in den Indizes k\u00f6nnen wir die Reihenfolge der Felder nicht \u00e4ndern<\/b>, und deshalb haben wir \u201einsgesamt\u201c (<code>pg_total_relation_size<\/code>)\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Wir sparen beim Umgang mit gro\u00dfen Mengen in PostgreSQL.\" src=\"\/wp-content\/uploads\/2020\/04\/8beff38e5034fc0d40665b75cb3b3625.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u2026 dennoch auch hier <b>1,5% eingespart<\/b>, ohne eine Zeile Code zu \u00e4ndern. Aber ja!<\/p>\n<p><img decoding=\"async\" alt=\"Wir sparen beim Umgang mit gro\u00dfen Mengen in PostgreSQL.\" src=\"\/wp-content\/uploads\/2020\/04\/10f4a2151465a38bf45823a5d360302b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ich m\u00f6chte darauf hinweisen, dass die oben angegebene Anordnung der Felder nicht unbedingt die optimale ist. Einige Blockfelder m\u00f6chte man aus \u00e4sthetischen Gr\u00fcnden nicht 'trennen' \u2013 zum Beispiel ein Paar. <code>(pack, recno)<\/code>, das der PK f\u00fcr diese Tabelle entspricht.<\/p>\n<p>Im Allgemeinen ist die Bestimmung der 'minimalen' Felderanordnung eine recht einfache 'Aufz\u00e4hlungs'aufgabe. Daher k\u00f6nnen Sie mit Ihren Daten sogar bessere Ergebnisse erzielen als wir \u2013 probieren Sie es aus!<br \/>\n<br \/>Quelle: <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\/de\/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=\"de_DE\" \/>\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\/de\/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\udd47Sparen Sie Geld bei gro\u00dfen Mengen in PostgreSQL | ProHoster","description":"Im Zusammenhang mit dem Thema der Aufzeichnung gro\u00dfer Datenstr\u00f6me, das im vorherigen Artikel zur Partitionierung angesprochen wurde, betrachten wir nun M\u00f6glichkeiten, wie man die 'physische' Gr\u00f6\u00dfe der in PostgreSQL gespeicherten Daten verringern kann, und deren Auswirkungen auf die Serverleistung. Es geht um TOAST-Einstellungen und das Data Alignment. 'Im Durchschnitt' sparen diese Methoden nicht zu viele Ressourcen, jedoch \u2014 ganz ohne Modifikationen am Anwendungscode.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/79039","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=79039"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/79039\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/79040"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=79039"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=79039"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=79039"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}