本書介紹與 Oracle 數(shù)據(jù)庫(kù)性能相關(guān)的方方面面,涵蓋了 Oracle 的體系架構(gòu),其背后的運(yùn)行機(jī)制包括事務(wù)、鎖與閂、多版本并發(fā),各種 Oracle 高級(jí)特性如分區(qū)、并行執(zhí)行、直接路徑操作,以及大數(shù)據(jù)導(dǎo)入 / 導(dǎo)出性能優(yōu)化,并用具體的例子來(lái)解釋每個(gè)特性,它是如何工作的、其限制是什么。
本書用通俗易懂的方式介紹如何理解并掌握 Oracle SQL 執(zhí)行計(jì)劃,如何高效地掌握 Oracle SQL 性能分析與優(yōu)化,這是擺在眾多開發(fā)人員面前的兩座大山。
本書不僅是從 Oracle 數(shù)據(jù)庫(kù)與 SQL 優(yōu)化本身的角度探討高性能架構(gòu)設(shè)計(jì),更重要的是從整個(gè)應(yīng)用層、綜合中間件角度考慮各特性是否適合采用 Oracle 實(shí)現(xiàn),如何在 Java 及 JDBC、 MyBatis 中優(yōu)化。為此多個(gè)章節(jié)專門探討 Oracle 不擅長(zhǎng)的特性,以及如何在 Java 和中間件中更好地實(shí)現(xiàn)它們。
本書適合具有一定 Oracle 數(shù)據(jù)庫(kù)經(jīng)驗(yàn)的開發(fā)人員和數(shù)據(jù)庫(kù)管理員閱讀。
張君華,金融證券企業(yè)級(jí)系統(tǒng)架構(gòu)師,曾負(fù)責(zé)多省商品清算所架構(gòu)設(shè)計(jì),新一代基金登記過(guò)戶系統(tǒng)架構(gòu)設(shè)計(jì),擁有豐富的一線金融系統(tǒng)架構(gòu)設(shè)計(jì)和性能優(yōu)化實(shí)戰(zhàn)經(jīng)驗(yàn)。主要研究方向包括中臺(tái)建設(shè)、微服務(wù)、云原生架構(gòu)、Oracle&MySQL&PostgreSQL、分布式并行清算、MPP等。
第 1 章? 實(shí)現(xiàn)高性能系統(tǒng)的基礎(chǔ)?1
1.1 何為高性能2
1.2 為什么仍需要高性能設(shè)計(jì) 4
1.3 直到系統(tǒng)跑不下去了才去重構(gòu) 5
1.4 保持高性能需要持續(xù)維護(hù) 6
1.5 系統(tǒng)性能低下的原因 7
1.6 影響系統(tǒng)性能的合理因素13
1.7 基準(zhǔn)性能測(cè)試15
1.8 高性能系統(tǒng)設(shè)計(jì)原則17
第 2 章? 規(guī)劃性能友好的架構(gòu)23
2.1 典型系統(tǒng)架構(gòu) 24
2.2 分布式架構(gòu)的挑戰(zhàn)28
2.3 何為友好的架構(gòu)設(shè)計(jì) 30
2.4 盡早確定具體技術(shù)棧和接口規(guī)范 36
2.5 確定可用的特性和軟件版本38
2.6 開放思路43
2.7 普通商用服務(wù)器的當(dāng)前現(xiàn)狀46
2.8 虛擬化和云主機(jī)的影響 56
2.9 限制性能友好技術(shù)架構(gòu)的原因 56
2.10 按照規(guī)范執(zhí)行后,性能和擴(kuò)展性還是不理想 58
2.11 多租戶應(yīng)用的挑戰(zhàn)59
第 3 章? 理解 Oracle 運(yùn)行機(jī)制61
3.1 基于磁盤數(shù)據(jù)庫(kù)的弱項(xiàng) 62
3.2 花 100 萬(wàn)元買來(lái)當(dāng)擺設(shè)65
3.3 選擇標(biāo)準(zhǔn)版還是企業(yè)版.66
3.4 Oracle 體系架構(gòu)概覽 68
3.5 Oracle 事務(wù)79
3.6 多版本并發(fā)控制90
3.7 Redo 日志93
3.8 Undo 日志107
第 4 章? 高效 Oracle 設(shè)計(jì)114
4.1 設(shè)計(jì)良好的 Oracle 表 115
4.2 除了常規(guī)表外還有哪些選擇126
4.3 深入理解 Oracle 索引 131
4.4 深入理解分區(qū)151
4.5 深入理解 Oracle 并行執(zhí)行161
4.6 直接路徑操作 170
4.7 深入理解 Oracle 內(nèi)存列式存儲(chǔ)174
4.8 熟悉分析函數(shù)180
4.9 不建議使用 Oracle 實(shí)現(xiàn)的場(chǎng)景182
第 5 章? 高并發(fā)和鎖186
5.1 各種類型的高并發(fā)187
5.2 影響并發(fā)性的因素189
5.3 鎖 - 共享資源訪問(wèn)控制機(jī)制194
5.4 Oracle 中的鎖197
5.5 Java 中的并發(fā)訪問(wèn)控制210
5.6 分布式鎖的實(shí)現(xiàn) 238
5.7 選擇正確的鎖實(shí)現(xiàn)方式244
第 6 章? 應(yīng)用層高性能設(shè)計(jì)247
6.1 領(lǐng)域模型、數(shù)據(jù)庫(kù)模型和 Java 類248
6.2 把掌握和維護(hù)中間件重視起來(lái)252
6.3 充分利用各級(jí)緩存253
6.4 JDBC、 OCI 優(yōu)化257
6.5 最小化網(wǎng)絡(luò)交互263
6.6 分頁(yè)查詢優(yōu)化273
6.7 統(tǒng)一模式功能使用 AOP277
6.8 通知型功能使用消息隊(duì)列284
6.9 日志優(yōu)化 285
6.10 根據(jù)上下文自適應(yīng)優(yōu)化 286
6.11 核心邏輯避免通用代碼生成.290
6.12 該用 PL/SQL 時(shí)不要故意避開292
第 7 章? Oracle 實(shí)例與系統(tǒng)優(yōu)化295
7.1 Oracle 實(shí)例優(yōu)化概述 296
7.2 內(nèi)存優(yōu)化297
7.3 存儲(chǔ)優(yōu)化303
7.4 初始化參數(shù)優(yōu)化310
7.5 其他 Oracle 實(shí)例優(yōu)化322
7.6 高可用 / 可恢復(fù)性相關(guān)性能影響328
7.7 Linux 優(yōu)化 .333
第 8 章? 系統(tǒng)性能分析與診斷338
8.1 整體性能監(jiān)控與分析 339
8.2 Linux 性能分析343
8.3 Java 性能分析348
8.4 Oracle 實(shí)例性能分析355
8.5 Oracle 典型等待事件分析370
第 9 章? 精通執(zhí)行計(jì)劃分析411
9.1 SQL 內(nèi)部執(zhí)行過(guò)程 412
9.2 SQL 性能分析的關(guān)鍵.414
9.3 Oracle 性能分析工具 415
9.4 高效掌握?qǐng)?zhí)行計(jì)劃421
9.5 Oracle 執(zhí)行計(jì)劃精解 427
9.6 其他執(zhí)行計(jì)劃相關(guān)要點(diǎn)450
第 10 章? Oracle?SQL 性能分析與優(yōu)化458
10.1 優(yōu)化器459
10.2 統(tǒng)計(jì)信息476
10.3 直方圖和綁定變量窺視498
10.4 深入理解 Oracle 優(yōu)化器提示504
10.5 典型性能優(yōu)化案例531
第 11 章? 大數(shù)據(jù)導(dǎo)入 / 導(dǎo)出優(yōu)化544
11.1 常見的大數(shù)據(jù)處理場(chǎng)景介紹545
11.2 大數(shù)據(jù)導(dǎo)入 / 導(dǎo)出方案 547
11.3 其他優(yōu)化578