第1部分 數據庫係統的選型和部署
第1章 SQL Server的安裝和升級 2
1.1 數據庫安裝過程介紹 3
1.1.1 setup.exe執行過程 3
1.1.2 重要的數據庫的安裝日誌文件 5
1.2 單機版本的數據庫安裝和打補丁 13
1.2.1 安裝注意事項 13
1.2.2 用SlipStream方式進行安裝 14
1.2.3 用Product Update方式進行安裝 15
1.2.4 常見安裝問題 16
1.3 特殊版本的數據庫安裝 18
1.4 群集環境下數據庫的安裝和升級 20
1.5 數據庫的升級 27
1.6 小結 30
第2章 選擇必要的高可用性和災難恢復技術 31
2.1 什麼是SQL Server的“高可用性”與“災難恢復” 31
2.2 SQL Server故障轉移群集 33
2.2.1 Windows故障轉移群集 33
2.2.2 SQL Server故障轉移群集 36
2.2.3 SQL Server群集什麼時候會發生“故障轉移” 40
2.2.4 SQL Server群集的拓撲結構 43
2.2.5 SQL 2012對故障轉移群集的改進 44
2.2.6 故障轉移群集的故障排查 55
2.3 日誌傳送 58
2.3.1 日誌傳送的結構 59
2.3.2 日誌傳送的工作機製 60
2.3.3 日誌傳送作業的執行間隔 64
2.3.4 日誌傳送的故障轉移 65
2.3.5 日誌傳送的監控和故障排查 68
2.4 數據庫鏡像 71
2.4.1 數據庫鏡像的基本概念 71
2.4.2 數據庫鏡像操作模式 74
2.4.3 客戶端連接重定嚮及超時控製 78
2.4.4 數據庫鏡像的監控和故障排查 81
2.5 復製 84
2.5.1 復製的基本概念 84
2.5.2 復製的類型 86
2.5.3 災難恢復和復製 90
2.6 高可用和災難恢復技術的選擇 91
2.6.1 高可用和災難恢復技術的比較 91
2.6.2 高可用和災難恢復技術的組閤 97
2.7 小結 100
第3章 新一代的高可用技術AlwaysOn 101
3.1 AlwaysOn的基本架構 102
3.2 AlwaysOn的數據同步原理 106
3.3 AlwaysOn的可用性模式 107
3.4 AlwaysOn的故障轉移形式 111
3.5 創建一個AlwaysOn可用性組 118
3.6 可讀的輔助數據庫 127
3.7 監視AlwaysOn可用性組的運行狀態 133
3.8 小結 138
第4章 數據庫連接組件編程機理 140
4.1 數據庫應用編程方法概述和組件架構 141
4.1.1 WDAC編程 141
4.1.2 SNAC編程 162
4.1.3 ADO.NET編程 163
4.2 連接字符串 166
4.3 連接池 169
4.4 Connection Timeout和Command Timeout 173
4.5 使用BID Tracing來跟蹤檢查應用程序的執行 181
4.6 小結 185
第2部分 SQL Server日常管理
第5章 啓動SQL Server服務和數據庫 188
5.1 SQL Server服務啓動步驟 189
5.1.1 從注冊錶讀取SQL Server啓動信息 190
5.1.2 檢測硬件,配置內存與CPU 193
5.1.3 數據庫啓動 195
5.1.4 準備網絡連接 195
5.2 數據庫狀態切換 198
5.3 數據庫長時間處於RECOVERING狀態 201
5.4 數據庫不能啓動的常見原因和解決辦法 206
5.4.1 master數據庫不能啓動 206
5.4.2 資源數據庫 208
5.4.3 model數據庫 210
5.4.4 tempdb數據庫 212
5.4.5 用戶數據庫 214
5.5 群集環境下,數據庫資源不能ONLINE的常見原因 220
5.5.1 由於單機原因導緻數據庫服務無法啓動 222
5.5.2 由於SQL Server所依賴的資源失敗所導緻 223
5.5.3 由於群集服務無法連接導緻數據庫資源失敗 224
5.6 小結 228
第6章 連接的建立和問題排查 229
6.1 協議的選擇與彆名 230
6.1.1 服務器網絡配置 231
6.1.2 SQL Server Browser的作用 233
6.1.3 客戶端網絡配置 235
6.1.4 客戶端網絡連接選擇機製 239
6.2 連接失敗檢測步驟——命名管道 241
6.2.1 SQL Server命名管道工作原理 242
6.2.2 客戶端的命名管道配置 243
6.2.3 命名管道連接問題的解決步驟 245
6.2.4 一些常見的連接問題 246
6.3 連接失敗檢測步驟——TCP/IP 247
6.3.1 SQL Server監聽的TCP/IP端口號 248
6.3.2 客戶端的TCP/IP協議配置 249
6.3.3 TCP/IP連接的keepalive機製 251
6.3.4 配置SQL Server的keepalive配置 252
6.3.5 配置客戶端的keepalive配置 253
6.3.6 TCP/IP連接問題的解決步驟 254
6.4 一般性網絡錯誤 258
6.5 利用Ring Buffer排查連接問題 266
6.6 小結 271
第7章 身份認證與連接加密 272
7.1 SQL Server的認證方式 273
7.1.1 SQL Server認證模式和密碼管理 273
7.1.2 Windows認證模式 274
7.1.3 常見認證問題 286
7.1.4 Delegation的配置要求 288
7.2 包含數據庫認證 295
7.2.1 創建包含數據庫 296
7.2.2 使用包含數據庫認證 299
7.2.3 包含數據庫認證的安全須知 303
7.3 連接加密和證書 305
7.3.1 SQL Server的連接加密 306
7.3.2 使用證書來加密SQL Server連接 313
7.4 小結 319
第8章 數據庫空間管理 320
8.1 數據文件的空間使用和管理 321
8.1.1 數據文件存儲結構 321
8.1.2 錶存儲結構 323
8.1.3 比較存儲結構對空間使用的影響 332
8.2 日誌文件的空間使用和管理 337
8.3 空間使用計算方法 341
8.4 tempdb的空間使用 346
8.5 數據文件的收縮 353
8.6 日誌文件不停地增長 362
8.7 文件自動增長和自動收縮 367
8.8 小結 370
第9章 數據庫備份與恢復 371
9.1 備份概述 372
9.2 選擇備份策略和恢復模式 375
9.2.1 簡單恢復模式下的備份 376
9.2.2 完整恢復模式下的備份 377
9.2.3 文件或文件組備份 381
9.3 選擇數據庫還原方案 382
9.3.1 數據庫完整還原 384
9.3.2 文件還原 386
9.3.3 頁麵還原 387
9.3.4 段落還原 390
9.3.5 還原方案小結 393
9.3.6 孤立用戶故障排除 394
9.4 係統數據庫備份與恢復 395
9.4.1 master數據庫 396
9.4.2 model數據庫 397
9.4.3 msdb數據庫 397
9.4.4 tempdb和資源數據庫 398
9.5 帶有FILESTREAM功能的數據庫備份和恢復 399
9.6 應對由於備份損壞導緻的還原錯誤 401
9.7 實例:將數據庫係統在一颱新服務器上恢復 403
9.8 小結 408
第10章 數據庫損壞修復 409
10.1 常見錯誤解讀 409
10.1.1 823 409
10.1.2 824 410
10.1.3 605 412
10.1.4 其他 413
10.2 DBCC CHECKDB 414
10.2.1 DBCC CHECKDB在做什麼 414
10.2.2 DBCC CHECKDB提供的修復方法 418
10.2.3 如何在超大數據庫上運行DBCC CHECKDB 420
10.3 不同部位損壞的應對 423
10.3.1 備份文件損壞 424
10.3.2 日誌文件損壞 426
10.3.3 用戶數據文件損壞 427
10.3.4 係統數據庫損壞 431
10.4 如何從損壞的數據庫導齣數據 432
10.5 如何使用TableDiff工具發現哪些數據有丟失或改變 439
10.6 數據庫反復損壞問題應對 440
10.6.1 SQL I/O 管理操作方法 441
10.6.2 確保係統I/O正常 443
10.6.3 SQL層麵能夠做的設置 448
10.7 Database Mirroring和AlwaysOn的頁麵自動修復功能 449
10.8 小結 452
第3部分 SQL Server資源調度與性能調優
第11章 SQL Server內存分配理念和常見內存問題 454
11.1 從操作係統層麵看SQL Server內存分配 457
11.1.1 Windows的一些內存術語 457
11.1.2 32位下Windows的地址空間及AWE 460
11.1.3 Windows層麵上的內存使用檢查 463
11.1.4 內存使用和其他係統資源的關係 468
11.1.5 SQL內存使用和Windows之間的關係 470
11.1.6 SQL內存使用量陡然下降現象 472
11.1.7 案例分析 474
11.1.8 如何“閤理”配置SQL Server內存 476
11.2 SQL Server內部獨特的內存管理模式 477
11.2.1 內存使用分類 478
11.2.2 32位下各部分內存的分布和大小限製 482
11.2.3 SQL Server在不同服務器配置下各部分內存的最高使用上限 484
11.2.4 一些內存使用錯誤理解 485
11.3 SQL Server內存使用狀況分析方法 487
11.3.1 SQL性能計數器 488
11.3.2 內存動態管理視圖(DMV) 490
11.4 數據頁緩衝區壓力分析 497
11.4.1 錶現特徵 497
11.4.2 確定壓力來源和解決辦法 500
11.5 Stolen Memory緩存壓力分析 508
11.5.1 Stolen緩存區與數據頁緩存區的相互關係 509
11.5.2 內部壓力與外部壓力 510
11.5.3 錶現特徵與解決辦法 510
11.6 Multi-page緩存區壓力分析 512
11.7 常見內存錯誤與解決辦法 515
11.7.1 錯誤701 516
11.7.2 錯誤8645 520
11.7.3 SQL Server無法創建新的綫程 524
11.8 SQL Server 2012 內存管理的新變化 525
11.8.1 總體變化 527
11.8.2 AWE和LockedPages的變化 528
11.8.3 內存相關的診斷工具的變化 530
11.8.4 SQL Server 2012內存相關配置的變化 533
11.8.5 其他改變 535
11.9 小結 535
第12章 SQL Server I/O問題 537
12.1 SQL Server的I/O操作 537
12.2 係統級I/O問題判斷 544
12.3 數據庫引擎錯誤833 548
12.4 I/O問題的SQL Server內部分析 550
12.5 硬盤壓力測試 558
12.6 聖劍——Windows提供的新的底層監測功能 564
12.7 小結 570
第13章 任務調度與CPU問題 572
13.1 SQL Server獨特的任務調度算法 573
13.1.1 SQLOS的任務調度算法 575
13.1.2 任務調度健康監測及常見問題 580
13.1.3 一個內存轉儲文件的分析調試過程 583
13.1.4 案例分析 588
13.2 SQL Server CPU 100%問題 592
13.3 OLTP和Data Warehouse係統差彆及常用性能閾值 597
13.3.1 OLTP係統 597
13.3.2 Data Warehouse係統 604
13.4 小結 609
第14章 阻塞與死鎖——知識準備 611
14.1 鎖産生的背景 612
14.2 鎖資源模式和兼容性 614
14.3 事務隔離級彆與鎖的申請和釋放 618
14.4 如何監視鎖的申請、持有和釋放 628
14.4.1 檢查一個連接當前鎖持有的鎖 628
14.4.2 監視語句執行過程中SQL對鎖的申請和釋放行為 629
14.5 鎖的數量和數據庫調優的關係 630
14.5.1 一個常見的SELECT動作要申請的鎖 634
14.5.2 一個常見的UPDATE動作要申請的鎖 639
14.5.3 一個常見的DELETE動作要申請的鎖 641
14.5.4 一個常見的INSERT動作要申請的鎖 643
14.6 小結 645
第15章 阻塞與死鎖——問題定位與解決 646
15.1 阻塞問題定位方法及實例演示 647
15.2 如何捕捉不定時齣現的阻塞信息 655
15.3 常見阻塞原因與解決方法 658
15.4 案例分析:連接池與阻塞 666
15.4.1 連接池與SQL Server 666
15.4.2 正常情況下連接池在SQL Server端的處理方式 667
15.4.3 程序端意外情況下SQL Server端可能導緻的問題——應用端超時 671
15.4.4 程序端意外情況下SQL Server端可能導緻的問題——應用層事物未提交 675
15.5 死鎖問題定位及解決方法 680
15.5.1 死鎖所在的資源和檢測 680
15.5.2 問題定位 682
15.5.3 解決辦法 686
15.5.4 動手實驗 687
15.6 小結 698
第16章 從等待狀態判斷係統資源瓶頸 699
16.1 LCK_xx類型 701
16.2 PAGEIOLATCH_x與WRITELOG 702
16.3 PAGELATCH_x 704
16.4 tempdb上的PAGELATCH 708
16.5 其他資源等待 710
16.6 最後一道瓶頸:許多任務處於RUNNABLE狀態 713
16.7 小結 715
第17章 語句調優——知識準備 719
17.1 索引與統計信息 723
17.1.1 索引上的數據檢索方法 723
17.1.2 統計信息的含義與作用 727
17.1.3 統計信息的維護和更新 732
17.2 編譯與重編譯 736
17.3 讀懂執行計劃 750
17.3.1 連接 754
17.3.2 其他常見的運算操作 762
17.4 讀懂語句運行統計信息 765
17.4.1 Set statistics time on 766
17.4.2 Set statistics io on 768
17.4.3 Set statistics profile on 770
17.5 小結 775
第18章 語句調優——問題定位與解決方法 776
18.1 是否是因為做瞭物理I/O而導緻的性能不佳 777
18.2 是否是因為編譯時間長而導緻性能不佳 780
18.3 判斷執行計劃是否閤適 784
18.3.1 預估cost的準確性 784
18.3.2 是Index Seek還是Table Scan 790
18.3.3 是Nested Loops還是Hash (Merge) Join 794
18.3.4 filter運算的位置 795
18.3.5 確認問題産生的原因 798
18.4 Parameter Sniffing 800
18.4.1 什麼是“Parameter Sniffing” 801
18.4.2 本地變量的影響 802
18.4.3 Parameter Sniffing的解決方案 804
18.5 調整數據庫設計來優化語句性能 814
18.5.1 調整索引 814
18.5.2 計劃指南 821
18.6 調整語句設計提高性能 829
18.6.1 篩選條件與計算字段 829
18.6.2 會在運行前改變值的變量 832
18.6.3 臨時錶和錶變量 834
18.6.4 盡可能限定語句的復雜度 836
18.7 小結 838
第4部分 SQL Server常用日誌信息與推薦搜集方法
第19章 SQL Server常用日誌信息與推薦搜集方法 840
19.1 Windows事件日誌 841
19.2 SQL Server errorlog文件 843
19.3 性能監視器 845
19.4 SQL Trace文件 851
19.4.1 SQL Trace文件的收集方法 851
19.4.2 SQL Trace文件的分析方法 860
19.4.3 自動化分析SQL Trace 862
19.5 係統管理視圖跟蹤 866
19.6 SQLDIAG工具 868
19.7 強烈推薦:PSSDIAG工具 873
19.7.1 使用PSSDIAG收集信息 874
19.7.2 自動化分析PSSDIAG收集的信息 876
19.8 係統自動監視工具——Performance Dashboard 879
19.9 小結 882
· · · · · · (
收起)