PostgreSQL 9X之巔(原書第2版) ( 簡體 字) |
作者:〔美〕 艾博拉·艾哈邁德(Ibrar Ahmed)格利高里·史密斯(Gregory Smith) 著 | 類別:1. -> 資料庫 -> PostgreSQL |
譯者: |
出版社:機械工業出版社 | 3dWoo書號: 48974 詢問書籍請說出此書號!【缺書】 NT售價: 445 元 |
出版日:5/1/2018 |
頁數:331 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787111596196 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:無論是傳統的企業型應用,還是當下的Web應用,作為一種數據庫平臺,PostgreSQL在為這些應用程序提供數據存儲服務方面的可行性日趨成熟。不過,要想獲取PostgreSQL的最佳性能,一直以來都并非易事。用戶需遵循適宜的經驗法則,需持續監控和維護以保障數據庫系統健康運行,需以合理化建議定位和處理當前問題,需對數據庫相關的附件工具有所涉獵,以便遇到核心數據庫無法解決的問題時,可以為其進行功能擴展。
本書內容概述
第1章介紹了PostgreSQL最近幾個版本的性能改進情況。通常,人們認為所有軟件的新版本會問題百出,而且會比以前的版本運行得更慢,但PostgreSQL不存在這個問題。
第2章討論了如何仔細挑選服務器硬件中的主要部件,包括處理器、內存以及磁盤等,在預算允許的情況下如何組建一個穩定可靠的數據庫存儲服務器。特別是在磁盤控制器和驅動器方面,如果誤用了易失性回寫緩存,很容易導致數據庫損壞。
第3章討論了不同數據庫硬件性能方面的量化標準。比如在你的系統當中,內存讀取到底有多快?磁盤的原始性能有多強?在添加更多的磁盤后,數據庫性能是否能正常按比例提升?
第4章研究現行文件系統的可選方案,并就如何權衡硬盤中數據庫的不同布局提出建議。同時也討論了一些常見的有效文件系統的調優問題。
第5章深入研究了數據庫在磁盤、內存中的存儲機制,并解釋了checkpoint進程是如何協調這兩種存儲機制以保證數據安全的。此外,該章還討論了如何深入查看數據庫所緩存的數據,以及在此基礎上,確認當下存儲在系統內存里的數據與你的預期數據是否一致。
第6章涵蓋了postgresql.conf文件中的最重要的一些設置選項,介紹了這些選項的含義以及如何設置這些選項。此外,也指出了可能會引起問題的設置。
第7章首先闡釋了PostgreSQL如何判定哪些行數據對哪些用戶可見。這些可見性信息的存儲方法需要一個名為VACUUM的清理進程來正常地重新使用剩余空間。此外,該章也涉及了一些常見問題以及針對這些問題的調節方式,也涵蓋了一直運行的autovacuum。最后,該章介紹了數據庫日志的數據量調節方式,以及如何使用查詢日志分析器對結果進行分析,從而幫助用戶找出查詢瓶頸。
第8章研究如何使用PostgreSQL自帶的pgbench測試程序來獲取有用的基準評測結果。
第9章介紹索引在響應查詢時是如何減少數據塊的讀取量的。這種方法可以徹底探索一些常見問題,比如為什么一個查詢會使用順序掃描而不是使用強大的索引掃描。
第10章是PostgreSQL optimizer(優化器)指南,根據一些查詢例子的不同執行方式以及數據庫參數的不同設置,來說明數據庫的不同優化方式。
第11章介紹了數據庫內部所收集的統計信息,以及哪些信息有助于查找問題。同時,也介紹了能夠讓你看到查詢活動以及鎖行為的一些視圖。
第12章先介紹了如何使用操作系統所提供的基本監視工具以確定數據庫的當前動作。然后,該章針對可按照時間對信息趨勢進行圖形化表示的軟件給出了建議。
第13章對在同一時間內對數據庫進行大量連接時所遇到的困難進行了說明。同時,建議使用兩種軟件包——連接池(以更好地對請求進行排序)和緩存(在不連接數據庫的情況下響應用戶請求)——來幫助解決這些問題。
第14章講述了如何通過跨節點復制數據來減輕數據庫的負載壓力,典型的解決方式是,多個同步只讀的從節點搭配一個可讀寫的主節點。
第15章探討如何有效地將數據劃分為子集,這樣可以在數據庫的一小部分上執行查詢。所討論的方法包括單節點數據庫表分區和使用PL/Proxy及其相關工具集來構建跨多節點的共享數據庫。
第16章探討那些在PostgreSQL中看起來阻礙初學者使用的部分。重點是如何找到代碼不工作的原因,以及有哪些現有工具可以幫助診斷問題。
第17章以統計記錄數和外鍵處理作為例子,涵蓋了所有批量導入部分。同時,該章還包括人們使用PostgreSQL時所遇到的常見問題。
第18章詳細介紹了從PostgreSQL 8.1到9.6各個版本中與性能相關的功能變化情況。有時,避免常見問題并獲得更好性能的最佳方式就是升級到不再存在問題的新版本。
你需要為閱讀本書準備什么
為了更好地利用本書,你至少需要一個能夠連接服務器并執行查詢的PostgreSQL客戶端。理想情況下,你最好也是服務器管理員。 本書讀者
本書適用于那些使用或計劃使用PostgreSQL的中高級數據庫管理員和開發人員。系統管理員可以在安裝、配置和監視數據庫服務器方面受益。本書對開發人員在編寫最佳查詢并在其數據庫設計中檢測性能問題方面也會有所幫助。同時,本書也有利于PostgreSQL內部架構師使用基準評測工具監控性能。
|
內容簡介:數據庫管理員和開發人員需要花費數年的時間來學習各種技術,以配置他們的PostgreSQL數據庫服務器,從而獲得最佳性能,特別是當他們遇到實際性能問題的時候。本書將向你展示如何使用PostgreSQL 9.6來配置新安裝的數據庫和優化現有的數據庫服務器。
本書首先介紹數據庫性能的基本概念,你不僅可以學習如何優化數據庫及查詢來獲得最佳性能,還可以了解如何使用PostgreSQL工具和一些拓展工具來檢測實際的性能瓶頸。接下來,你將學習如何對硬件進行基準評測并優化操作系統,以及如何借助正確的索引,并監視從硬件底層到查詢本身的每層情況,來優化對數據庫的查詢。然后,你將了解連接池、緩存、分區和復制是如何幫助用戶處理日益增加的數據庫工作負載的。
實現高性能數據庫并不容易,但是你可以通過本書學習到這些知識。 |
目錄:贊譽 推薦序 譯者序 譯者簡介 中文版序 關于作者 關于審校者 前言 第1章 PostgreSQL版本 1 1.1 PostgreSQL歷代版本的性能 2 1.1.1 選擇要部署的版本 3 1.1.2 升級到一個新的主版本 3 1.2 選擇PostgreSQL還是其他數據庫 4 1.3 PostgreSQL工具 5 1.3.1 PostgreSQL contrib 5 1.3.2 pgFoundry 8 1.3.3 其他PostgreSQL相關軟件 8 1.4 PostgreSQL應用程序的擴展生命周期 8 1.5 在實踐中做性能優化 9 1.6 小結 10 第2章 數據庫硬件 11 2.1 平衡硬件支出 11 2.1.1 CPU 11 2.1.2 內存 13 2.1.3 磁盤 13 2.1.4 磁盤控制器 17 2.2 可靠的控制器及磁盤安裝 21 2.2.1 驅動器可靠性研究 21 2.2.2 回寫緩存 22 2.2.3 直寫式緩存的性能影響 25 2.3 小結 25 第3章 數據庫硬件的基準評測 27 3.1 CPU和內存基準評測 27 3.1.1 Memtest86+ 28 3.1.2 STREAM內存測試 28 3.1.3 CPU基準評測 29 3.1.4 內存及處理器速度慢的根源 31 3.2 物理磁盤的性能 32 3.2.1 隨機存取和IOPS 32 3.2.2 順序存取和ZCAV 33 3.2.3 提交率 34 3.3 硬盤基準評測工具 34 3.3.1 使用HD Tune進行硬盤基準評測 35 3.3.2 磁盤順序讀寫吞吐量 38 3.3.3 Bonnie++ 38 3.3.4 sysbench 42 3.3.5 尋道速率 43 3.3.6 復雜磁盤基準評測 45 3.4 樣品磁盤測試結果 45 3.5 小結 48 第4章 磁盤設置 50 4.1 文件系統最大值 50 4.2 文件系統的崩潰恢復 51 4.3 Linux文件系統 52 4.3.1 ext2 52 4.3.2 ext3 53 4.3.3 ext4 54 4.3.4 XFS 55 4.3.5 其他Linux文件系統 56 4.3.6 寫入屏障 56 4.3.7 常規Linux文件系統調優 58 4.4 Solaris與FreeBSD文件系統 62 4.4.1 Solaris UFS 62 4.4.2 FreeBSD UFS2 64 4.4.3 ZFS 64 4.4.4 FAT32 66 4.4.5 NTFS 66 4.5 PostgreSQL的磁盤布局 67 4.5.1 符號鏈接 67 4.5.2 表空間 67 4.5.3 數據庫目錄樹 68 4.5.4 磁盤陣列、RAID和磁盤布局 69 4.6 小結 71 第5章 數據庫緩存內存 72 5.1 postgresql.conf中的內存單位 72 5.2 增加UNIX共享內存參數以增大共享內存塊 73 5.2.1 內核信號量 74 5.2.2 估算共享內存塊的分配 75 5.2.3 檢查數據庫緩存 76 5.2.4 在數據庫中安裝pg_buffercache模塊 76 5.2.5 數據庫磁盤布局 77 5.2.6 在數據庫中創建新塊 80 5.2.7 寫臟塊到磁盤 80 5.3 崩潰恢復和緩沖區緩存 81 5.3.1 檢查點處理基礎 81 5.3.2 預寫日志和恢復處理 81 5.3.3 檢查點的時間選擇 82 5.3.4 數據庫塊的生命周期 84 5.4 數據庫緩存與操作系統緩存對比 85 5.4.1 雙重緩存數據 85 5.4.2 檢查點開銷 86 5.4.3 起始大小指導 86 5.5 分析緩存內容 87 5.5.1 檢查緩沖區緩存查詢 88 5.5.2 使用緩沖區緩存檢查來調整反饋 91 5.6 小結 92 第6章 服務器配置調優 93 6.1 與實時配置交互 93 6.1.1 默認值和重置值 94 6.1.2 允許更改的上下文信息 94 6.1.3 重新加載配置文件 95 6.1.4 數據庫連接 97 6.1.5 共享內存 98 6.1.6 日志記錄 98 6.1.7 Vacuuming和統計 100 6.1.8 檢查點 101 6.1.9 PITR和WAL復制 103 6.1.10 調整以防患于未然 106 6.2 小結 109 第7章 日常維護 110 7.1 事務可見性與多版本并發控制 110 7.1.1 可見性的內部計算 111 7.1.2 更新 111 7.1.3 行鎖的沖突 113 7.1.4 刪除操作 114 7.1.5 MVCC的優點 115 7.1.6 MVCC的缺點 115 7.1.7 事務ID重疊 116 7.2 vacuum 117 7.2.1 vacuum實現 117 7.2.2 基于開銷的vacuum 119 7.2.3 autovacuum 120 7.2.4 vacuum和autovacuum的常見問題 123 7.3 自動分析 126 7.4 索引膨脹 127 7.4.1 測定索引膨脹 127 7.4.2 修復索引膨脹 128 7.5 轉儲和恢復 129 7.6 清空數據庫/表 129 7.7 CLUSTER命令 129 7.8 重建索引 130 7.9 詳細數據和索引頁的監控 131 7.10 監控查詢日志 131 7.10.1 基本的PostgreSQL日志設置 131 7.10.2 對棘手的查詢進行日志記錄 134 7.10.3 日志文件分析 136 7.11 小結 140 第8章 數據庫基準評測 141 8.1 pgbench默認測試 141 8.1.1 表的定義 141 8.1.2 規模檢測 143 8.1.3 查詢腳本定義 143 8.1.4 為pgbench配置數據庫服務器 145 8.2 使用pgbench-tools圖形化輸出結果 147 8.3 pgbench測試結果樣例 148 8.3.1 只讀測試 148 8.3.2 類TPC-B測試(讀、寫) 149 8.3.3 延遲分析 150 8.4 導致不良結果以及變化的緣由 152 8.4.1 PostgreSQL開發人員模式 153 8.4.2 worker線程和pgbench程序的限制 154 8.5 自定義pgbench測試 154 8.6 TPC基準評測 155 8.7 小結 156 第9章 數據庫索引 157 9.1 索引例子詳解 158 9.1.1 測量查詢的磁盤和索引塊統計信息 158 9.1.2 運行例子 159 9.1.3 例子數據設置 159 9.1.4 簡單索引查找 160 9.1.5 全表掃描 161 9.1.6 索引創建 162 9.1.7 用低效的索引查找 163 9.1.8 聯合索引 164 9.1.9 依靠索引聚簇 166 9.1.10 帶有緩沖區計數的EXPLAIN 167 9.2 索引創建和維護 168 9.2.1 唯一索引 168 9.2.2 并發創建索引 169 9.2.3 對索引聚簇 169 9.2.4 重建索引 170 9.3 索引類型 170 9.3.1 B-tree 170 9.3.2 哈希 171 9.3.3 GIN 171 9.3.4 GiST 172 9.3.5 SP-GiST 172 9.3.6 BRIN 172 9.3.7 僅索引掃描 173 9.4 count(*) 174 9.5 可見性映射 175 9.6 高級索引使用 175 9.6.1 多列索引 175 9.6.2 索引用于排序 175 9.6.3 部分索引 176 9.6.4 基于表達式的索引 176 9.6.5 索引用于全文搜索 176 9.7 小結 177 第10章 查詢優化 178 10.1 樣例數據集 178 10.1.1 Pagila 179 10.1.2 Dell Store 2 179 10.2 EXPLAIN基礎 180 10.2.1 計時開銷 181 10.2.2 冷熱緩存行為 181 10.3 執行計劃節點結構 183 10.3.1 基本代價計算 184 10.3.2 可視化解釋 185 10.3.3 詳細輸出 186 10.3.4 機器可讀的解釋輸出 186 10.3.5 規劃分析工具 188 10.4 組裝行集合 188 10.4.1 元組ID 188 10.4.2 順序掃描 189 10.4.3 索引掃描 189 10.4.4 僅索引掃描 190 10.4.5 位圖堆掃描和索引掃描 190 10.5 處理節點 191 10.5.1 排序 191 10.5.2 Limit 192 10.5.3 聚集 193 10.5.4 HashAggregate 194 10.5.5 唯一 194 10.5.6 Result 195 10.5.7 Append 195 10.5.8 Group 196 10.5.9 子查詢掃描和子計劃 197 10.5.10 集合操作 198 10.5.11 物化 199 10.6 CTE掃描 199 10.7 copy命令 199 10.7.1 COPY TO 200 10.7.2 COPY FROM 200 10.7.3 COPY FREEZE 200 10.8 連接 201 10.8.1 嵌套循環 201 10.8.2 歸并連接 203 10.8.3 哈希連接 204 10.8.4 連接順序 205 10.9 收集統計信息 207 10.9.1 查看和使用統計信息 207 10.9.2 統計信息目標 210 10.9.3 難以估算的部分 211 10.10 其他查詢規劃參數 211 10.10.1 effective_cache_size 212 10.10.2 work_mem 212 10.10.3 constraint_exclusion 213 10.10.4 cursor_tuple_fraction 213 10.11 執行其他語句類型 214 10.12 改進查詢 214 10.12.1 優化完全緩存的數據集 214 10.12.2 查詢等價測試 215 10.12.3 禁用優化器特性 215 10.12.4 優化器缺陷的解決方案 218 10.12.5 用OFFSET避免計劃重構 219 10.12.6 外部故障點 220 10.13 SQL的限制 221 10.13.1 在SQL中對數據行進行編號 221 10.13.2 使用窗口函數編號 222 10.13.3 使用窗口函數進行累計 222 10.14 小結 223 第11章 數據庫活動和統計信息 224 11.1 統計信息視圖 224 11.2 累積視圖和實時視圖 226 11.3 表統計信息 227 11.4 索引統計信息 230 11.5 數據庫級別的匯總 231 11.6 連接與行為 232 11.7 鎖 232 11.7.1 虛擬事務 233 11.7.2 解碼鎖信息 234 11.7.3 表級鎖的模式 236 11.7.4 事務鎖等待 236 11.7.5 表的鎖等待 237 11.7.6 記錄鎖信息 238 11.7.7 保存pg_stat_bgwriter快照 242 11.7.8 通過后臺寫入進程的統計信息進行調優 243 11.8 小結 245 第12章 監控和趨勢預測 247 12.1 UNIX監控工具 247 12.1.1 例子設置 247 12.1.2 vmstat 248 12.1.3 iostat 250 12.1.4 top 257 12.1.5 SysStat和sar 258 12.2 Windows監控工具 260 12.2.1 任務管理器 260 12.2.2 Windows系統監控器 261 12.3 趨勢分析軟件 262 12.3.1 監控和趨勢分析軟件類型 263 12.3.2 Nagios 264 12.3.3 Cacti 265 12.3.4 Munin 265 12.3.5 其他趨勢分析軟件包 266 12.4 小結 268 第13章 連接池和緩存 269 13.1 連接池技術 269 13.1.1 連接池中的連接數 270 13.1.2 pgpool-II 271 13.1.3 連接池 271 13.1.4 復制 271 13.1.5 看門狗 271 13.1.6 故障切換 272 13.1.7 負載均衡 272 13.1.8 pgBouncer 273 13.1.9 memcached是什么 274 13.1.10 pgmemcache 275 13.2 小結 275 第14章 擴展復制 277 14.1 熱備份 277 14.1.1 專用術語 278 14.1.2 設置WAL文件傳送 279 14.1.3 流復制 279 14.1.4 級聯復制 279 14.1.5 同步復制 279 14.1.6 熱備份調優 280 14.2 復制隊列管理器 281 14.2.1 Slony 281 14.2.2 Londiste 282 14.2.3 使用復制隊列軟件進行讀取擴展 282 14.2.4 特殊的應用程序需求 282 14.2.5 Bucardo 283 14.2.6 pglogical 283 14.2.7 xDB 283 14.2.8 pgpool-II 283 14.3 其他有趣的復制相關的項目 284 14.4 復制方案對比 285 14.5 小結 285 第15章 分區數據 286 15.1 表繼承 286 15.2 dellstore2數據庫 287 15.3 PostgreSQL中的分區技術 288 15.4 范圍分區 288 15.5 確定要進行分區的關鍵字段 289 15.6 調整分區大小 290 15.7 重定向INSERT語句至分區 290 15.7.1 動態的觸發器函數 291 15.7.2 分區規則 292 15.8 空分區的查詢規則 293 15.9 修改日期的UPDATE觸發器 293 15.10 實時遷移分區表 294 15.11 分區查詢 296 15.12 創建新的分區 297 15.12.1 定期創建分區 297 15.12.2 動態創建分區 297 15.13 分區的優勢 298 15.14 分區中的常見錯誤 298 15.15 使用PL/Proxy水平分區 299 15.15.1 哈希生成 300 15.15.2 使用PL/Proxy擴展 301 15.15.3 使用GridSQL擴展 302 15.16 小結 302 第16章 數據庫性能分析 304 16.1 使用gprof進行性能分析 304 16.2 使用OProf?ile進行性能分析 305 16.3 使用Valgrind進行調試 306 16.4 Visual Studio 306 16.5 使用DTrace進行性能分析 307 16.5.1 FreeBSD中的DTrace 307 16.5.2 Linux中SystemTap的DTrace仿真 307 16.6 小結 308 第17章 避免常見問題 309 17.1 批量加載 309 17.1.1 加載方式 309 17.1.2 批量加載調優 310 17.1.3 省略預寫式日志加速 311 17.1.4 重建索引和添加約束 312 17.1.5 并行恢復 312 17.1.6 加載后清理 313 17.2 常見性能問題 313 17.2.1 計算行數 313 17.2.2 不明寫入 314 17.2.3 慢函數和預處理語句執行 315 17.2.4 PL/pgSQL基準評測 315 17.2.5 高外鍵開銷 316 17.2.6 觸發內存使用 317 17.2.7 過重的統計收集器開銷 317 17.2.8 物化視圖 318 17.3 小結 318 第18章 發行版本性能特征 319 18.1 積極升級PostgreSQL版本 319 18.2 版本8.1中的性能特征 320 18.3 版本8.2中的性能特征 320 18.4 版本8.3中的性能特征 321 18.5 版本8.4中的性能特征 322 18.6 版本9.0中的性能特征 324 18.6.1 復制 324 18.6.2 查詢和EXPLAIN 324 18.6.3 數據庫開發 325 18.6.4 設置和監控 326 18.7 版本9.1中的性能特征 328 18.8 版本9.2中的性能特征 328 18.9 版本9.3中的性能特征 329 18.10 版本9.4中的性能特征 329 18.11 版本9.5中的性能特征 330 18.12 版本9.6中的性能特征 330 18.13 小結 331 |
序: |