內容簡介
本書從操作係統到數據庫實現的多個層麵,講解瞭PostgreSQL數據庫進行常規性能調優的各個場景。無論對於從其他數據庫轉戰PostgreSQL的DBA還是使用過PostgreSQL一段時間的DBA,它都是一本不可多得的參考資料。
目錄
Contents?目 錄
贊譽
推薦序
譯者序
譯者簡介
中文版序
關於作者
關於審校者
前言
第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
前言/序言
Preface?前 言無論是傳統的企業型應用,還是當下的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客戶端。理想情況下,你最好也是服務器管理員。從http://www.postgresql.org/download 上可以下載支持各種主流操作係統的完整客戶端與服務端PostgreSQL安裝包。本書的所有例子都是通過命令行方式執行的,通常是運行psql程序。這樣可以使它們適閤大多數操作係統平颱。這樣可以直接進行許多操作,而不必使用PostgreSQL的圖形界麵(GUI)工具,比如pgAdmin III程序。
本書提供的一些腳本是用bash腳本語言編寫的,如果你使用的是Windows操作係統,可以從http://www.cygwin.com/ 下載cygwin軟件套件,cygwin可以在Windows係統中提供常見的UNIX工具,比如bash。
本書讀者本書適用於那些使用或計劃使用PostgreSQL的中高級數據庫管理員和開發人員。係統管理員可以在安裝、配置和監視數據庫服務器方麵受益。本書對
PostgreSQL 9X之巔(原書第2版) 下載 mobi epub pdf txt 電子書 格式