Aggregate in der Datenbank - Proxy-Tabellen

Wir schließen eine Miniserie über die Arbeit mit Aggregaten in PostgreSQL ab:





  • warum, wie und lohnt es sich?





  • effiziente Verarbeitung des "Fakten" -Streams





  • mehrdimensionale Superaggregate





Und heute werden wir darüber sprechen, wie Sie die Gesamtlatenz für das Einfügen vieler Änderungen in aggregierte Tabellen mithilfe von Staging-Tabellen und externer Verarbeitung reduzieren können.





Lassen Sie uns anhand des Beispiels des Sammlers unseres PostgreSQL-Protokollanalysedienstes darüber sprechen, über den ich bereits in früheren Artikeln gesprochen habe:





Unter dem Gesichtspunkt der weiteren Arbeit mit der Aggregattabelle ist es immer vorteilhaft, eine einzige Kopie des Datensatzes darin zu haben und nicht zu versuchen, ihn mehrmals zu überschreiben, so dass wir Optionen für die  Zwischenaggregation in der Tabelle zur Verfügung  haben Erinnerung an den  Prozess und ein  separates "Rollen" von Änderungen .





( "10 +1", "1 +10"), .





", !.."

, / ( ) . :





, .





,  COPY



, "" + ,  INSERT ON CONFLICT ... DO UPDATE



. , - ,  UPDATE



! ""?..





  •  RowExclusiveLock





  •  





  • xmax 





  •    WAL-  heap





  •    - , HOT update





- "" "" . UPDATE



, ...





-

, -   , WAL-, UPDATE' - "" INSERT



... !





:





CREATE UNLOGGED TABLE px$agg(
  LIKE agg
);
      
      



UNLOGGED



, "DBA: ".





- .





-

- - , - . , ,  - ,   .





-, " pull-".





  10   - (, Seq Scan



, "" ), PostgreSQL ,     .





, , "SQL HowTo: 1000 ".





, , -  TRUNCATE



:





BEGIN;
  INSERT INTO agg
  SELECT
    pk1
    ...
  , pkN
  , <aggfunc>(val1) -- sum/min/max/...
  , <aggfunc>(val2)
    ...
  FROM
    px$agg --   Seq Scan
  GROUP BY --      PK   = (pk1, ..., pkN)
    pk1
    ...
  , pkN;
  TRUNCATE px$agg;
COMMIT;
      
      



,   , ,  TRUNCATE



  , - .





, -, - - .  , .





, ,  LOCK



  , , - .





...   !





BEGIN;
  SET LOCAL lock_timeout = '100ms'; --     100
  LOCK TABLE px$agg IN ACCESS EXCLUSIVE MODE; -- ,   
  ALTER TABLE px$agg RENAME TO px$agg_swap; --    
  ALTER TABLE px$agg_ RENAME TO px$agg;
  ALTER TABLE px$agg_swap RENAME TO px$agg_;
COMMIT;
      
      



, . - , .





, RENAME



, - :





  1. px -> px0, px1 -> px





  2. px -> px1, px0 -> px





"" PgQ Londiste.





- :





  10% , .








All Articles