[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deep-evm-27-postgresql-performance-indizes-vacuum":3},{"article":4,"author":55},{"id":5,"category_id":6,"title":7,"slug":8,"excerpt":9,"content_md":10,"content_html":11,"locale":12,"author_id":13,"published":14,"published_at":15,"meta_title":16,"meta_description":17,"focus_keyword":18,"og_image":19,"canonical_url":19,"robots_meta":20,"created_at":15,"updated_at":15,"tags":21,"category_name":24,"related_articles":35},"d7000000-0000-0000-0000-000000000127","a0000000-0000-0000-0000-000000000075","Deep EVM #27: PostgreSQL-Performance im grossen Massstab — Indizes, VACUUM und Abfrageoptimierung","deep-evm-27-postgresql-performance-indizes-vacuum","PostgreSQL-Performance-Tuning meistern: partielle Indizes, Covering-Indizes, BRIN fuer Zeitreihen, Autovacuum-Konfiguration und EXPLAIN-ANALYZE-Interpretation.","## Die drei Saeulen der PostgreSQL-Performance\n\nPostgreSQL ist von Haus aus bemerkenswert schnell, aber im grossen Massstab — Dutzende Millionen Zeilen, Tausende Abfragen pro Sekunde — muessen Sie seine Interna verstehen. Dieser Artikel behandelt die drei Saeulen: Indizes, VACUUM und Abfrageoptimierung.\n\n## Index-Typen\n\n### B-Tree (Standard)\nDer Standard-Indextyp. Unterstuetzt Gleichheits- und Bereichsabfragen:\n```sql\nCREATE INDEX idx_transactions_block ON transactions (block_number);\n```\n\n### Partielle Indizes\nIndizieren Sie nur Zeilen, die eine Bedingung erfuellen:\n```sql\nCREATE INDEX idx_transactions_pending\n    ON transactions (created_at)\n    WHERE status = 'pending';\n```\nEin partieller Index auf 0,1% einer 34M-Zeilen-Tabelle ist 170KB statt 800MB.\n\n### Covering-Indizes (INCLUDE)\n```sql\nCREATE INDEX idx_tx_from_covering\n    ON transactions (from_addr)\n    INCLUDE (value_wei, block_number, tx_hash);\n```\nErmoeglicht Index-Only-Scans ohne Heap-Zugriff.\n\n### BRIN-Indizes\nFuer Zeitreihen oder monoton steigende Daten:\n```sql\nCREATE INDEX idx_transactions_block_brin\n    ON transactions USING BRIN (block_number)\n    WITH (pages_per_range = 128);\n```\n~100KB fuer 34M Zeilen (vs. ~800MB B-Tree).\n\n## VACUUM: Der stille Performance-Killer\n\nPostgreSQL verwendet MVCC. Bei UPDATE oder DELETE wird die alte Version nicht entfernt — sie wird als tot markiert. VACUUM gibt den Platz toter Tupel zurueck.\n\n### Autovacuum-Konfiguration\n```sql\nALTER TABLE transactions SET (\n    autovacuum_vacuum_threshold = 10000,\n    autovacuum_vacuum_scale_factor = 0.01,\n    autovacuum_analyze_threshold = 5000,\n    autovacuum_vacuum_cost_delay = 2\n);\n```\n\nStandard-Skalierungsfaktor von 20% fuer eine 34M-Zeilen-Tabelle bedeutet: Autovacuum wartet bis 6,8 Millionen tote Tupel. Das ist katastrophal.\n\n## EXPLAIN ANALYZE\n\n```sql\nEXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)\nSELECT * FROM transactions\nWHERE block_number BETWEEN 18000000 AND 18100000\nORDER BY value_wei DESC\nLIMIT 100;\n```\n\nWichtige Metriken:\n- **actual time:** Echte Ausfuehrungszeit in Millisekunden\n- **rows:** Tatsaechlich verarbeitete Zeilen\n- **Buffers: shared hit:** Seiten aus dem Cache (gut)\n- **Buffers: shared read:** Seiten von Disk (langsam)\n\n## Haeufige Anti-Patterns\n\n1. **Sequential Scan auf grosser Tabelle** — Fehlender Index\n2. **Nested Loop ohne Index** — N+1-Abfragemuster\n3. **Uebermaeassiger Sort-Speicher** — work_mem erhoehen\n4. **Ungenaue Zeilenschaetzungen** — ANALYZE ausfuehren\n\n## Fazit\n\nPostgreSQL-Performance im grossen Massstab steht auf drei Saeulen: die richtigen Indizes fuer Ihre Abfragemuster, aggressives Autovacuum-Tuning und systematische Abfrageoptimierung mit EXPLAIN ANALYZE. Raten Sie nicht — messen Sie.","\u003Ch2 id=\"die-drei-saeulen-der-postgresql-performance\">Die drei Saeulen der PostgreSQL-Performance\u003C\u002Fh2>\n\u003Cp>PostgreSQL ist von Haus aus bemerkenswert schnell, aber im grossen Massstab — Dutzende Millionen Zeilen, Tausende Abfragen pro Sekunde — muessen Sie seine Interna verstehen. Dieser Artikel behandelt die drei Saeulen: Indizes, VACUUM und Abfrageoptimierung.\u003C\u002Fp>\n\u003Ch2 id=\"index-typen\">Index-Typen\u003C\u002Fh2>\n\u003Ch3>B-Tree (Standard)\u003C\u002Fh3>\n\u003Cp>Der Standard-Indextyp. Unterstuetzt Gleichheits- und Bereichsabfragen:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sql\">CREATE INDEX idx_transactions_block ON transactions (block_number);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Partielle Indizes\u003C\u002Fh3>\n\u003Cp>Indizieren Sie nur Zeilen, die eine Bedingung erfuellen:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sql\">CREATE INDEX idx_transactions_pending\n    ON transactions (created_at)\n    WHERE status = 'pending';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Ein partieller Index auf 0,1% einer 34M-Zeilen-Tabelle ist 170KB statt 800MB.\u003C\u002Fp>\n\u003Ch3>Covering-Indizes (INCLUDE)\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-sql\">CREATE INDEX idx_tx_from_covering\n    ON transactions (from_addr)\n    INCLUDE (value_wei, block_number, tx_hash);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Ermoeglicht Index-Only-Scans ohne Heap-Zugriff.\u003C\u002Fp>\n\u003Ch3>BRIN-Indizes\u003C\u002Fh3>\n\u003Cp>Fuer Zeitreihen oder monoton steigende Daten:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sql\">CREATE INDEX idx_transactions_block_brin\n    ON transactions USING BRIN (block_number)\n    WITH (pages_per_range = 128);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>~100KB fuer 34M Zeilen (vs. ~800MB B-Tree).\u003C\u002Fp>\n\u003Ch2 id=\"vacuum-der-stille-performance-killer\">VACUUM: Der stille Performance-Killer\u003C\u002Fh2>\n\u003Cp>PostgreSQL verwendet MVCC. Bei UPDATE oder DELETE wird die alte Version nicht entfernt — sie wird als tot markiert. VACUUM gibt den Platz toter Tupel zurueck.\u003C\u002Fp>\n\u003Ch3>Autovacuum-Konfiguration\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-sql\">ALTER TABLE transactions SET (\n    autovacuum_vacuum_threshold = 10000,\n    autovacuum_vacuum_scale_factor = 0.01,\n    autovacuum_analyze_threshold = 5000,\n    autovacuum_vacuum_cost_delay = 2\n);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Standard-Skalierungsfaktor von 20% fuer eine 34M-Zeilen-Tabelle bedeutet: Autovacuum wartet bis 6,8 Millionen tote Tupel. Das ist katastrophal.\u003C\u002Fp>\n\u003Ch2 id=\"explain-analyze\">EXPLAIN ANALYZE\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-sql\">EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)\nSELECT * FROM transactions\nWHERE block_number BETWEEN 18000000 AND 18100000\nORDER BY value_wei DESC\nLIMIT 100;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Wichtige Metriken:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>actual time:\u003C\u002Fstrong> Echte Ausfuehrungszeit in Millisekunden\u003C\u002Fli>\n\u003Cli>\u003Cstrong>rows:\u003C\u002Fstrong> Tatsaechlich verarbeitete Zeilen\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Buffers: shared hit:\u003C\u002Fstrong> Seiten aus dem Cache (gut)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Buffers: shared read:\u003C\u002Fstrong> Seiten von Disk (langsam)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"haeufige-anti-patterns\">Haeufige Anti-Patterns\u003C\u002Fh2>\n\u003Col>\n\u003Cli>\u003Cstrong>Sequential Scan auf grosser Tabelle\u003C\u002Fstrong> — Fehlender Index\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Nested Loop ohne Index\u003C\u002Fstrong> — N+1-Abfragemuster\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Uebermaeassiger Sort-Speicher\u003C\u002Fstrong> — work_mem erhoehen\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Ungenaue Zeilenschaetzungen\u003C\u002Fstrong> — ANALYZE ausfuehren\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"fazit\">Fazit\u003C\u002Fh2>\n\u003Cp>PostgreSQL-Performance im grossen Massstab steht auf drei Saeulen: die richtigen Indizes fuer Ihre Abfragemuster, aggressives Autovacuum-Tuning und systematische Abfrageoptimierung mit EXPLAIN ANALYZE. Raten Sie nicht — messen Sie.\u003C\u002Fp>\n","de","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:30.393182Z","PostgreSQL-Performance im grossen Massstab — Indizes, VACUUM und Abfrageoptimierung","PostgreSQL-Performance meistern: partielle Indizes, BRIN fuer Zeitreihen, Autovacuum-Tuning, EXPLAIN-ANALYZE-Interpretation und gaengige Anti-Patterns.","PostgreSQL Performance-Optimierung",null,"index, follow",[22,27,31],{"id":23,"name":24,"slug":25,"created_at":26},"c0000000-0000-0000-0000-000000000012","DevOps","devops","2026-03-28T10:44:21.513630Z",{"id":28,"name":29,"slug":30,"created_at":26},"c0000000-0000-0000-0000-000000000022","Performance","performance",{"id":32,"name":33,"slug":34,"created_at":26},"c0000000-0000-0000-0000-000000000005","PostgreSQL","postgresql",[36,43,49],{"id":37,"title":38,"slug":39,"excerpt":40,"locale":12,"category_name":41,"published_at":42},"d0000000-0000-0000-0000-000000000680","Warum Bali 2026 zum Impact-Tech-Hub Südostasiens wird","warum-bali-2026-impact-tech-hub-suedostasiens","Bali rangiert auf Platz 16 unter den Startup-Ökosystemen Südostasiens. Mit einer wachsenden Konzentration von Web3-Entwicklern, AI-Nachhaltigkeits-Startups und Eco-Travel-Tech-Unternehmen formt die Insel ihre Nische als Impact-Tech-Hauptstadt der Region.","Ingenieurwesen","2026-03-28T10:44:49.720230Z",{"id":44,"title":45,"slug":46,"excerpt":47,"locale":12,"category_name":41,"published_at":48},"d0000000-0000-0000-0000-000000000679","ASEAN-Datenschutz-Flickenteppich: Compliance-Checkliste für Entwickler","asean-datenschutz-flickenteppich-compliance-checkliste-entwickler","Sieben ASEAN-Länder verfügen mittlerweile über umfassende Datenschutzgesetze mit unterschiedlichen Einwilligungsmodellen, Lokalisierungsanforderungen und Sanktionsstrukturen. Eine praktische Compliance-Checkliste für Entwickler.","2026-03-28T10:44:49.715484Z",{"id":50,"title":51,"slug":52,"excerpt":53,"locale":12,"category_name":41,"published_at":54},"d0000000-0000-0000-0000-000000000678","Indonesias 29-Milliarden-Dollar-Digitaltransformation: Chancen für Softwareunternehmen","indonesias-29-milliarden-dollar-digitaltransformation-chancen-softwareunternehmen","Indonesias IT-Dienstleistungsmarkt wird voraussichtlich 2026 29,03 Milliarden Dollar erreichen, gegenüber 24,37 Milliarden im Jahr 2025. Cloud-Infrastruktur, AI, E-Commerce und Rechenzentren treiben das schnellste Wachstum in Südostasien.","2026-03-28T10:44:49.697275Z",{"id":13,"name":56,"slug":57,"bio":58,"photo_url":19,"linkedin":19,"role":59,"created_at":60,"updated_at":60},"Open Soft Team","open-soft-team","The engineering team at Open Soft, building premium software solutions from Bali, Indonesia.","Engineering Team","2026-03-28T08:31:22.226811Z"]