原创 PostgreSQL 13:索引並行vacuum

原文https://blog.dbi-services.com/postgresql-13-parallel-vacuum-for-indexes/正文PostgreSQL的MVCC機制的原因,需要清理old/dead記錄。這寫動作由v

原创 PostgreSQL如何在頁面內找一個free slot

本文介紹向業內插入一條記錄時,如何找一個空閒的空間進行插入。PageAddItemExtended1、計算出pd_linp數組的最大值後新增一個後的個數:limit=[pg_lower-sizeof(PageHeader)]/Sizeo

原创 PostgreSQL通過索引獲取heap tuple解析

本文介紹通過索引掃描獲取heap tuple的TID後,如何通過TID獲取heap tuple。一、先介紹兩個數據結構關係二、接着介紹獲取記錄流程1、通過索引掃描後,得到索引記錄(key,tid),接着需要通過tid獲取對應的heap記

原创 PostgreSQL的heapgetpage函數解析

本文介紹heapgetpage函數的流程,這個函數的功能是從磁盤中讀取一個頁到內存,並將可見的記錄的記錄號,即第幾個記錄,保存到掃描描述符的rs_vistuples數組中。1、heapgetpage的入參分別爲表掃描描述符和頁號,此頁號

原创 表掃描描述符及掃描方向

1、表掃描函數的參數傳遞通過TableScanDescData,函數內層將掃描到的記錄存儲到HeapScanDesc.rs_ctup中,然後將該成員內容傳遞給slot中。2、內部處理時會將TableScanDescData轉換成Heap

原创 圖解PostgreSQL12可拔插存儲引擎--表及索引訪問方法架構

點贊 1 收藏 分享 文章舉報 yzs87 博客專家

原创 非易失性WAL buffer實現解析(六)

本文接上文接着介紹PreallocNonVolatileXlogBuffer的實現。 1)需要將NVM WAL BUFFER初始化LSN到ControlFile->discardedUpTo+NvwalSize的位置。 2)分配WAL

原创 圖解PostgreSQL-local buffer管理

本文介紹local buffer管理相關機制。一、數據結構1、數組LocalBufferDescriptors[]爲本地緩衝塊的描述符,buf_id從-2開始,都是負數。爲和共享緩衝區有區別,通過是否爲負值就可以判斷是否是本地緩衝區2、

原创 CheckPoint刷寫髒頁

1、CreateCheckPoint調用函數CheckPointGuts將共享內存中所有的髒頁刷到磁盤。髒頁除表和索引頁外還包括XACT、pg_commit_ts、pg_subtrans、pg_multixact、pg_replslot

原创 360°全方位比較PostgreSQL和MySQL

360°全方位比較PostgreSQL和MySQL 一、原文 https://www.enterprisedb.com/blog/postgresql-vs-mysql-360-degree-comparison 二、摘要 本文對MySQ

原创 圖解PostgreSQL-buffer管理(二)

一、數據結構1、Buffer由數組BufferDescriptor[]數組進行管理。該數組由函數InitBufferPool創建,大小爲NBuffers個成員即BufferDesc。該數組創建後由StrategyControl進行管理,

原创 PG11新特性解讀:新增非空默認值字段不需要重寫表-原理

本文對原理進行解讀 點贊 收藏 分享 文章舉報 yzs87 博客專家

原创 非易失性WAL buffer實現解析(四)

本文接着介紹checkpoint對WAL BUFFER的改造。改造函數CreateCheckPoint函數。 1)checkpoint刷完髒頁(會先將髒頁的WAL刷入介質),並將checkpoint wal記錄插入比刷入介質後,根據需要

原创 圖解PostgreSQL-buffer管理(三)

本文介紹本地緩衝的管理。1、本地buffer的分配由函數LocalBufferAlloc來完成,用於臨時表的讀寫。2、同樣需要先初始化tag:newTag,唯一標記一個物理頁3、第一次使用臨時表時,需要通過calloc創建一系列緩衝區(

原创 CREATE TABLE ... WITH storage_parameter [= value] [, ... ]

創建表時,可以通過WITH子句指定storage_parameter,這個存儲參數指什麼?在代碼中如何實現? 1、storage_parameter參數說明參考:https://www.postgresql.org/docs/curre