SQL Server On Linux 運維實戰
內容描述
隨著微軟公司的開源策略逐步深化,其數據庫拳頭產品SQL Server不僅能運行在Windows平臺上,經過一系列產品迭代,還能穩定地運行在主流的Linux平臺中,並且越來越受到企業的認同。為了跟上時代的步伐,從業者有必要盡快掌握Linux上的SQL Server的使用方法。
本書屬於入門級別的技術圖書,主要面向對微軟SQL Server有初步認識,並且希望掌握在Linux上的SQL Server運維及性能優化的數據庫從業人員。當然,本書也適合在校學生學習使用,以便為後續就業打下良好的基礎。
本書以實操為主,講解了在Linux上SQL Server的安裝、配置、監控及高可用搭建等內容,同時融入了作者10年工作經歷中總結的Linux及SQL Server性能優化的經驗,以協助讀者更快入門。
本書包括基礎篇、管理篇、性能篇、架構篇、案例篇共計5大板塊,每個板塊包括若乾章內容,每章力求講清楚、講透一個技術點。在寫作本書時,作者不僅關註本書的系統性,同時還關註本書的實用性,力求使本書能成為大家經常翻閱的工具書。書中的案例均來自實踐,希望對讀者學習書中的知識點及體會作者的運維、優化思想有所幫助。
目錄大綱
第1篇基礎篇
第1章SQL Server On Linux簡介2
1.1為何選擇Linux平台的SQL Server 2
1.2 SQL Server關鍵組件簡介4
1.3 SQL Server On Linux新特性簡介6
1.3.1數據庫引擎6
1.3.2 SQL Server Integration Services 8
1.3.3機器學習8
1.3.4兼容Linux平台9
1.3.5其他9
1.4 SQL Server On Linux新玩法9
1.5 SQL Platform Abstraction Layer 10
1.5.1 PAL簡介10
1.5.2進程模型12
1.5.3小結12
1.6本書結構13
1.7總結14
第2章Linux基礎及安裝部署15
2.1背景介紹15
2.2前期規劃17
2.3基礎框架19
2.4部署20
2.4.1服務器命名及配置21
2.4.2安裝過程21
2.5預配置43
2.5.1查看當前IP地址44
2.5.2檢查網絡連通性45
2.5.3遠程登錄46
2.6總結48
第3章安裝配置SQL Server On Linux 49
3.1安裝前的準備工作49
3.2安裝攻略50
3.2.1操作系統環境檢查51
3.2.2安裝SQL Server 53
3.2.3驗證安裝55
3.2.4安裝SQL Server命令行工具56
3.2.5嘗試使用58
3.3環境配置59
3.3.1更新/卸載/重裝SQL Server 60
3.3.2檢查配置存儲庫信息65
3.3.3安裝SQL Server代理67
3.3.4 SQL Server實例配置68
3.4注意事項78
3.5安裝示例數據庫79
3.5.1下載備份文件79
3.5.2移動文件82
3.6總結83
第2篇管理篇
第4章Linux基礎運維86
4.1常用指令86
4.1.1文件或目錄86
4.1.2編輯或查看指令88
4.1.3網絡相關95
4.1.4系統層面98
4.1.5其他雜項104
4.2基礎運維106
4.2.1服務部署106
4.2.2指標115
4.2.3安全122
4.2.4調優130
4.2.5 Shell入門135
4.3總結143
第5章Linux基礎監控144
5.1分佈式監控系統Zabbix 145
5.1.1安裝服務端145
5.1.2安裝配置客戶端149
5.1.3告警設置154
5.2 Grafana展現162
5.2.1部署162
5.2.2數據源選擇163
5.2.3豐富的面板167
5.2.4定制170
5.3 SQL Server監控175
5.4總結180
第6章服務及空間管理181
6.1服務器的服務及空間管理181
6.1.1 Windows服務及空間管理181
6.1.2 Linux服務及空間管理184
6.1.3小結187
6.2 SQL Server服務及空間管理188
6.2 .1 SQL Server服務管理188
6.2.2 SQL Server空間管理191
6.3 SQL On Linux備份還原198
6.3.1數據庫備份199
6.3.2數據庫還原203
6.3.3數據庫備份還原新用法207
6.4總結207
第7章SQL Server On Linux數據庫安全208
7.1安全概念208
7.2始終加密209
7.2.1 AE簡介209
7.2.2 AE演示209
7.2. 3創建密鑰214
7.2.4小結216
7.3動態數據屏蔽216
7.3.1 DDM簡介217
7.3.2 DDM屏蔽規則217
7.3.3 DDM演示217
7.3.4 DDM性能與安全219
7.4行級安全性221
7.4. 1 RLS演示221
7.4.2小結223
7.5時態表223
7.5.1 SQL Server時態表224
7.5.2 SQL Server時態表的演示224
7.6總結228
第8章Linux自動化運維演示229
8.1 expect 229
8.1 .1 Shell中的expect 229
8.1.2 Python模塊中的pexpect 231
8.1.3 Python模塊中的paramiko 233
8.1.4小結234
8.2 Ansible入門234
8.2.1安裝部署234
8.2.2基本操作237
8.2.3進階238
8.2.4架構圖及架構說明239
8.3總結240
第9章數據庫監控241
9.1監控理論241
9.1.1監控的內容和目的242
9.1.2監控的方法/流程244
9.1.3監控的意義245
9.1.4小結246
9.2監控工具246
9.2.1 SQL跟踪247
9.2.2擴展事件248
9.2.3動態管理視圖/動態管理函數248
9.2.4性能計數器及數據收集器集248
9.2.5 SQL Server新工具254
9.2.6專家工具255
9.2.7傳統工具257
9.2.8使用方法257
9.3監控分析258
9.4監控展示258
9.5總結260
第3篇性能篇
第10章SQL Server性能優化方法論262
10.1性能簡介262
10.2性能優化的誤區263
10.3常見影響因素265
10.3.1應用程序的體系結構265
10.3.2應用程序設計265
10.3.3數據庫設計266
10.3.4事務和隔離級別266
10.3.5 T-SQL編碼266
10.3.6硬件資源及部署267
10.3.7 SQL Server配置267
10.4常規性能優化流程269
10.5擴充閱讀270
10.6優化Checklist 271
10.6.1數據庫設計271
10.6.2語句設計271
10.6.3配置272
10.7總結272
第11章SQL Server On Linux故障偵測273
11.1 SQL Server查詢生命週期273
11.1.1查詢優化和執行273
11.1.2小結282
11.2常用故障偵測手段282
11.2.1擴展事件282
11.2.2常規偵測手段288
11.2.3查詢存儲289
11.3總結294
第12章SQL Server性能優化新工具295
12.1簡介295
12.2查詢存儲295
12.2.1查詢存儲中的信息296
12.2.2查詢存儲包含的內容296
12.2.3何時使用查詢存儲299
12.2.4查詢存儲最佳實踐302
12.3自動優化303
12.3.1自動優化的工作原理303
12.3.2自動計劃更正304
12.3.3自動優化的演示304
12.4自適應查詢處理308
12.4.1舊式優化行為308
12.4.2新式優化行為308
12.5實時查詢統計信息316
12.6總結318
第13章SQL Server索引優化319
13.1簡介319
13.2索引基礎320
13.2.1索引目標320
13.2.2索引組織和分類320
13.2.3索引術語322
13.2.4索引訪問方式322
13.2.5 SARG 323
13.2.6列存儲索引324
13.3統計信息基礎329
13.3.1查找關於索引的信息329
13.3.2簡要說明331
13.3 .3常規建議331
13.4索引種類332
13.4.1堆表332
13.4.2聚集索引332
13.4.3非聚集索引332
13.4.4其他索引類型332
13.4.5索引變種332
13.5索引分析與優化333
13.5.1問題隔離333
13.5.2索引問題分類334
13.5.3索引優化335
13.6索引建議346
13.6.1索引誤區346
13.6.2索引維護建議347
13.7總結347
第14章SQL Server等待信息348
14.1我們在等待什麼348
14.2簡介349
14.2.1等待的含義349
14.2.2需要等待信息的原因350
14.2.3保存等待信息350
14.3等待信息元數據351
14.4並行執行351
14.4.1 CXPACKET 352
14.4.2 CXPACKET的潛在問題353
14.4.3降低CXPACKET等待353
14.4.4 CXPACKET深度分析354
14.4.5 CXPACKET建議354
14.5多任務等待355
14.5.1 SOS_SCHEDULER_YIELD 355
14.5.2多任務類型357
14.5.3多任務潛在問題358
14.5.4降低多任務等待358
14.6 I/O等待358
14.7備份和還原等待362
14.8鎖定等待362
14.9數據庫日誌等待364
14.9.1 WRITELOG等待364
14.9.2降低WRITELOG等待364
14.9.3擴充說明364
14.9.4 Logbuffer等待365
14.9.5 Logbuffer的潛在問題365
14.9. 6降低Logbuffer等待366
14.10外部資源等待366
14.10.1 MSSQL_XP等待366
14.10.2降低MSSQL_XP等待366
14.10.3 OLEDB鏈接服務器等待366
14.10.4降低OLEDB等待366
14.10.5 OLEDB擴展說明367
14.11其他常見等待類型367
14.11.1 RESOURCE_SEMAPHORE 367
14.11.2 THREADPOOL 367
14.11.3 PAGELATCH_XX 367
14.11.4 ACCESS_METHOD_XX 367
14.11.5 FGCB_ADD_REMOVE閂鎖368
14.11.6 DBCC_XX 368
14.11.7 Miscellaneous 368
14.12案例368
14.13總結369
第15章事務與阻塞370
15.1環境準備和術語介紹370
15.1.1環境準備370
15.1.2術語371
15.2事務與ACID 371
15.2.1事務隔離級別和數據一致性372
15.2.2鎖類型373
15.2.3鎖演示374
15.3阻塞378
15.3.1阻塞演示378
15.3.2阻塞偵測方法378
15.3.3阻塞信息實時偵測379
15.3.4阻塞信息收集383
15.4死鎖385
15.4.1死鎖演示386
15.4.2死鎖偵測388
15.4.3降低死鎖概率389
15.5鎖升級389
15.5.1鎖升級概述389
15.5.2鎖升級偵測390
15.6事務設計建議392
15.7總結394
第16章In-Memory OLTP簡介395
16.1案例演示395
16.2技術簡介398
16.2.1術語簡介398
16.2.2 In-Memory的目標398
16.2.3體系結構399
16.2.4內存優化表索引400
16.3快速上手401
16.3.1創建數據庫401
16.3.2創建表402
16.3.3 Natively Compiled存儲過程403
16.3.4 Interpreted T-SQL 404
16.4注意事項405
16.5最佳實踐407
16.5.1索引優化407
16.5.2其他建議408
16.6總結408
第4篇架構篇
第17章SQL Server On Linux高可用介紹410
17.1簡介410
17.1.1使用AlwaysON的優點410
17.1.2 Linux上的AlwaysON可用性組411
17.1.3環境準備412
17.2安裝過程413
17.2.1創建AG 413
17.2.2配置集群管理器Pacemaker 422
17.3警報427
17.4讀寫分離432
17.5常見故障偵測手段435
17.5.1 AlwaysON的常見問題435
17.5.2參考工具436
17.6總結438
第5篇案例篇
第18章Linux運維案例440
18.1被黑440
18.2內存溢出445
18.3打開過多文件446
18.4從刪庫到“跑路” 448
18.5總結450
第19章數據庫運維案例451
19.1簡介451
19.2案例分享451
19.3其他案例456
19.4總結458
附錄
附錄A SQL Server DBA及Linux管理員面試題分析460
附錄B DBA與Linux管理Checklist 464
附錄C SQL Server表關聯細節468
附錄D Linux內核參數說明471
作者介紹
黃釗吉
10年SQL Server開發和運維經驗,從事過電子商務網站後台開發、銀行績效系統數據庫開發,以及服飾類ERP系統、信用卡系統(基於AWS)和大型電商倉儲系統數據庫的運維工作。6屆微軟數據平台MVP(2013-2018),前CSDN論壇SQL Server大版版主,CSDN博客專家,博客訪問量超過228萬。個人創作圖書《SQL Server性能優化與管理的藝術》,與人聯合翻譯《Windows PowerShell實戰指南(第2版)》。擁有MCTIP Database Administrator 2008、MCSE Data Management and Analytics等多個技術認證證書。
熊章立
9年Linux和MySQL專職運維經驗,曾獨立設計運維自動化平台方案並負責實施,擁有高達900台服務器的運維經驗,從事過汽車租賃、遊戲、物流等多個行業,目前是WMS、 OMS物流行業的DBA,負責數據庫運維管理、設計及基於Python開發相關的功能組件,並關注第三方開源監控軟件的落地及後續開發工作。