《SQLServer運(yùn)維之道》從一位擁有多年數(shù)據(jù)庫(kù)運(yùn)維經(jīng)驗(yàn)的“老司機(jī)”視角出發(fā),循序漸進(jìn)地介紹SQLServer數(shù)據(jù)庫(kù)!禨QLServer運(yùn)維之道》分為4篇,共9章,內(nèi)容涵蓋數(shù)據(jù)庫(kù)基礎(chǔ)、性能優(yōu)化、開(kāi)發(fā)、架構(gòu)高可用性與運(yùn)維等多個(gè)方面;A(chǔ)篇(第1章和第2章)從安裝部署講起,探討SQLServer在容器化和云原生環(huán)境下的安裝部署,以及Linux平臺(tái)上的架構(gòu)設(shè)計(jì)與性能表現(xiàn)。性能篇(第3~6章)聚焦數(shù)據(jù)庫(kù)性能優(yōu)化,內(nèi)容包括新特性加速數(shù)據(jù)庫(kù)恢復(fù)、事務(wù)與鎖、索引優(yōu)化以及數(shù)據(jù)庫(kù)自動(dòng)駕駛能力等。開(kāi)發(fā)篇(第7章和第8章)重點(diǎn)介紹數(shù)據(jù)庫(kù)安全性及多模態(tài)能力,著重講解區(qū)塊鏈技術(shù)在數(shù)據(jù)庫(kù)安全方面的創(chuàng)新應(yīng)用,以及圖數(shù)據(jù)、JSON數(shù)據(jù)和空間地理數(shù)據(jù)等多模態(tài)數(shù)據(jù)的支持。架構(gòu)與運(yùn)維篇(第9章)圍繞數(shù)據(jù)庫(kù)高可用性和運(yùn)維展開(kāi),詳細(xì)講解AlwaysOn高可用性集群的搭建與高級(jí)功能!禨QLServer運(yùn)維之道》結(jié)合實(shí)際生產(chǎn)案例,旨在幫助讀者學(xué)以致用,解決數(shù)據(jù)庫(kù)運(yùn)維中的痛點(diǎn)!禨QLServer運(yùn)維之道》既適合數(shù)據(jù)庫(kù)初學(xué)者,也適合有一定基礎(chǔ)的開(kāi)發(fā)人員,還適合作為培訓(xùn)機(jī)構(gòu)和大中專院校的教學(xué)用書(shū)。
《SQLServer運(yùn)維之道》是一本針對(duì)數(shù)據(jù)庫(kù)管理員、運(yùn)維工程師和開(kāi)發(fā)人員的全面參考書(shū)。它深入探討了SQLServer2022的各項(xiàng)核心功能,包括跨平臺(tái)的安裝、配置及優(yōu)化技巧,精細(xì)解讀內(nèi)存優(yōu)化、智能查詢處理和高可用性技術(shù)。書(shū)中不僅涵蓋了從基礎(chǔ)知識(shí)到高級(jí)技術(shù)的全方位內(nèi)容,還通過(guò)豐富的實(shí)操示例和實(shí)踐,幫助讀者提高管理效率和系統(tǒng)性能。無(wú)論是日常運(yùn)維還是系統(tǒng)優(yōu)化,這本書(shū)都將成為您不可或缺的實(shí)用工具。
前 言
大學(xué)時(shí),我就開(kāi)始接觸SQL Server,而將其真正用于工作中已有12年多。不論大家對(duì)它的評(píng)價(jià)如何,我依然深愛(ài)著它。從大學(xué)開(kāi)始算起,我大約有16年的SQL Server使用經(jīng)驗(yàn)。進(jìn)入職場(chǎng)后,我最早開(kāi)始使用的是SQL Server 2000版本,可以說(shuō)從當(dāng)初的SQL Server“菜鳥(niǎo)”,逐漸成長(zhǎng)為現(xiàn)在的“老鳥(niǎo)”。工作后,接觸到的SQL Server性能問(wèn)題日益增多,數(shù)據(jù)庫(kù)數(shù)據(jù)量也越來(lái)越大(我曾接觸過(guò)最大單庫(kù)為48TB的數(shù)據(jù)量)。SQL Server面對(duì)這些棘手的問(wèn)題都能迎刃而解,這讓我對(duì)SQL Server的能力愈發(fā)著迷。2014年,我成為一名專職的SQL Server DBA,數(shù)據(jù)庫(kù)性能和高可用問(wèn)題的探索和實(shí)踐也從興趣轉(zhuǎn)變?yōu)楣ぷ髀氊?zé)。成為專職DBA后,我逐漸完善了自己的數(shù)據(jù)庫(kù)知識(shí)結(jié)構(gòu),為本書(shū)的寫(xiě)作提供了堅(jiān)實(shí)的基礎(chǔ)。
之前,我在某互聯(lián)網(wǎng)游戲公司帶領(lǐng)DBA團(tuán)隊(duì)運(yùn)維TB級(jí)的業(yè)務(wù)數(shù)據(jù)庫(kù),運(yùn)維的數(shù)據(jù)庫(kù)種類繁多,包括MySQL、MongoDB、Redis、SQL Server和PostgreSQL等。平時(shí)的工作涉及存儲(chǔ)、高可用性和災(zāi)備的設(shè)計(jì)方案,還主導(dǎo)了內(nèi)部數(shù)據(jù)庫(kù)運(yùn)維平臺(tái)的研發(fā)。參加工作后,我習(xí)慣在博客園寫(xiě)技術(shù)博客,至今已有14年,堅(jiān)持寫(xiě)原創(chuàng)技術(shù)博客的目的是分享在數(shù)據(jù)庫(kù)運(yùn)維過(guò)程中遇到的各種問(wèn)題和解決方案,并對(duì)技術(shù)問(wèn)題進(jìn)行知識(shí)沉淀。沒(méi)想到,因?yàn)檫@些分享,我三次獲得了微軟SQL Server方向最有價(jià)值的稱號(hào)和博客園推薦博客的榮譽(yù),同時(shí)還結(jié)識(shí)了數(shù)據(jù)庫(kù)領(lǐng)域的許多技術(shù)大師。
SQL Server作為微軟公司著名的數(shù)據(jù)庫(kù)管理產(chǎn)品,多年來(lái)穩(wěn)居DB-Engines數(shù)據(jù)庫(kù)排行榜前三。SQL Server最初由圖靈獎(jiǎng)得主James Nicholas Gray主導(dǎo)開(kāi)發(fā),并基于另一位圖靈獎(jiǎng)得主Michael Stonebraker開(kāi)發(fā)的Ingres系統(tǒng)發(fā)展起來(lái)。經(jīng)過(guò)30多年的錘煉,SQL Server已得到業(yè)內(nèi)的廣泛認(rèn)可和應(yīng)用。
隨著.NET、Visual Studio、Office和PowerShell等微軟的商業(yè)產(chǎn)品逐步實(shí)現(xiàn)跨操作系統(tǒng)平臺(tái)應(yīng)用,SQL Server也在2017年正式支持主流的Linux平臺(tái)(包括Red Hat Enterprise Linux/CentOS、Ubuntu和SUSE)。隨著SQL Server 2017的發(fā)布,SQL Server不僅實(shí)現(xiàn)了跨平臺(tái)的能力,還引入了大量新功能,這些功能大幅提升了數(shù)據(jù)庫(kù)性能與管理效率,并加速了SQL Server與大數(shù)據(jù)和人工智能領(lǐng)域的整合。在SQL Server支持Linux后,部署量顯著上升,因?yàn)橛脩魺o(wú)須再支付Windows系統(tǒng)的商業(yè)授權(quán)費(fèi)用,且可以統(tǒng)一公司的技術(shù)棧,不需要再維護(hù)Windows系統(tǒng)。在當(dāng)前“降本增效”的大環(huán)境下,這一效益尤為顯著。此外,Linux平臺(tái)下的SQL Server安裝包也進(jìn)行了優(yōu)化(瘦身顯著),部署數(shù)據(jù)庫(kù)的過(guò)程更加便捷?梢哉f(shuō),微軟使自家的商業(yè)產(chǎn)品實(shí)現(xiàn)跨操作系統(tǒng)平臺(tái)運(yùn)行的決定是非常明智的。
鑒于國(guó)內(nèi)目前缺乏關(guān)于SQL Server新版本的圖書(shū),且網(wǎng)上資料零散,我結(jié)合近一年的實(shí)踐、資料整合以及16年的使用經(jīng)驗(yàn),編寫(xiě)了本書(shū)。
本書(shū)的目的是幫助讀者了解當(dāng)前SQL Server新版本的功能和發(fā)展?fàn)顩r。特別是如何利用功能做好SQL Server數(shù)據(jù)庫(kù)管理和性能優(yōu)化,尤其是在超大型TB級(jí)甚至PB級(jí)數(shù)據(jù)庫(kù)管理方面。
本書(shū)分為4篇,分別是基礎(chǔ)篇、性能篇、開(kāi)發(fā)篇和架構(gòu)與運(yùn)維篇。
基礎(chǔ)篇(第1、2章)介紹SQL Server的基礎(chǔ)安裝及環(huán)境準(zhǔn)備,并詳細(xì)講解在Linux平臺(tái)上的架構(gòu)設(shè)計(jì)和性能表現(xiàn)。
性能篇(第3~6章)分別介紹SQL Server性能優(yōu)化的新特性、索引方面的新功能(包括列存儲(chǔ)索引和內(nèi)存優(yōu)化索引),以及SQL Server的自動(dòng)駕駛能力,該能力在數(shù)據(jù)庫(kù)領(lǐng)域可謂遙遙。
開(kāi)發(fā)篇(第7、8章)介紹SQL Server的安全和多模態(tài)方面的內(nèi)容。在安全方面,SQL Server引入了不可篡改的區(qū)塊鏈技術(shù),提供了比Oracle數(shù)據(jù)庫(kù)還要強(qiáng)的安全能力,甚至在SQL Server 2022的宣傳資料中提到,SQL Server是過(guò)去10年最安全的數(shù)據(jù)庫(kù)。此外,本書(shū)還獨(dú)具一格地介紹了SQL Server的多模態(tài)能力,包括圖數(shù)據(jù)、JSON數(shù)據(jù)和空間地理數(shù)據(jù)等數(shù)據(jù)類型,功能強(qiáng)大。
架構(gòu)與運(yùn)維篇(第9章)專門(mén)介紹SQL Server的高可用性,包括高可用性的發(fā)展、Linux平臺(tái)上AlwaysOn集群的搭建以及AlwaysOn集群的高級(jí)功能。
配套資源下載
本書(shū)配套源代碼和示例數(shù)據(jù)庫(kù),請(qǐng)讀者用微信掃描下面的二維碼下載。如果學(xué)習(xí)本書(shū)的過(guò)程中發(fā)現(xiàn)問(wèn)題或疑問(wèn),可發(fā)送郵件至booksaga@126.com,郵件主題為“SQL Server運(yùn)維之道”。
本書(shū)能夠順利出版,首先要感謝清華大學(xué)出版社的編輯老師們。在這一年多的時(shí)間里,他們一直支持我的寫(xiě)作,正是他們的鼓勵(lì)和幫助,才讓我順利完成了整本書(shū)稿。
作 者
2025年6月
林勇樺13年數(shù)據(jù)庫(kù)領(lǐng)域深耕經(jīng)驗(yàn),中國(guó)DBA聯(lián)盟(ACDU)成員,三屆微軟SQLServer方向MVP。專注于MySQL、Redis、SQLServer.MongoDB等數(shù)據(jù)庫(kù)技術(shù),具備人工智能專業(yè)碩士背景,曾任大型網(wǎng)絡(luò)游戲公司數(shù)據(jù)庫(kù)負(fù)責(zé)人,深諳企業(yè)級(jí)數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)與性能調(diào)優(yōu)。長(zhǎng)期活躍于技術(shù)社區(qū),致力于分享實(shí)戰(zhàn)經(jīng)驗(yàn)推動(dòng)數(shù)據(jù)庫(kù)技術(shù)在高并發(fā)、大數(shù)據(jù)場(chǎng)景中的落地實(shí)踐。
目 錄
第1篇 基礎(chǔ)篇
第1章 數(shù)據(jù)庫(kù)的安裝與配置 2
1.1 SQL Server概述 2
1.1.1 SQL Server簡(jiǎn)介 2
1.1.2 SQL Server的發(fā)展歷史 2
1.2 安裝前的準(zhǔn)備 5
1.3 Windows平臺(tái)部署 6
1.3.1 安裝包上的改進(jìn) 6
1.3.2 SQL Server安裝向?qū)г斀?8
1.3.3 驗(yàn)證安裝 17
1.3.4 靜默安裝 19
1.4 Linux平臺(tái)部署 21
1.4.1 使用CentOS Stream 9部署SQL Server 22
1.4.2 正式部署Linux上的SQL Server 22
1.4.3 安裝階段 23
1.4.4 與MySQL安裝包的對(duì)比 30
1.4.5 配置階段 31
1.5 容器平臺(tái)部署 38
1.5.1 使用Docker部署SQL Server 39
1.5.2 在Kubernetes上部署SQL Server 41
1.5.3 部署Minikube單機(jī)版 42
1.6 安裝過(guò)程中的常見(jiàn)問(wèn)題 45
1.6.1 Windows平臺(tái) 45
1.6.2 Linux平臺(tái) 46
1.6.3 容器平臺(tái) 47
1.7 安裝示例數(shù)據(jù)庫(kù) 47
1.7.1 下載和安裝示例數(shù)據(jù)庫(kù) 47
1.7.2 使用示例數(shù)據(jù)庫(kù)進(jìn)行測(cè)試和學(xué)習(xí) 49
第2章 Linux平臺(tái)上的架構(gòu)與優(yōu)化 51
2.1 Linux平臺(tái)上的進(jìn)程模型 51
2.2 Linux平臺(tái)上的整體架構(gòu) 53
2.2.1 SQL PAL的內(nèi)部結(jié)構(gòu) 54
2.2.2 系統(tǒng)底層屏蔽神器 56
2.2.3 容器化架構(gòu) 56
2.3 Linux平臺(tái)上的功能演進(jìn) 58
2.4 Linux平臺(tái)上的性能表現(xiàn) 59
2.4.1 TPC-C/TPC-E基準(zhǔn)測(cè)試榜單 59
2.4.2 Linux平臺(tái)性能測(cè)試報(bào)告 61
2.4.3 SQL Server 2022TPC-H性能表現(xiàn) 65
2.4.4 自測(cè)Linux平臺(tái)上數(shù)據(jù)庫(kù) TPC-H 性能 65
2.5 數(shù)據(jù)庫(kù)補(bǔ)丁模型 66
2.5.1 數(shù)據(jù)庫(kù)補(bǔ)丁版本確認(rèn) 68
2.5.2 Linux平臺(tái)上部署補(bǔ)丁包 69
第2篇 性能篇
第3章 性能優(yōu)化新特性 74
3.1 加速數(shù)據(jù)庫(kù)恢復(fù) 74
3.1.1 問(wèn)題背景 74
3.1.2 加速數(shù)據(jù)庫(kù)恢復(fù)介紹 80
3.1.3 解決方案 81
3.1.4 技術(shù)原理 82
3.1.5 ADR收益驗(yàn)證 90
3.1.6 ADR迭代改進(jìn) 94
3.1.7 單庫(kù)48TB的ADR應(yīng)用案例 95
3.2 TempDB元數(shù)據(jù)優(yōu)化 97
3.2.1 問(wèn)題背景 98
3.2.2 問(wèn)題痛點(diǎn) 98
3.2.3 解決方案 99
3.2.4 功能收益 100
3.3 Buffer Pool緩沖池并行掃描 100
3.3.1 問(wèn)題背景 100
3.3.2 問(wèn)題痛點(diǎn) 101
3.3.3 解決方案 101
3.3.4 使用場(chǎng)景 102
3.4 事務(wù)日志并行重做 102
3.4.1 問(wèn)題背景 102
3.4.2 問(wèn)題痛點(diǎn) 103
3.4.3 解決方案 105
3.4.4 事務(wù)日志上的其他改進(jìn) 108
第4章 數(shù)據(jù)庫(kù)事務(wù)、鎖和等待 110
4.1 事務(wù)與ACID 110
4.2 事務(wù)的隔離級(jí)別和數(shù)據(jù)一致性 111
4.3 數(shù)據(jù)庫(kù)鎖 115
4.3.1 鎖粒度 115
4.3.2 鎖類型 115
4.3.3 鎖兼容性 116
4.3.4 輕量級(jí)鎖:閂鎖 116
4.3.5 列存儲(chǔ)索引的事務(wù)隔離級(jí)別 117
4.4 慢查詢?nèi)罩居涗涀枞退梨i 127
4.4.1 阻塞 127
4.4.2 死鎖 129
4.4.3 擴(kuò)展事件記錄歷史阻塞和死鎖 132
4.5 數(shù)據(jù)庫(kù)等待 137
4.5.1 從CPU的角度看等待 137
4.5.2 數(shù)據(jù)庫(kù)執(zhí)行SQL語(yǔ)句的機(jī)制 138
4.5.3 等待類型 139
4.5.4 并行等待 141
4.5.5 多任務(wù)等待 142
4.5.6 數(shù)據(jù)庫(kù)日志等待 143
4.5.7 鎖定等待 144
4.5.8 各類I/O等待 145
4.5.9 其他等待 146
4.5.10 擴(kuò)展事件記錄歷史等待 148
4.6 創(chuàng)新硬件持久內(nèi)存 151
4.6.1 技術(shù)特點(diǎn) 151
4.6.2 性能參數(shù)對(duì)比 151
4.6.3 數(shù)據(jù)庫(kù)支持 152
第5章 索引優(yōu)化 154
5.1 索引簡(jiǎn)介 154
5.2 索引組織和分類 154
5.3 傳統(tǒng)B樹(shù)索引 157
5.3.1 相關(guān)術(shù)語(yǔ) 157
5.3.2 堆表 158
5.3.3 聚集索引表和非聚集索引 159
5.3.4 數(shù)據(jù)訪問(wèn)方式 160
5.3.5 數(shù)據(jù)同步方式 167
5.3.6 B樹(shù)索引的維護(hù)和建議 168
5.4 列存儲(chǔ)索引和集中式架構(gòu)HTAP數(shù)據(jù)庫(kù) 172
5.4.1 HTAP數(shù)據(jù)庫(kù)簡(jiǎn)介 172
5.4.2 在OLAP領(lǐng)域的發(fā)展 172
5.4.3 列存儲(chǔ)索引上的演進(jìn) 173
5.4.4 列存儲(chǔ)索引原理 176
5.4.5 列存儲(chǔ)索引維護(hù)和建議 183
5.4.6 聚集列存儲(chǔ)索引分區(qū)表 187
5.4.7 雙11期間30TB業(yè)務(wù)數(shù)據(jù)實(shí)時(shí)分析案例 192
5.5 內(nèi)存優(yōu)化索引 192
5.5.1 混合存儲(chǔ)引擎架構(gòu) 194
5.5.2 內(nèi)存優(yōu)化索引維護(hù)和建議 195
5.5.3 內(nèi)存優(yōu)化表犄角旮旯 197
第6章 數(shù)據(jù)庫(kù)自動(dòng)駕駛 199
6.1 智能數(shù)據(jù)庫(kù)概述 199
6.2 智能查詢處理演進(jìn) 202
6.3 智能查詢優(yōu)化底座 205
6.3.1 查詢存儲(chǔ)內(nèi)部原理 209
6.3.2 查詢存儲(chǔ)中的關(guān)鍵數(shù)據(jù) 210
6.3.3 查詢存儲(chǔ)的使用場(chǎng)景 212
6.4 近似優(yōu)質(zhì)值計(jì)數(shù) 218
6.4.1 近似優(yōu)質(zhì)值計(jì)數(shù)概述 218
6.4.2 近似優(yōu)質(zhì)值計(jì)數(shù)使用示例 219
6.5 行模式內(nèi)存授予反饋 221
6.5.1 內(nèi)存授予反饋概述 222
6.5.2 內(nèi)存授予反饋使用示例 222
6.5.3 內(nèi)存授予反饋?zhàn)⒁馐马?xiàng) 229
6.6 參數(shù)敏感執(zhí)行計(jì)劃優(yōu)化 229
6.6.1 參數(shù)敏感執(zhí)行計(jì)劃優(yōu)化概述 230
6.6.2 參數(shù)敏感執(zhí)行計(jì)劃優(yōu)化使用示例 230
6.6.3 參數(shù)敏感執(zhí)行計(jì)劃優(yōu)化注意事項(xiàng) 234
第3篇 開(kāi)發(fā)篇
第7章 數(shù)據(jù)庫(kù)安全性 236
7.1 數(shù)據(jù)庫(kù)安全功能演進(jìn) 236
7.2 動(dòng)態(tài)數(shù)據(jù)掩碼 238
7.2.1 DDM屏蔽規(guī)則 239
7.2.2 DDM的工作方式 240
7.2.3 DDM使用示例 241
7.3 行級(jí)安全性 243
7.3.1 RLS的工作方式 244
7.3.2 RLS使用示例 244
7.4 始終加密 247
7.4.1 始終加密使用示例 247
7.4.2 取消始終加密 253
7.5 時(shí)態(tài)表 254
7.5.1 時(shí)態(tài)表的工作方式 254
7.5.2 時(shí)態(tài)表使用示例 256
7.5.3 時(shí)態(tài)表注意問(wèn)題 258
7.6 賬本表 259
7.6.1 賬本表的工作方式 259
7.6.2 賬本表使用示例 261
7.6.3 數(shù)據(jù)庫(kù)驗(yàn)證 264
第8章 多模態(tài)數(shù)據(jù)庫(kù) 268
8.1 多模態(tài)數(shù)據(jù)庫(kù)功能演進(jìn) 268
8.2 圖數(shù)據(jù) 269
8.2.1 圖數(shù)據(jù)庫(kù)概述 270
8.2.2 圖數(shù)據(jù)功能使用示例 270
8.2.3 圖數(shù)據(jù)的新特性 276
8.3 時(shí)間序列數(shù)據(jù) 277
8.3.1 時(shí)間序列數(shù)據(jù)概述 277
8.3.2 時(shí)間序列函數(shù)使用示例 277
8.4 JSON數(shù)據(jù) 281
8.4.1 JSON函數(shù)使用示例 282
8.4.2 JSON索引 286
8.4.3 原生JSON數(shù)據(jù)類型 287
第4篇 架構(gòu)與運(yùn)維篇
第9章 數(shù)據(jù)庫(kù)高可用性 290
9.1 數(shù)據(jù)庫(kù)高可用性概述 290
9.2 高可用性集群方案 291
9.3 Always On可用性組的演進(jìn) 295
9.4 Always On可用性組架構(gòu)與性能優(yōu)化 297
9.4.1 基本架構(gòu)和可用性模式 297
9.4.2 數(shù)據(jù)同步原理 299
9.4.3 數(shù)據(jù)同步延遲 301
9.4.4 僅配置模式輔助副本 303
9.5 Linux平臺(tái)上的Always On可用性組 303
9.5.1 Pacemaker集群管理器概述 304
9.5.2 Pacemaker集群上的Always On架構(gòu) 305
9.5.3 部署DNS服務(wù) 307
9.5.4 Linux平臺(tái)上的Always On集群搭建 310
9.5.5 集群故障轉(zhuǎn)移測(cè)試和維護(hù)建議 322
9.6 Always On可用性組的高級(jí)功能和新特性 326
9.6.1 包含可用性組 327
9.6.2 跨平臺(tái)僅讀取縮放可用性組 329
9.6.3 損壞數(shù)據(jù)頁(yè)自動(dòng)修復(fù) 330
9.6.4 輔助副本使用快照隔離級(jí)別 333