PostgreSQL 9X之巔(原書第2版)

新書備忘

PostgreSQL 9X之巔(原書第2版)
作者:[美] 艾博拉·艾哈邁德(Ibrar Ahmed) 格利高裏·史密斯(Gregory Smith) 著
譯者:範翊 彭煜瑋 唐成 等譯
出版日期 :2018-04-27
ISBN:978-7-111-59619-6
定價:89.00元
擴展信息
語種:簡體中文
頁數:357
開本:16
原書名:PostgreSQL 9.6 High Performance,Second Edition
原出版社:Packt Publishing Ltd.
屬性分類:店面
包含CD:無CD
絕版:未絕版
圖書簡介

圖書特色

資深PostgreSQL數據庫專家撰寫,全面系統闡釋PostgreSQL性能調優的各種方法、技巧及實踐
結合PostgreSQL自身架構和運行環境分析性能影響因素,涵蓋服務器硬件挑選、文件系統調優、數據庫參數配置、查詢優化等方面,並提供大量具體操作實例

圖書前言

無論是傳統的企業型應用,還是當下的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內部架構師使用基準評測工具監控性能。
下載示例代碼
你可以通過http://www.packtpub.com用你的賬戶下載本書的示例代碼。如果你從其他地方購得此書,可以直接訪問http://www.packtpub.com/support去註冊,來獲得相關文件的郵件。
你可以通過以下步驟下載代碼文件:
1)使用你的e-mail地址和密碼在Packt網站上登錄或註冊;
2)將鼠標指針懸停在頂部的“SUPPORT”選項卡上;
3)點擊“Code Downloads & Errata”;
4)在搜索框中輸入圖書的名稱;
5)選擇你要下載代碼文件的圖書;
6)從下拉菜單中選擇你的購書途徑;
7)點擊“Code Download”下載。
文件下載後,請確保使用以下最新版本的文件解壓縮軟件:
WinRAR / 7-Zip (Windows)
Zipeg / iZip / UnRarX (Mac)
7-Zip / PeaZip (Linux)
本書示例代碼包同樣可以從GitHub上下載,網址是:https://github.com/PacktPublishing/PostgreSQL-9.6-High-Performance。

專家評論

性能一直都是數據庫用戶關注的最核心問題,本書着眼於提高PostgreSQL系統的性能,全面介紹了在硬件設置、參數配置、查詢優化等多個方面改善PostgreSQL性能的方法和技巧。不論是DBA還是開發人員都能從本書中有所收穫和幫助。
《PostgreSQL數據庫內核分析》作者,CCF數據庫專委會副主任,武漢大學教授
彭智勇
7年過去了,終於盼來了最新版本的《PostgreSQL 9.6 High Performance》!新版本作者陣容更加強大,除了原作者Gregory Smith之外,又增加了一位重量級人物Ibrar Ahmed,兩位大師級作者從性能的視角對PostgreSQL及其運行的環境進行了全面而深入的剖析,閱讀此書,不僅可以瞭解PostgreSQL自身的架構以及影響性能的因素,而且可以學到計算機硬件知識,如CPU、內存、磁盤等對PostgreSQL性能的影響,以及如何對性能進行基準評測,從而形成完整的性能優化方法論。相信通過閱讀此書,大家定會獲益良多!也會更加喜歡PostgreSQL!
平安科技數據庫技術部總監
汪洋
數據庫性能調優從來都不是一個簡單的話題。本書從操作系統到數據庫實現的多個層面,講解了PostgreSQL數據庫進行常規性能調優的各個場景。無論是對從其他數據庫轉戰PostgreSQL的DBA,還是使用過PostgreSQL一段時間的DBA,本書都是一本不可多得的參考資料。你既可以使用它解決線上系統的性能問題,也可以把它作爲深入理解PostgreSQL性能相關的設計和實現的橋樑。
湖南紅手指信息技術有限公司CTO,《PostgreSQL 9 Administration Cookbook》譯者
黃堅
一本可以最大限度地發揮PostgreSQL性能的調校指南,推薦給所有想用好PostgreSQL的人,也推薦給高校信息化院系的同仁。
西安交通大學網絡信息中心教師
李飛

上架指導

計算機\數據庫

封底文字

性能一直都是數據庫用戶關注的最核心問題,本書着眼於提高PostgreSQL系統的性能,全面介紹瞭如何在硬件設置、參數配置、查詢優化等多個方面改善PostgreSQL性能的方法和技巧,不管是DBA還是開發人員都能從本書中有所收穫和幫助。
—— 彭智勇 《PostgreSQL數據庫內核分析》作者,CCF數據庫專委會副主任,武漢大學教授

7年過去了,終於盼來了最新版本的《PostgreSQL 9.6 High Performance》!新版本作者陣容更加強大,除了原作者Gregory Smith之外,又增加了一位重量級人物Ibrar Ahmed,兩位大師級作者從性能的視角對PostgreSQL及其運行的環境進行了全面而深入的剖析。……相信通過閱讀此書,大家定會獲益良多,也會更加喜歡PostgreSQL!
—— 汪洋 平安科技數據庫技術部總監

數據庫性能調優從來都不是一個簡單的話題。本書從操作系統到數據庫實現的多個層面,講解了PostgreSQL數據庫進行常規性能調優的各個場景。無論對於從其他數據庫轉戰PostgreSQL的DBA還是使用過PostgreSQL一段時間的DBA,它都是一本方不可多得的參考資料。你既可以使用它解決你線上系統的性能問題,也可以把它作爲深入理解PostgreSQL性能相關的設計和實現的橋樑。
—— 黃堅 湖南紅手指信息技術有限公司CTO,《PostgreSQL 9 Administration Cookbook》譯者

一本可以最大限度發揮PostgreSQL性能的調教指南,推薦給所有想用好PostgreSQL的人,也推薦給高校信息化部門的同仁。
—— 李飛 西安交通大學網絡信息中心教師

作者簡介

[美] 艾博拉·艾哈邁德(Ibrar Ahmed) 格利高裏·史密斯(Gregory Smith) 著:

譯者簡介

範翊 彭煜瑋 唐成 等譯:

譯者序

《PostgreSQL 9.6 High Performance》的中文版出版在即,作爲這部優秀作品的譯者之一,我深感榮幸。在中文版的翻譯過程中我們得到了很多朋友的幫助。本書中文版能夠及時出版是國內衆多PostgreSQL(可簡稱爲PG)志願者共同努力的成果,在此先向志願者及出版社表示誠摯的謝意,有你們的付出與協助,PostgreSQL在中國一定能發展壯大,越來越好。
在國內,關於其他商業數據庫的書籍應有盡有,從初級入門到深入提高,各個級別的工具書籍琳琅滿目,而關於PostgreSQL的書籍,則是少之又少。專業書籍除了選擇不多,內容要麼太過淺顯要麼太過深入,PGer大都經歷過無從選擇的迷茫。本書則比較適中,將對PGer瞭解、學習PG起到非常重要的幫助作用。
PG從1996年開始流行,它的先天優勢在於它具有和商業數據庫一樣的架構,但卻是一個開源的項目,這使得它迅速地在開發人員之間流行起來。也正是由於它這種“自由”生長的狀態,使得有關PG方面的專業資料都比較零散,且以英文資料爲主。對於我們國內的開發人員來說,閱讀並參透這些資料,無疑是一個不小的挑戰。近年來,隨着PG在國內的影響力加深,從事PG開發的公司也如雨後春筍般地逐漸增加,越來越多的開發運維人員迫切希望能有更多系統化的資料,幫助他們提高學習PG的效率。
2017年6月,中國開源軟件推進聯盟PostgreSQL協會成立,並將翻譯英文文獻及資料的工作列入重點率先啓動,協會聯繫到《PostgreSQL 9.6 High Performance》的原作者Ibrar Ahmed及原書出版社,在獲取雙方的同意後,以協會爲主導,啓動了本書的翻譯工作,期望通過這本書的翻譯服務於更多的PG愛好者,及從事PG開發工作的廣大工程師。
本書可以說是一本PG的百科全書,從各個版本的特點,到硬件的選擇,甚至細緻到具體每個參數的配置、取值範圍,以及推薦的設置。本書由淺入深,包羅了PG的各個方面。同時作者理論結合實踐,列舉大量具體的實際操作演示,結果也有具體的輸出,還有一些圖表,可以使讀者更清楚地瞭解某一個功能或者命令的實際運行情況。在本書的第17章,作者總結出了一些常見問題,基本都是使用PG的時候經常會遇到的。其中有些問題只有在實際的生產環境中才會凸顯出嚴重性,作者根據自己的實踐經驗,爲我們總結出這些問題,並提示出需要注意的地方。書中還有很多內容,尤其是一些參數的設置,作者根據自身經驗給出一個經驗值,這通常是需要我們在生產環境中測試很多遍才能得到的。當然,實際環境千差萬別,我們要根據實際情況去判斷使用。
通過翻譯本書,譯者對PG有了更深入的認識,也希望廣大讀者能夠通過這個譯本,重新認識PG,並從中汲取養分,轉化到具體的生產實踐中。本書的翻譯從衆邀專家、徵集志願者開始,歷經多次審覈、校正,最終呈現出這個版本,雖然每位參與者都付出了百分百的熱情與專注,但是由於時間倉促,書中難免有一些翻譯不當的地方,希望廣大讀者能夠予以指正。同時,也期望越來越多的PG使用者和愛好者加入到翻譯國外文獻及資料的志願活動中,願PostgreSQL發展得越來越好!
——範翊
在翻譯本書的過程中,譯者也學到了很多,尤其是結合以往所學所想,很多以前比較模糊的問題都得到了澄清,讓人有豁然開朗的感覺。在此,向每一位對PostgreSQL感興趣的讀者鄭重推薦此書。
最後,感謝協助譯者翻譯第10章的邢豔女士,也感謝家人對我的支持和諒解,本書的翻譯工作佔用了大量本應該陪同她們的時間。由於譯者水平有限,譯文中難免出現疏漏,請讀者海涵。
——彭煜瑋
譯者原本就是PostgreSQL的忠實用戶,翻譯的過程也是學習的過程,在本書的翻譯過程中在PostgreSQL高性能方面受益良多。同時,也把本書獻給所有PostgreSQL的使用者。
本書的翻譯出版是團體協作的成果,在此感謝所有參與本書翻譯出版的朋友們。另外,還要感謝我的家人,感謝你們對我翻譯工作的大力支持和理解,並對一些翻譯和行文問題提供了良好的建議。
——唐成
致謝
如果沒有中國開源軟件推進聯盟PostgreSQL協會發起此次翻譯項目,並將大家凝聚到一起,本書中文版是不會如此快速地問世的。我們首先要感謝PostgreSQL協會,更要感謝本書的全體翻譯者和審校者,還有對翻譯過程進行統籌管理的劉媛媛女士,以及對翻譯任務進行監督調配的馮春暉女士。另外,我們還要特別感謝機械工業出版社華章公司的王春華和繆傑編輯,感謝你們深思熟慮的意見、對書籍編輯和完善持有的銳利眼光。
譯文之中難免出現疏漏,歡迎讀者朋友們提出寶貴建議,我們的聯繫郵箱是:[email protected]
感謝所有關注本書以及熱愛PostgreSQL技術的朋友們!

推薦序

PostgreSQL是一個優秀的開源數據庫產品,其穩定性和可靠性已被廣泛證明,擁有活躍的開發者和用戶社區,版本持續升級迭代,新的特性和功能不斷引入。近幾年在國內Postgre-
SQL也呈現出蓬勃發展之勢,用戶涵蓋了互聯網、金融、政府、運營商等各行各業,每年大象會(PostgreSQL中國用戶大會)上都能看到新的使用者分享PostgreSQL在高負載複雜業務環境下運行的案例。
生產環境中,一旦數據庫出現性能問題,用戶和DBA都會承受非常大的壓力,因此數據庫優化是DBA的必備技能。本書主要講述的就是如何對PostgreSQL數據庫進行性能優化,希望讀者是具備一定PostgreSQL基礎的中高級PostgreSQL用戶、開發者或數據庫管理員。對於初學者而言,可以與PostgreSQL手冊結合學習,從而能夠對手冊中的一些概念有更深入的理解。另外,書中有很多實用的例子,也可以幫助讀者更好地學習。
目前,開源產品升級迭代普遍較快,這給專業書籍的編寫出版帶來了一定難度。往往一本書開始構思時,新版本剛剛發佈,經過漫長的編寫、校對後,下一個版本又發佈了,這對“時效性”要求非常高,也給作者和出版社帶來了很大的壓力。既然開源產品是以社區的方式開發,集廣大開發者之力,那麼書籍是不是也可以用這種模式?本書的翻譯就是在這樣的思路下啓動的。本書的譯者既包含彭煜瑋、唐成、黃堅等具備PostgreSQL書籍編篡經驗的資深專家,也有周寶峯、範翊等具有海外工作經驗的高級工程師,還有具有翻譯組織經驗的PostgreSQL官方文檔翻譯人員。此次翻譯的所有參與者都非常熱情和專業,大家爲同一件事情而努力,共同保證了翻譯工作按時高質量完成,可以說本書的翻譯是羣體智慧的結晶。
這次團隊合作成功的價值遠大於翻譯這本書本身,通過這次探索,PostgreSQL協會有了一種新的凝聚模式,希望這種模式能進一步完善,讓更多的人蔘與進來,讓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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章