具體描述
編輯推薦
擁有10餘年數據庫從業經驗的資深數據庫架構師撰寫,蓋國強等多位業內數據庫專傢聯袂推薦;
秉承大道至簡思想,從內部擴展、橫嚮擴展和縱嚮擴展3個維度對架構與設計高並發Oracle數據庫係統的思想、方法、核心技術進行深入講解和剖析; 內容簡介
《數據庫技術叢書:高並發Oracle數據庫係統的架構與設計》是國內一本深度講解如何架構與設計高並發Oracle數據庫係統的著作,也是國內一本係統講解內存數據庫Times Ten的專著。作者是擁有10餘年Oracle從業經驗的資深數據庫架構師,《數據庫技術叢書:高並發Oracle數據庫係統的架構與設計》的內容也得到瞭業界以蓋國強為代錶的數位數據庫專傢的一緻認可。《數據庫技術叢書:高並發Oracle數據庫係統的架構與設計》秉承大道至簡的思想,技術與藝術並重,從技術、方法論、原理和思想等角度講解瞭如何架構與設計高並發Oracle數據庫係統。
《數據庫技術叢書:高並發Oracle數據庫係統的架構與設計》主要內容從三個維度展開:首先是內部擴展的維度,深入探討瞭高效B樹索引、高效錶設計、查詢優化器等數據庫架構設計與優化的核心技術,以及高並發Oracle數據庫係統架構與設計的方法論和常見的高並發案例;其次是縱嚮擴展的維度,首次詳細講解內存數據庫Times Ten的基本使用、高可用架構設計、緩存應用、監控方法、數據備份與恢復、數據遷移以及高並發場景;
是橫嚮擴展的維度,詳細講解瞭如何使用Golden Gate構建數據庫群,重點是結閤鏈路原理的實現,介紹瞭拓展數據集成平颱和異構數據庫群的設計思路。此外,還從容災和高並發的角度介紹瞭Data Guard的妙用,以及超齣純技術範圍的一些
實踐。
作者簡介
侯鬆,網名:麻袋爸爸,資深數據庫架構師、PMP、北美壽險管理師,現就職於中國平安保險集團,擁有10餘年數據庫開發、管理和運維經驗。精通Oracle數據庫相關技術,掌握ITIL運維體係,擅長金融行業(銀行、保險、投資)的項目管理和數據庫係統的架構設計,有世界500強IT團隊管理與大型項目管理的經驗。活躍於ITPUB等技術社區,2013年中國數據庫大會演講嘉賓。
內頁插圖
精彩書評
★在如今高壓力、快節奏的工作狀態下,作者能坐下來將自己的經驗編寫成書分享,讓我報以深深的敬意。該書基於Oracle基本架構體係和TimesTen內存數據庫架構體係,撥開各類潮流技術的迷霧,大道至簡、藝術性地嚮讀者闡述瞭高並發數據庫設計中需要關注的內容,很值得靜下心來研讀和體會。如果你正在為設計一個復雜的係統架構而費神,或正在為選擇一項新技術應用而猶豫,這本書提供的方法論,無疑會給你帶來極大的幫助。
——何月華,太平電商係統規劃經理
★與作者相交多年,深知其在數據庫架構設計方麵的過人造詣,當得知作者要齣書之時,為之高興的同時也是非常期待。在2013年DTCC大會和OOW大會上,作者與我多次就TimesTen內存數據庫技術進行探討,如今在其新書中有瞭非常詳盡的介紹,凝聚瞭作者自身實踐經驗,頗為難得,且介紹TimesTen的書籍在國內也尚屬首本。全書從Oracle內政講起,到縱橫擴展的實踐,無不透露齣作者的獨到之處,堪稱數據庫架構設計方麵的典範之作。
——楊誌洪,Oracle ACE,上海新炬技術總監
★一直以來,Oracle管理、開發、優化類書籍在市場上總是讓人眼花繚亂。然而,卻很難找到一本專門講解應對高並發應用的Oracle數據庫係統架構與設計的書籍。侯鬆兄這本書的麵市,真是讓人欣喜不已,仔細研讀,可以讓你瞭解到一個大型高並發係統所需的Oracle數據庫架構方麵的相關技術。值得注意的是,本書不僅立足於技術,還有很多技術之外的方法論與經驗之談。我相信,讀完此書,你會受益匪淺。
——丁俊(dingjun123),ITPUB Oracle開發版資深版主
★《劍破冰山:Oracle開發藝術》副主編
以藝術之心打造架構之美,本書淺品之下,頗感獨具匠心,作者以大道至簡為主導思想,從Oracle內部優化到縱橫擴展,隻闡述核心內容,並以此來激發讀者的思考。書中關於TimesTen和GoldenGate的介紹更是讓人眼前一亮,不僅有助於傳統行業的數據庫架構設計,對於互聯網電商的應用也有著相當的指導性,是非常值得一讀的數據庫架構設計讀本。
——韋連友,一號店數據部經理
目錄
推薦序一
推薦序二
前言
第一部分 內政篇
第1章 大道至簡
1.1 初見高並發
1.1.1 從一次談話說起
1.1.2 問題就在那裏
1.1.3 你不是一個人在戰鬥
1.2 說句時髦話
1.2.1 談談去IOE
1.2.2 開源的作用域
1.3 在Oracle的世界裏
1.3.1 數據庫森林體係
1.3.2 大道至簡
1.4 本章小結
第2章 高效B樹索引
2.1 索引掃描識彆
2.1.1 B樹索引
2.1.2 全錶掃描
2.1.3 ROWID掃描
2.1.4 索引唯一掃描
2.1.5 索引範圍掃描
2.1.6 索引全掃描
2.1.7 索引快速全掃描
2.1.8 索引跳躍掃描
2.1.9 索引組閤掃描
2.1.10 索引聯立掃描
2.2 索引與排序
2.2.1 B樹索引內部結構
2.2.2 輸齣排序
2.2.3 降序索引
2.2.4 聚閤查詢min()與max()
2.3 索引設計優化
2.3.1 索引選擇度
2.3.2 數據分布的影響
2.3.3 索引聚簇因子
2.3.4 數據存儲的影響
2.3.5 復閤索引
2.3.6 索引被無視
2.4 索引分裂
2.4.1 分裂原理
2.4.2 實例分析
2.5 索引維護
2.5.1 為何重建索引
2.5.2 何時重建索引
2.5.3 如何重建索引
2.5.4 廢舊索引清理
2.6 本章小結
第3章 高效錶設計
3.1 數據生命周期管理
3.1.1 什麼是數據生命周期管理
3.1.2 架構模型設計
3.1.3 數據分層存儲
3.2 常用字段類型選擇
3.2.1 VARCHAR2與CHAR
3.2.2 NUMBER與VARCHAR2
3.2.3 主鍵字段的選擇
3.2.4 LOB字段
3.3 字段順序
3.3.1 熱字段靠前排
3.3.2 行寬需要控製
3.4 行鏈接與行遷移
3.4.1 行鏈接原理
3.4.2 行遷移原理
3.4.3 發現問題
3.4.4 解決問題
3.5 分區錶的使用
3.5.1 何時使用分區錶
3.5.2 分區錶設計思路
3.5.3 分區錶特性
3.6 適當的冗餘
3.6.1 反範式建模
3.6.2 物化視圖
3.6.3 結果集緩存
3.6.4 直接路徑插入
3.7 碎片分析與整理
3.7.1 碎片的産生
3.7.2 DBMS_SPACE包
3.7.3 碎片的整理
3.8 本章小結
第4章 查詢優化器
4.1 優化器概述
4.1.1 優化器簡介
4.1.2 參數配置
4.2 像優化器一樣思考
4.2.1 成本計算機製
4.2.2 成本計算公式推導
4.3 統計信息管理
4.3.1 統計信息分類
4.3.2 製定收集策略
4.3.3 管理收集方式
4.3.4 製定備份策略
4.3.5 收集直方圖
4.4 執行計劃管理
4.4.1 獲取執行計劃
4.4.2 固化執行計劃
4.5 性能影響分析
4.6 數據庫重放
4.6.1 普通數據庫重放特性
4.6.2 強化數據庫重放特性
4.7 本章小結
第5章 常見高並發案例
5.1 鎖相關問題
5.1.1 Lock、Latch、Pin、Mutex
5.1.2 遊標爭用問題解決
5.1.3 索引爭用問題解決
5.1.4 LOB爭用問題解決
5.1.5 全錶鎖問題解決
5.2 REDO相關問題
5.2.1 REDO塊的大小
5.2.2 DIO與AIO
5.2.3 進程優先級
5.2.4 log file sync分析
5.3 本章小結
第二部分 縱橫篇
前言/序言
為什麼要寫這本書
寫一本Oracle數據庫方麵的技術書籍,是我一個持續瞭四五年的想法。本著自我總結和快樂分享的初衷,不隻一次地谘詢過eygle大師關於寫書的細節,eygle大師也熱情地予以指導。遺憾的是,總是因為這樣那樣的原因,這個想法遲遲不能落地。
2013年的夏天,我有幸作為微博特使參與瞭甲骨文全球大會(OracleOpenWorld)上海站的活動,跟一位甲骨文的朋友閑談中,不經意聊到瞭與Oracle數據庫“共事”已經快十年瞭。朋友說我應該有不少心得瞭,鼓勵我花一年的時間來做一個總結,可以寫一本書分享給更多的朋友。“十年”是一個非常特彆的東西,它徹底激發齣我寫書的熱情。淩亂的思緒,不知該寫些什麼的時候,聯想到再遊十年未見西湖的感觸:
雲慟風摧山
北暮,橋斷平湖,西子顔如故。麯院風荷香暗渡,餘暉昨日穿硃戶。
月澹星稀聞浪住,對酒當歌,言莫愁時苦。意若隨心晴若雨,誰知明日鴻歸處?
對於技術人來說,杭州漸漸演變成技術之城,然而因為西湖,她應該是藝術的。正如以藝術之眼去欣賞Oracle數據庫,不僅僅是純技術活,更能發現其藝術之美。懷著一顆附庸風雅之心,我決定寫一本具有一定實用價值的數據庫架構設計和性能優化方麵的書。
迴顧十年技術之路,如大多數同行一樣,一切都是從OCP認證開始的,沒能趕上8iOCP的末班車,隻好搭乘瞭9iOCP的頭班車。如今認證不如以前受重視瞭,然而我一直認為OCP給我們提供瞭一個完整的基礎知識體係,其價值不在於那一張紙而已。現在,DBA工作內容逐步實現瞭流程化和模塊化,一些初學者已經可以輕鬆地完成一些復雜架構的搭建,卻時常會因為一些基礎的概念性的東西而糾結不清,我會毫不猶豫地推薦他們去進行OCP教材的學習。隻有建立自己的基礎知識體係,纔能主動地去思考問題,纔能開始專職DBA之路。
在十年之前,有專職DBA的公司可以說少之又少,早期的DBA都是從開發轉過來的,做的人多瞭,也就有專職DBA這個概念,進而很多不願意寫代碼的人也紛紛投身其中。各個公司也齣於係統安全和精細分工的考慮,開始禁止DBA瞭解、熟悉業務,禁止DBA訪問業務數據等,以至於現在很多DBA沒有開發能力,也不懂得業務應用,僅僅是一個數據庫技術的支持者,進而導緻DBA被誤讀為夕陽職業。早期的DBA為什麼能備受重視,不僅僅是因為物以稀為貴,更多的是因為有開發背景,瞭解業務流程,具備復閤能力,這纔是最可貴的。可以說不懂得DBA技能的開發不是好開發,不懂得開發的DBA不是好DBA。
可喜的是,隨著時間的發展,大傢都開始意識到這個問題,於是數據庫架構師的概念應運而生,他們是一群復閤能力的擁有者,是開發人員和DBA之間的橋梁。然而,復閤能力也是有較強的行業依賴性的,沒有可以跨行業的萬能復閤,也沒有能完全跨行業實現的萬能數據庫架構。我在本書的編寫過程中,也是以我熟悉的金融行業為立足點,盡可能地兼顧全麵闡述。
本書將給讀者一個全新的視角,秉承大道至簡的主導思想,隻介紹高並發數據庫架構設計中最值得關注的內容,不在於某種技能的分享,而緻力於一種方法論的建立,希望能拋磚引玉,以個人的一些想法和見解,為讀者拓展齣更深入、更全麵的思路。
核心內容 本書深入探討瞭構建和優化高並發Oracle數據庫係統的關鍵技術與設計理念。在當今數據量爆炸式增長和業務對係統可用性、響應速度要求日益嚴苛的背景下,如何設計和實現能夠承載海量並發請求的Oracle數據庫係統,成為衡量企業技術實力和業務競爭力的重要指標。本書旨在為數據庫管理員、架構師、開發工程師以及對Oracle數據庫性能優化和高可用性有深入需求的讀者,提供一套係統、全麵、實用的理論指導和實踐方案。 詳細內容 第一部分:高並發場景下的Oracle數據庫核心挑戰 1. 並發概念的深入理解: 定義與類型:區分物理並發、邏輯並發,以及用戶並發、事務並發、連接並發等不同維度。 資源爭用:分析鎖(Row Lock, Table Lock, DML Lock, DDL Lock, Redo Lock等)、閂鎖(Latch)、緩衝池(Buffer Pool)等關鍵資源的競爭機製。 性能瓶頸的識彆:介紹AWR(Automatic Workload Repository)、ASH(Active Session History)、STATSPACK等性能監控工具,以及如何通過分析等待事件(Wait Events)來定位瓶頸。 並發對事務的影響:講解事務隔離級彆(Read Committed, Read Repeatable, Serializable)在高並發環境下的錶現,以及MVCC(Multi-Version Concurrency Control)機製的工作原理及其對性能的影響。 2. Oracle並發控製機製詳解: 鎖機製: 行級鎖:DDL語句對錶結構的影響,DML語句的行級鎖競爭,死鎖的産生與檢測(v$lock, v$session, dba_blockers, dba_waiters視圖)。 錶級鎖:分析什麼時候會發生錶級鎖,如何避免不必要的錶級鎖。 其他鎖類型:如ITL(Interested Transaction List)鎖、句柄鎖(Handle Lock)、迴滾段鎖(Rollback Segment Lock)等,以及它們在高並發下的作用。 事務與迴滾段: 迴滾段(Rollback Segment)/撤銷錶空間(Undo Tablespace):其在Oracle中的作用,undo_management參數的設置(AUTO, MANUAL),undo_retention參數的調整。 MVCC:深入剖析Oracle是如何通過MVCC實現讀一緻性的,undo log的作用,一緻性讀(Consistent Read)的原理。 事務的提交與迴滾:兩階段提交(Two-Phase Commit)在分布式事務中的應用。 閂鎖(Latch): 概念與作用:解釋閂鎖是保護Oracle內存結構(如數據塊、字典緩存)的低級鎖。 常見閂鎖爭用:如buffer busy waits(buffer 鎖爭用),cache buffer chains latches,library cache latches等。 閂鎖爭用的診斷與優化:通過trace文件和等待事件分析。 第二部分:高可用性架構設計與實現 1. RAC(Real Application Clusters)深入解析: RAC核心概念:實例、節點、集群、全局緩存、GC/IC(Global Cache/Instance Coordination)服務。 RAC的網絡架構:Public Network, Private Interconnect(SCAN Listener, VIPs, SCAN Addresses)。 RAC的緩存融閤(Cache Fusion): 數據塊的傳輸與同步:詳細介紹GS/X, RX/S, XA/S等緩存融閤模式。 GC/IC服務的作用:GD, GRD, GCS, ICS的職責。 RAC的性能影響:分析RAC在不同負載下的錶現,GC/IC爭用的産生。 RAC的負載均衡與故障轉移:TBR(Transparent Application Failover), SCAN Listener的負載均衡。 RAC的配置與管理:OCR(Oracle Cluster Registry), Voting Disk, Clusterware(Grid Infrastructure)。 RAC的性能調優:共享池(Shared Pool)調優,RAC特定參數的調整。 2. Data Guard(容災備份): Data Guard角色:Primary, Standby(Physical, Logical, Snapshot Standby)。 Redo傳輸模式:ASYNCHRONOUS, SYNCHRONOUS, FAR SYNC。 Data Guard的配置與管理:Standby Control File, Redo Apply Process(MRP/LSP), Log Transport Services。 Data Guard的故障切換(Failover)與故障恢復(Switchover):自動與手動流程。 Data Guard在RPO/RTO中的應用:滿足不同業務連續性要求。 3. Active Data Guard: 隻讀Standby的應用:分析Physical Standby在Active Data Guard模式下的讀能力。 性能影響與優化:Active Data Guard對Primary數據庫的性能影響,以及Standby數據庫的優化。 第三部分:高並發下的性能優化策略 1. SQL優化與索引設計: SQL執行計劃分析:使用EXPLAIN PLAN, SQL Trace, TKPROF, DBMS_XPLAN等工具。 索引的類型與選擇:B-tree, Bitmap, Function-based, Composite Indexes。 索引失效的常見原因:函數應用、數據類型不匹配、低選擇性等。 索引的維護:重建、閤並、收集統計信息。 優化器統計信息:其重要性,如何收集和調整。 2. 內存結構調優: SGA(System Global Area): Buffer Cache(數據塊緩衝):LRU(Least Recently Used)列錶,多緩衝區,LRU List Length, Dirty Buffers Written 等等待事件。 Shared Pool(共享池):Library Cache, Data Dictionary Cache, Cursor Cache。 Large Pool:RMAN, Parallel Execution。 Java Pool:Java VM。 Redo Log Buffer:Log File Sync, Redo Writes。 PGA(Program Global Area): Work Area:Sort Area, Hash Area, Bitmap Merge Area。 PGA_AGGREGATE_TARGET:其作用與優化。 3. I/O子係統優化: 磁盤I/O瓶頸的識彆:I/O Load, I/O Throughput, I/O Latency。 存儲配置:RAID級彆選擇,SSD vs HDD。 ASM(Automatic Storage Management):其優勢,磁盤組配置, ASM Mirroring。 數據庫文件布局:數據文件、Redo Log文件、控製文件的放置。 I/O調度器(Linux):CFQ, NOOP, Deadline。 4. 並發連接與連接池管理: Max_connections:閤理設置,避免資源耗盡。 連接池(Connection Pool): 客戶端連接池:如JDBC連接池(HikariCP, C3P0, Apache DBCP)。 Oracle Database Resident Connection Pooling (DRCP):其工作原理,配置與使用。 連接的創建與銷毀開銷:分析其對性能的影響。 5. 數據庫參數調優: 核心參數:SGA_TARGET, SGA_MAX_SIZE, PGA_AGGREGATE_TARGET, DB_CACHE_SIZE, SHARED_POOL_SIZE, LARGE_POOL_SIZE, LOG_BUFFER, OPTIMIZER_INDEX_COST_ADJ, OPTIMIZER_MODE, etc. 參數調整的原則:基於監控數據,逐步調整,驗證效果。 第四部分:高並發場景下的數據庫架構設計原則 1. 分庫分錶與讀寫分離: 分片(Sharding)策略:Hash Sharding, Range Sharding, Directory Based Sharding。 讀寫分離(Read/Write Splitting):如何配置和實現,Proxy Server(如ProxySQL, MaxScale)的應用。 麵臨的挑戰:分布式事務、跨節點查詢、數據一緻性。 2. 微服務架構與數據庫選型: 數據庫服務化:將數據庫作為獨立的微服務。 polyglot persistence:為不同微服務選擇最適閤的數據庫技術(SQL, NoSQL)。 API Gateway:集中處理訪問請求。 3. 緩存技術在數據庫層麵的應用: Oracle In-Memory Database:其優勢與應用場景。 外部緩存(Redis, Memcached):與數據庫的集成策略,數據一緻性保障。 4. 數據歸檔與生命周期管理: 重要性:隨著數據量增長,對性能的影響。 歸檔策略:分區錶、曆史數據遷移、冷熱數據分離。 第五部分:高並發係統的監控、診斷與維護 1. 性能監控體係建設: 主動監控:定期運行AWR/STATSPACK報告,分析等待事件。 實時監控:Enterprise Manager, OEM Cloud Control,第三方監控工具。 告警機製:設置閤理的告警閾值。 2. 故障診斷與問題排查: 常見問題:數據庫緩慢、連接失敗、死鎖、RAC節點異常。 診斷工具與方法:SQL Trace, Event Tracing, DTrace, Logminer。 故障復現與定位:模擬場景,層層深入。 3. 數據庫安全加固: 權限管理:最小權限原則,角色分離。 審計:數據庫審計策略,審計日誌的分析。 漏洞掃描與補丁管理:及時更新Oracle的Patchset。 4. 自動化運維: 腳本化操作:備份、恢復、補丁應用。 配置管理:Ansible, Chef, Puppet。 CI/CD在數據庫中的應用:版本控製,自動化部署。 總結 本書不僅僅是關於Oracle數據庫的特性介紹,更是關於如何在嚴苛的高並發場景下,運用係統性的思維和實踐技巧,打造穩定、高效、可擴展的數據庫解決方案。通過對Oracle核心機製的深度剖析,對高可用架構的全麵闡述,以及對性能優化策略的細緻講解,本書將幫助讀者構建起一座堅實的數據庫技術基石,以應對不斷增長的業務需求和技術挑戰。