本節介紹PolarDB PostgreSQL版(兼容Oracle)的查詢機制。

SELECT

SELECT數據

使用SELECT查詢數據時,需要從磁盤中讀取一個數據塊到內存中,然后通過內存中數據塊獲取返回結果。

INSERT

INSERT

當您使用INSERT插入一條數據時,具體過程如下:

  1. 從數據文件中讀取一個數據塊到內存中,并將這行數據寫入這個數據塊,系統生成一條INSERT的WAL日志。
  2. 當執行COMMIT命令后,系統會產生一條COMMIT的WAL日志。
  3. INSERT WAL日志和COMMIT WAL日志產生后會被立即寫入磁盤,CLOG緩存記錄這個事務提交成功的信息。
  4. 數據塊中的數據通過bgwriter寫入到數據文件中,同時更新CLOG文件。

UPDATE

UPDATE

上圖中,txid表示事務號,t_xmin表示插入的事務號,t_xmax表示刪除事務號,t_cid表示事務內命令的序號,t_tcid表示數據塊內的偏移量,data表示實際數據存儲的值。

  • 事務101

    左側SQL表示在tbl表中插入一行值為0的數據,右側表示實際的數據塊存儲內容。事務號為101;由于沒有刪除事務,所以刪除事務號為0;事務內命令的序號為0;偏移量為(0,1)表示數據塊的第一個偏移位置。

  • 事務102
    事務102更新了tbl表,設置ID等于1,然后繼續更新設置ID等于2并提交。
    • 從右側上半張圖可以看出,刪除事務號從0變成了102,表示這行數據被102事務刪除了;偏移量變成了(0,2),表示指向了0號數據塊的第二個偏移位置;從第二個偏移位置可以看到事務號為102,表示事務102插入了這行數據,數據存儲值為1。
    • 從右側下半張圖可以看出,事務號依舊是102,偏移量指向了(0,3),表示存儲實際的數據為2;事務內命令的序號為1表示事務內的第二條命令進行了更新,與第二個UPDATE對應。
  • 事務103

    從左側SQL語句表示執行了刪除tbl表的動作,刪除事務號更新為103。