PostgreSQL 9.0性能調校

PostgreSQL 9.0性能調校

PostgreSQL是一款功能強大而複雜的自由軟體資料庫系統,已經逐漸發展為一個為套用數據提供存儲服務的日益成熟的資料庫平台,並且獲得越來越多的關注。 《PostgreSQL 9.0性能調校》是針對PostgreSQL 9.0的性能調校指南,能夠幫助讀者加速PostgreSQL系統,並且避免一些可能導致系統緩慢的常見缺陷。全書共分為16章,分別介紹了PostgreSQL的各個版本、資料庫硬體環境和基準評測、磁碟設定、資料庫高速快取、伺服器配置、日常維護、資料庫索引、查詢最佳化、資料庫活動和統計信息、監控與趨勢預測、池化與高速快取、擴展複製、數據分區等性能調校的方方面面,最後總結概括了應該避免的一些常見問題。 《PostgreSQL 9.0性能調校》是涵蓋了PostgreSQL 9.0性能調校和提升的各個話題,內容詳盡,示例豐富,實用性強。《PostgreSQL 9.0性能調校》適合PostgreSQL的高級資料庫管理員、需要安裝和使用PostgreSQL的技術人員以及對高級資料庫內部構建和運作感興趣的開發人員閱讀。

基本介紹

  • 書名:PostgreSQL 9.0性能調校
  • 作者:史密斯
  • ISBN:9787115307705
  • 頁數:386
  • 定價:69.00元
  • 出版社:人民郵電出版社
  • 出版時間:2013-4
  • 開本:1/16
主要內容,目錄,

主要內容

《PostgreSQL 9.0性能調校》是針對PostgreSQL 9.0的性能調校指南,能夠幫助讀者加速PostgreSQL系統,並且避免一些可能導致系統緩慢的常見缺陷。全書共分為16章,分別介紹了PostgreSQL的各個版本、資料庫硬體環境和基準評測、磁碟設定、資料庫高速快取、伺服器配置、日常維護、資料庫索引、查詢最佳化、資料庫活動和統計信息、監控與趨勢預測、池化與高速快取、擴展複製、數據分區等性能調校的方方面面,最後總結概括了應該避免的一些常見問題。

目錄

第1章 PostgreSQL版本 1
1.1 PostgreSQL歷史版本的性能 2
1.1.1 選擇部署的版本 3
1.1.2 升級到更新的主要版本 3
1.2 使用PostgreSQL還是其他資料庫 5
1.3 PostgreSQL工具 6
1.3.1 PostgreSQL contrib 6
1.3.2 pgFoundry 9
1.3.3 其他一些與PostgreSQL相關的軟體 9
1.4 PostgreSQL應用程式擴展生命周期 10
1.5 作為實踐的性能最佳化 10
1.6 小結 12
第2章 資料庫硬體 13
2.1 平衡硬體支出 13
2.1.1 CPU 13
2.1.2 記憶體 14
2.1.3 磁碟 15
2.1.4 磁碟控制器 20
2.2 可靠的控制器及磁碟安裝 24
2.2.1 回寫快取 25
2.2.2 直寫式快取的性能影響 28
2.3 小結 29
第3章 資料庫硬體基準評測 30
3.1 CPU和記憶體基準評測 30
3.1.1 memtest86+ 31
3.1.2 STREAM記憶體測試 31
3.1.3 CPU基準評測 33
3.1.4 記憶體以及處理器速度慢的緣由 34
3.2 物理磁碟的性能 35
3.2.1 每秒隨機存取以及I/O數量 35
3.2.2 順序存取和區域恆定角速度(ZCAV) 36
3.2.3 提交速率 37
3.3 磁碟基準評測工具 38
3.3.1 hdtune 38
3.3.2 dd 42
3.3.3 bonnie++ 43
3.3.4 sysbench 46
3.3.5 複雜的磁碟基準評測 48
3.4 樣品磁碟的測試結果 49
3.5 小結 53
第4章 磁碟設定 55
4.1 檔案系統規模的最大值 55
4.2 檔案系統的崩潰恢復 56
4.3 Linux檔案系統 58
4.3.1 ext2 58
4.3.2 ext3 58
4.3.3 ext4 60
4.3.4 XFS 60
4.3.5 其他的Linux檔案系統 61
4.3.6 寫屏障 62
4.3.7 常規Linux檔案系統調整 64
4.4 Solaris和FreeBSD檔案系統 68
4.4.1 Solaris UFS 69
4.4.2 FreeBSD UFS2 70
4.4.3 ZFS 71
4.5 Windows檔案系統 72
4.5.1 FAT32 73
4.5.2 NTFS 73
4.6 PostgreSQL的磁碟布局 74
4.6.1 符號連結 74
4.6.2 表空間 74
4.6.3 資料庫目錄樹 75
4.6.4 磁碟陣列、RAID以及磁碟布局 76
4.7 小結 79
第5章 資料庫高速快取記憶體 81
5.1 postgresql.conf檔案中的記憶體單元 81
5.2 檢查資料庫高速快取 86
5.2.1 在資料庫中安裝pg_buffercache 86
5.2.2 資料庫磁碟布局 87
5.2.3 在資料庫中創建新的塊 90
5.2.4 將“髒”塊寫到磁碟 90
5.3 故障恢復和緩衝區高速快取 91
5.3.1 檢查點處理基礎 91
5.3.2 預寫式日誌和恢復處理 91
5.3.3 檢查點的時機掌握 92
5.3.4 資料庫塊的生命周期 94
5.4 資料庫緩衝區高速快取與作業系統高速快取 95
5.4.1 雙重快取數據 95
5.4.2 檢查點開銷 96
5.4.3 起始大小指南 96
5.5 分析緩衝區高速快取當中的內容 98
5.5.1 緩衝區快取查詢的檢查 98
5.5.2 使用緩衝區高速快取檢查進行規模的反饋 102
5.6 小結 103
第6章 伺服器配置調整 104
6.1 與當前配置進行互動 104
6.1.1 默認值和重置值 105
6.1.2 允許更改的上下文信息 105
6.1.3 重新載入配置檔案 106
6.2 伺服器範圍內的設定 108
6.2.1 資料庫連線 108
6.2.2 共享記憶體 109
6.2.3 日誌 110
6.2.4 清理與統計信息 112
6.2.5 檢查點 114
6.2.6 WAL設定 115
6.2.7 PITR和WAL複製 117
6.3 每個客戶端的設定 117
6.3.1 effective_cache_size 117
6.3.2 調整以避免某些情況的出現 120
6.4 調整新伺服器 121
6.5 專用伺服器指南 121
6.6 共享伺服器指南 122
6.7 pgtune 123
6.8 小結 123
第7章 日常維護 125
7.1 事務可見性以及多版本並發控制 125
7.1.1 可見性的內部計算 125
7.1.2 Updates 126
7.1.3 行鎖的衝突 128
7.1.4 刪除 130
7.1.5 MVCC的優點 130
7.1.6 MVCC的缺點 131
7.1.7 事務ID重疊 131
7.2 Vacuum 132
7.2.1 Vacuum實現 133
7.2.2 基於開銷的vacuum 135
7.2.3 autovacuum 136
7.2.4 常見的一些有關vacuum以及autovacuum的問題 140
7.3 Autoanalyze 144
7.4 索引膨脹 144
7.5 詳細數據和索引頁面監控 147
7.6 監控查詢日誌 148
7.6.1 基本的PostgreSQL日誌設定 148
7.6.2 對棘手的查詢進行日誌記錄 152
7.6.3 日誌檔案分析 153
7.7 小結 159
第8章 資料庫基準評測 161
8.1 pgbench默認測試 161
8.1.1 表的定義 161
8.1.2 規模檢測 162
8.1.3 查詢腳本定義 163
8.1.4 為pgbench測試配置資料庫伺服器 165
8.2 手動運行pgbench測試 166
8.3 使用pgbench-tools圖形化輸出結果 167
8.4 pgbench測試結果樣例 168
8.4.1 SELECT測試 168
8.4.2 類TPC-B測試 169
8.4.3 延遲分析 170
8.5 糟糕的結果以及變化的緣由 173
8.6 自定義pgbench測試 175
8.7 事務處理性能委員會(TPC)基準評測 176
8.8 小結 177
第9章 資料庫索引 179
9.1 索引樣例的演練 180
9.1.1 查詢磁碟以及索引塊的統計信息的測量 180
9.1.2 樣例的運行 181
9.1.3 裝載樣例數據 181
9.1.4 簡單的索引查找 183
9.1.5 全表掃描 184
9.1.6 索引的創建 185
9.1.7 使用低效的索引進行數據查找 186
9.1.8 組合索引 187
9.1.9 從索引轉換為順序掃描 188
9.1.10 對索引進行聚集 190
9.1.11 使用緩衝區計數來解釋查詢計畫 191
9.2 索引的創建與維護 192
9.2.1 惟一索引 193
9.2.2 並發索引的創建 194
9.2.3 聚集索引 194
9.2.4 重建索引 195
9.3 索引的類型 195
9.3.1 B-樹 196
9.3.2 Hash 197
9.3.3 GIN 197
9.3.4 GiST 197
9.4 高級索引套用 198
9.4.1 多列索引 198
9.4.2 排序索引 198
9.4.3 部分索引 199
9.4.4 基於表達式的索引 199
9.4.5 全文檢索索引 200
9.5 小結 200
第10章 查詢最佳化 202
10.1 數據集樣例 202
10.1.1 Pagila 203
10.1.2 Dell Store 2 203
10.2 EXPLAIN基礎 205
10.2.1 時間開銷 205
10.2.2 熱門以及冷門高速快取行為 206
10.3 查詢計畫的節點結構 208
10.4 Explain分析工具 211
10.4.1 Visual explain 211
10.4.2 Verbose輸出 212
10.4.3 機器可讀的解釋輸出 212
10.4.4 計畫分析工具 213
10.5 組合行集 214
10.5.1 元組ID 214
10.5.2 順序掃描 215
10.5.3 索引掃描 215
10.5.4 點陣圖堆與索引掃描 216
10.6 處理節點 217
10.6.1 Sort 218
10.6.2 Limit 219
10.6.3 Aggregate 220
10.6.4 HashAggregate 221
10.6.5 Unique 222
10.6.6 Result 223
10.6.7 Append 224
10.6.8 Group 225
10.6.9 子查詢掃描(Subquery Scan)與子計畫(Subplan) 226
10.6.10 集操作 227
10.6.11 物化 229
10.6.12 公共表表達式掃描 229
10.7 連線 230
10.7.1 循環嵌套 230
10.7.2 合併連線(Merge Join) 233
10.7.3 Hash連線 234
10.8 統計信息 239
10.8.1 查看與估計統計信息 239
10.8.2 統計信息指標 243
10.8.3 估計一些比較難處理的領域 244
10.9 其他一些查詢規劃參數 245
10.9.1 effective_cache_size 245
10.9.2 work_mem 246
10.9.3 constraint_exclusion 247
10.9.4 cursor_tuple_fraction 247
10.10 執行其他的語句類型 247
10.11 改進查詢 248
10.11.1 對完全快取的數據集進行最佳化 249
10.11.2 查詢等價測試 249
10.11.3 禁止最佳化器功能 250
10.11.4 繞開最佳化器問題 254
10.11.5 避免計畫使用OFFSET進行重組 255
10.11.6 外部故障點 258
10.12 SQL限制 258
10.12.1 在SQL當中對數據行進行編號 258
10.12.2 使用視窗函式進行編號 260
10.12.3 使用視窗函式進行累計 260
10.13 小結 262
第11章 資料庫活動和統計信息 264
11.1 統計信息視圖 264
11.2 漸增視圖以及實時視圖 266
11.3 表統計信息 267
11.4 索引統計信息 270
11.5 資料庫範圍內的總計 272
11.6 連線及活動 273
11.7 鎖 274
11.7.1 虛擬事務 275
11.7.2 解碼鎖信息 276
11.7.3 事務鎖等待 279
11.7.4 表鎖等待 280
11.7.5 記錄鎖定信息 281
11.8 磁碟使用 282
11.9 緩衝區、後台寫入器以及檢查點活動 284
11.9.1 保存pg_stat_bgwriter快照信息 286
11.9.2 使用後台寫入器統計信息進行調整 289
11.10 小結 290
第12章 監控與趨勢預測 292
12.1 UNIX監控工具 292
12.1.1 樣例安裝 292
12.1.2 vmstat 293
12.1.3 iosta 296
12.1.4 top 304
12.1.5 sysstat及sar 306
12.2 Windows監控工具 309
12.2.1 任務管理器 309
12.2.2 Windows系統監視器 310
12.3 趨勢預測軟體 312
12.3.1 監控以及趨勢預測軟體的類型 312
12.3.2 Nagios 314
12.3.3 Cacti 315
12.3.4 Munin 316
12.3.5 其他的一些趨勢預測程式包 316
12.4 小結 319
第13章 池化與高速快取 321
13.1 連線池 321
13.1.1 連線池計數 322
13.1.2 pgpool-II 323
13.1.3 pgBouncer 324
13.2 資料庫高速快取 325
13.2.1 memcached 325
13.2.2 pgmemcache 326
13.3 小結 327
第14章 擴展複製 329
14.1 完全熱備(Hot Standby) 329
14.1.1 術語 330
14.1.2 設定WAL檔案傳送 331
14.1.3 流複製 331
14.1.4 完全熱備的調整 332
14.2 複製佇列管理器 333
14.2.1 Slony 334
14.2.2 Londiste 334
14.2.3 從擴展複製佇列軟體當中讀取信息 335
14.3 特殊的應用程式需求 335
14.3.1 Bucardo 335
14.3.2 pgpool-II 336
14.4 其他一些有趣的與複製有關的開源項目 336
14.5 小結 338
第15章 數據分區 340
15.1 表範圍分區 340
15.1.1 確定要進行分區的關鍵欄位 341
15.1.2 調整分區大小 342
15.1.3 創建分區 343
15.1.4 重定向INSERT語句至分區 344
15.1.5 空分區的查詢規劃 346
15.1.6 修改日期的update觸發器 347
15.1.7 實時遷移分區表 348
15.1.8 分區查詢 350
15.1.9 創建新的分區 353
15.1.10 分區的優勢 354
15.1.11 分區當中的一些常見錯誤 354
15.2 使用PL/Proxy水平分區 355
15.2.1 Hash生成 356
15.2.2 使用PL/Proxy擴展 357
15.2.3 使用GridSQL擴展 359
15.3 小結 360
第16章 應該避免的一些常見問題 362
16.1 批量裝載 362
16.1.1 裝載方法 362
16.1.2 批量裝載的調整 364
16.1.3 略過WAL進行加速 365
16.1.4 重新創建索引及添加約束信息 365
16.1.5 並行恢復 366
16.1.6 裝載之後的數據整理 366
16.2 常見的一些性能問題 367
16.2.1 行的計數 367
16.2.2 不明寫入 368
16.2.3 執行緩慢的函式與預處理語句的執行 369
16.2.4 PL/pgSQL基準評測 370
16.2.5 高外鍵開銷 370
16.2.6 觸發器記憶體使用 371
16.2.7 沉重的統計信息收集器開銷 372
16.2.8 物化視圖 373
16.3 分析資料庫 373
16.3.1 gprof 373
16.3.2 OProfile 373
16.3.3 Visual Studio 374
16.3.4 DTrace 374
16.4 不同版本當中的與性能相關的功能 375
16.4.1 積極地進行PostgreSQL版本升級 375
16.4.2 8.1 377
16.4.3 8.2 377
16.4.4 8.3 377
16.4.5 8.4 379
16.4.6 9.0 381
16.5 小結 385

相關詞條

熱門詞條

聯絡我們