Labels

admin (1) aix (1) alert (1) always-on (2) Architecture (1) aws (3) Azure (1) backup (3) BI-DWH (10) Binary (3) Boolean (1) C# (1) cache (1) casting (3) cdc (1) certificate (1) checks (1) cloud (3) cluster (1) cmd (7) collation (1) columns (1) compilation (1) configurations (7) Connection-String (2) connections (6) constraint (6) copypaste (2) cpu (2) csv (3) CTE (1) data-types (1) datetime (23) db (547) DB2 (1) deadlock (2) Denali (7) device (6) dotNet (5) dynamicSQL (11) email (5) encoding (1) encryption (4) errors (124) excel (1) ExecutionPlan (10) extended events (1) files (7) FIPS (1) foreign key (1) fragmentation (1) functions (1) GCP (2) gMSA (2) google (2) HADR (1) hashing (3) in-memory (1) index (3) indexedViews (2) insert (3) install (10) IO (1) isql (6) javascript (1) jobs (11) join (2) LDAP (2) LinkedServers (8) Linux (15) log (6) login (1) maintenance (3) mariadb (1) memory (4) merge (3) monitoring (4) MSA (2) mssql (444) mssql2005 (5) mssql2008R2 (20) mssql2012 (2) mysql (36) MySQL Shell (5) network (1) NoSQL (1) null (2) numeric (9) object-oriented (1) offline (1) openssl (1) Operating System (4) oracle (7) ORDBMS (1) ordering (2) Outer Apply (1) Outlook (1) page (1) parameters (2) partition (1) password (1) Performance (103) permissions (10) pivot (3) PLE (1) port (4) PostgreSQL (14) profiler (1) RDS (3) read (1) Replication (12) restore (4) root (1) RPO (1) RTO (1) SAP ASE (48) SAP RS (20) SCC (4) scema (1) script (8) security (10) segment (1) server (1) service broker (2) services (4) settings (75) SQL (74) SSAS (1) SSIS (19) SSL (8) SSMS (4) SSRS (6) storage (1) String (35) sybase (57) telnet (2) tempdb (1) Theory (2) tips (120) tools (3) training (1) transaction (6) trigger (2) Tuple (2) TVP (1) unix (8) users (3) vb.net (4) versioning (1) windows (14) xml (10) XSD (1) zip (1)

PostgreSQL Tuples and MVCC

Tuple
  • Actually tuple is a row in the table.
  • Row is what will be back in a SELECT query.
  • Tuple is how it managed.

MVCC - Multiversion Concurrency Control
  • MVCC enables operations to occur concurrently by utilizing snapshots of the database.
  • In MVCC, When you update or delete any row, Internally It creates the new row and mark old row as unused.
  • The tradeoff is that it creates dead rows / dead tuples.
  • MVCC is a little bit similar to READ_COMMITTED_SNAPSHOT in SQL Server.

Vacuum
  • Vacuuming is needed to get rid of old (dead) tuples which are created when you change/delete rows.
    • In PostgreSQL, tuples that are deleted or obsoleted by an update are not physically removed from their table; they remain present until a VACUUM is done.
  • It doesn’t reduce the size of the files.
    • except for the case when several pages at the end of the file are completely free.
  • Space is freed up inside the data pages, which can later be used to insert new tuples.
  • Vacuuming runs:
  • Manually with the VACUUM command
  • Autovacuum background process
  • VACUUM update statistics when the configuration parameter “track_counts” is set to “on”.
  • Running it too often will create unnecessary load on the system. But running vacuum too rare, with a large volume of changes, the files may grow significantly in size.
  • VACUUM update statistics when the configuration parameter “track_counts” is set to “on”.
  • This parameter is under “Runtime Statistics” section in postgresql.conf configuration file.
  • To check what is the current value run: SELECT name, setting FROM pg_settings WHERE name='track_counts';


No comments:

Post a Comment