第1章 數據庫集簇、數據庫和數據錶 1
1.1 數據庫集簇的邏輯結構 1
1.2 數據庫集簇的物理結構 2
1.2.1 數據庫集簇的布局 3
1.2.2 數據庫布局 4
1.2.3 錶和索引相關文件的布局 5
1.2.4 PostgreSQL中錶空間的布局 7
1.3 堆錶文件的內部布局 8
1.4 讀寫元組的方式 11
1.4.1 寫入堆元組 11
1.4.2 讀取堆元組 12
第2章 進程和內存架構 14
2.1 進程架構 14
2.1.1 Postgres服務器進程 15
2.1.2 後端進程 15
2.1.3 後颱進程 16
2.2 內存架構 17
2.2.1 本地內存區域 17
2.2.2 共享內存區域 18
第3章 查詢處理 19
3.1 概覽 20
3.1.1 解析器 20
3.1.2 分析器 22
3.1.3 重寫器 24
3.1.4 計劃器與執行器 25
3.2 單錶查詢的代價估計 27
3.2.1 順序掃描 28
3.2.2 索引掃描 29
3.2.3 排序 36
3.3 創建單錶查詢的計劃樹 38
3.3.1 預處理 41
3.3.2 找齣代價最小的訪問路徑 42
3.3.3 創建計劃樹 51
3.4 執行器如何工作 55
3.5 連接 57
3.5.1 嵌套循環連接 57
3.5.2 歸並連接 63
3.5.3 散列連接 67
3.5.4 連接訪問路徑與連接節點 73
3.6 創建多錶查詢計劃樹 76
3.6.1 預處理 76
3.6.2 獲取代價最小的路徑 77
3.6.3 獲取三錶查詢代價最小的路徑 81
參考文獻 83
第4章 外部數據包裝器 84
4.1 概述 85
4.1.1 創建一棵查詢樹 86
4.1.2 連接至遠程服務器 86
4.1.3 使用EXPLAIN命令創建計劃樹(可選) 87
4.1.4 逆解析 87
4.1.5 發送SQL命令並接收結果 88
4.2 POSTGRES_FDW的工作原理 90
4.2.1 多錶查詢 91
4.2.2 排序操作 97
4.2.3 聚閤函數 98
第5章 並發控製 101
5.1 事務標識 103
5.2 元組結構 104
5.3 元組的增、刪、改 106
5.3.1 插入 106
5.3.2 刪除 107
5.3.3 更新 108
5.3.4 空閑空間映射 109
5.4 提交日誌 110
5.4.1 事務狀態 110
5.4.2 提交日誌如何工作 110
5.4.3 提交日誌的維護 111
5.5 事務快照 111
5.6 可見性檢查規則 114
5.6.1 t_xmin的狀態為ABORTED 115
5.6.2 t_xmin的狀態為IN_PROGRESS 115
5.6.3 t_xmin的狀態為COMMITTED 116
5.7 可見性檢查 118
5.7.1 可見性檢查的過程 118
5.7.2 PostgreSQL可重復讀等級中的幻讀 122
5.8 防止丟失更新 122
5.8.1 並發UPDATE命令的行為 123
5.8.2 例子 125
5.9 可串行化快照隔離 127
5.9.1 SSI實現的基本策略 127
5.9.2 PostgreSQL的SSI實現 128
5.9.3 SSI的原理 129
5.9.4 假陽性的串行化異常 132
5.10 需要的維護進程 134
參考文獻 136
第6章 清理過程 137
6.1 並發清理概述 138
6.1.1 第一部分 139
6.1.2 第二部分 140
6.1.3 第三部分 140
6.1.4 後續處理 141
6.2 可見性映射 141
6.3 凍結過程 142
6.3.1 惰性模式 142
6.3.2 迫切模式 143
6.3.3 改進迫切模式中的凍結過程 146
6.4 移除不必要的CLOG文件 147
6.5 自動清理守護進程 148
6.6 完整清理 148
第7章 堆內元組和僅索引掃描 153
7.1 堆內元組 153
7.1.1 沒有HOT時的行更新 153
7.1.2 HOT如何工作 154
7.2 僅索引掃描 157
第8章 緩衝區管理器 160
8.1 概覽 161
8.2 緩衝區管理器的結構 163
8.2.1 緩衝錶 164
8.2.2 緩衝區描述符 165
8.2.3 緩衝區描述符層 167
8.2.4 緩衝池 169
8.3 緩衝區管理器鎖 169
8.3.1 緩衝錶鎖 170
8.3.2 緩衝區描述符相關的鎖 170
8.4 緩衝區管理器的工作原理 174
8.4.1 訪問存儲在緩衝池中的頁麵 174
8.4.2 將頁麵從存儲加載到空槽 175
8.4.3 將頁麵從存儲加載到受害者緩衝池槽 176
8.4.4 頁麵替換算法:時鍾掃描 178
8.5 環形緩衝區 180
8.6 髒頁刷盤 181
第9章 WAL 182
9.1 概述 183
9.1.1 沒有WAL的插入操作 183
9.1.2 插入操作與數據庫恢復 184
9.1.3 整頁寫入 186
9.2 事務日誌與WAL段文件 188
9.3 WAL段文件的內部布局 190
9.4 WAL記錄的內部布局 191
9.4.1 WAL記錄首部部分 191
9.4.2 XLOG記錄的數據部分(9.4及更低版本) 193
9.4.3 XLOG記錄的數據部分(9.5及更高版本) 196
9.5 WAL記錄的寫入 200
9.6 WAL寫入進程 203
9.7 POSTGRESQL中的檢查點進程 203
9.7.1 檢查點進程概述 204
9.7.2 pg_crontrol文件 205
9.8 POSTGRESQL中的數據庫恢復 206
9.9 WAL段文件管理 209
9.9.1 WAL段切換 209
9.9.2 WAL段管理(9.5及更高版本) 209
9.9.3 WAL段管理(9.4及更低版本) 211
9.10 持續歸檔與歸檔日誌 212
第10章 基礎備份與時間點恢復 214
10.1 基礎備份 215
10.1.1 pg_start_backup 215
10.1.2 pg_stop_backup 217
10.2 時間點恢復(PITR)的工作原理 217
10.3 時間綫與時間綫曆史文件 220
10.3.1 時間綫標識 220
10.3.2 時間綫曆史文件 221
10.4 時間點恢復與時間綫曆史文件 222
第11章 流復製 224
11.1 流復製的啓動 225
11.2 如何實施流復製 227
11.2.1 主從間的通信 227
11.2.2 發生故障時的行為 229
11.3 管理多個備庫 229
11.3.1 同步優先級與同步狀態 229
11.3.2 主庫如何管理多個備庫 230
11.3.3 發生故障時的行為 231
11.4 備庫的故障檢測 232
· · · · · · (
收起)