本書的最大特點是實戰。系統地以實戰方式對SQL Server 2012 關聯式資料庫
新功能、新技術,進行全面介紹。同時,對於管理SQL Server 中可能遇到的困難、重點也有深入的剖析。討論的主題都是資料庫系統管理和開發人員,在企業開發資料庫應用和使用SQL Server 過程中常見的經典真實案例。透過本書可以更深入地了解SQL Server 的原理和執行規律,以加強本身解決問題的能力;或做為本遇到問題時隨時查閱解決辦法的工具書。
作者簡介:
徐海蔚 2000年加入微軟亞太區全球技術支援中心企業支援部資料庫開發支援組。一直專注SQLServer的高端技術,先後擔任支援工程師、技術主管和部門經理。擅長處理SQLServer企業應用實施、性能優化和日常管理中的棘手問題,經驗豐富。
王佳毅 微軟亞太區全球技術支援中心企業支援部資料庫開發支援組資深支援專家。負責SQL Server2000/2005/2008/2008R2/2012的技術工作。專注于SQLServer的高可用性方案部署、系統的穩定性維護及性能優化等,是實作經驗豐富的專家級工程師。
朱樺 現任微軟資料庫技術支援組技術主管。在SQLServer的高可用性解決方案、連接認證、安全保護和性能優化等領域,有非常豐富的經驗。微軟SQL Server2012內部講師,對於SQL Server 2012有極深刻的認知和瞭解。
俞榕剛 微軟亞太區全球技術支援中心資料庫開發支援組技術支援專家。對SQLServer產品瞭解透徹,擅長SQLServer用戶端程式設計、性能瓶頸和語句優化、安裝和升級、群集、鏡像、日誌傳輸。曾為上千個客戶提供技術支援,獲得極高評價。
各界推薦
名人推薦:
推薦序一
SQL Server 2012 是微軟新一代資料庫產品,從產品經理的角度,我很希望廣大的資料庫管理和開發人員能夠系統化而且充分地使用到SQL Server 那些激動人心的新功能,進一步讓SQL Server 更好、更高效率地幫助和支援資料庫管理與開發人員的日常工作。
這本書是華文地區第一本系統地以實戰方式對SQL Server 2012 關聯式資料庫新功能、新技術進行全面介紹的專業書籍。同時,對於管理SQL Server 中可能遇到的困難重點也有深入的剖析。
在很多不同的場合,已經使用或想要使用SQL Server 的使用者會對我說,SQLServer 易於安裝與使用,管理維護非常簡單。我非常高興看到SQL Server 中方便好用的功能與工具能夠很快上手,但是通常這種認知也會使用SQL Server 時帶來一些問題。因為認為SQL Server 簡單,就忽略了對資料庫設計、最佳化以及維護的深入思考和研究,在應用或資料庫有異常時就會束手無策。在這種場景下,我非常想推薦這本書作為實用的參考手冊,在遇到大多數SQL Server 疑難問題的時候,在這本書裡面都可以找到答案。
我花了一些時間仔細地閱讀了這本書,與一些產品類書籍不同,這本書不是一本讓您讀起來索然無味的產品功能介紹,也不是讓您讀起來昏昏欲睡的中文譯本。從這本書裡,我們能夠看到作者身為最資深的SQL Server 專家之一,十幾年在SQL Server 上豐富的經驗累積和歸納。這本書無論是通讀還是作為工具書,任何一個資料庫管理員都可以從中獲得對資料庫管理工作的支援和幫助。
作為作者多年的同事與朋友,我們十幾年來與SQL Server 共同成長,對SQLServer 具有深厚的感情,我們深深地喜愛SQL Server,也衷心希望SQL Server能夠助力您的業務快速成長。
非常感謝作者團隊對SQL Server 知識與經驗的分享,也希望我們可以一起繼續努力,讓SQL Server 能夠為更多的人所熟知與喜愛。
郝雪瑩
SQL Server 進階產品市場經理
推薦序二
聽說作者很久了,在工作上也有很多交集:郵件、電話,但是真正坐下聊天卻沒有機會。這次聽說作者再次出書,也很為她高興。
業餘寫書是很不容易的一件事,除了時間的壓力,更需要的是持之以恆的毅力。個人也嘗試過一次,結果是不了了之。所以對作者十分佩服,工作、家庭、寫作能夠平衡,且都不耽誤,絕對是超人的表現!
做了將近20 年的資料庫,看過的案例,尤其是問題案例,大部分的根源是一些很基本的設計失誤。而這些失誤,大部分是由於缺乏資料庫設計知識及經驗。這些知識經驗,剛好需要長期的學習、實作。隨著巨量資料時代的來臨,資料量的爆發、應用的普及,對資料應用人才要求更高、更廣、更深,資料庫管理開發方面的知識普及尤其重要!
拜讀了作者團隊的新書,感覺角度不同,應該也會給讀者不同的學習體驗。看過許多關於SQL Server 的書,英文的、中文的,好書不多,大部分都是不同版本的產品說明書。作者多年在技術支援第一線解決問題的經驗,在書中獲得很好的表現。作者團隊打造的這本新書,不僅僅介紹了SQL Server 的新技術,更有許多針對使用者常見的問題列出的可實現的技術方案。這本書,不僅僅傳播了SQL Server 及資料庫設計的理念、技術,更重要的是分享了作者多年的實作累積。
在微軟多年,看著SQL Server 從部門級產品成長到現在的企業平台級平台,也深有感觸。產品本身功能的提升很重要,但是整個生態環境的成熟也是不可缺的一部分,知識的普及是整個生態鏈中最重要的環節之一。
衷心感謝作者及團隊透過這部好書帶給大家的經驗分享,也預祝這本書發行成
功!
殷皓(Howard H. Yin)
微軟大中國區企業服務部首席技術官
前微軟SQL Server 產品開發組全球客戶諮詢組(SQL CAT)首席技術經理
名人推薦:推薦序一
SQL Server 2012 是微軟新一代資料庫產品,從產品經理的角度,我很希望廣大的資料庫管理和開發人員能夠系統化而且充分地使用到SQL Server 那些激動人心的新功能,進一步讓SQL Server 更好、更高效率地幫助和支援資料庫管理與開發人員的日常工作。
這本書是華文地區第一本系統地以實戰方式對SQL Server 2012 關聯式資料庫新功能、新技術進行全面介紹的專業書籍。同時,對於管理SQL Server 中可能遇到的困難重點也有深入的剖析。
在很多不同的場合,已經使用或想要使用SQL Server 的使用者會對我說,SQLServer 易於安...
目錄
第一部份 資料庫系統的選型和部署資料庫系統的選型和部署
Chapter 01 SQL Server 的安裝和升級
1.1 資料庫安裝過程介紹
1.1.1 setup.exe 執行過程
1.1.2 重要的資料庫的安裝記錄檔
1.2 單機版本的資料庫安裝和系統更新
1.2.1 安裝注意事項
1.2.2 用SlipStream 方式進行安裝
1.2.3 用Product Update 方式進行安裝
1.2.4 常見安裝問題
1.3 特殊版本的資料庫安裝
1.4 叢集環境下資料庫的安裝和升級
1.5 資料庫的升級
1.6 小結
Chapter 02 選擇必要的高可用性和災難恢復技術
2.1 什麼是SQL Server 的「高可用性」與「災難恢復」
2.2 SQL Server 容錯移轉叢集
2.2.1 Windows 容錯移轉叢集
2.2.2 SQL Server 容錯移轉叢集
2.2.3 SQL Server 叢集什麼時候會發生「容錯移轉」
2.2.4 SQL Server 叢集的拓撲結構
2.2.5 SQL 2012 對容錯移轉叢集的改進
2.2.6 容錯移轉叢集的故障排除
2.3 記錄檔傳送
2.3.1 記錄檔傳送的結構
2.3.2 記錄檔傳送的工作機制
2.3.3 記錄檔傳送作業的執行間隔
2.3.4 記錄檔傳送的容錯移轉
2.3.5 記錄檔傳送的監控和故障排除
2.4 資料庫鏡像
2.4.1 資料庫鏡像的基本概念
2.4.2 資料庫鏡像操作模式
2.4.3 用戶端連接重新導向及逾時控制
2.4.4 資料庫鏡像的監控和故障排除
2.5 複製
2.5.1 複製的基本概念
2.5.2 複製的類型
2.5.3 災難恢復和複製
2.6 高可用和災難恢復技術的選擇
2.6.1 高可用和災難恢復技術的比較
2.6.2 高可用和災難恢復技術的組合
2.7 小結
Chapter 03 新一代的高可用技術AlwaysOn
3.1 AlwaysOn 的基本架構
3.2 AlwaysOn 的資料同步原理
3.3 AlwaysOn 的可用性模式
3.4 AlwaysOn 的容錯移轉形式
3.5 建立一個AlwaysOn 可用性群組
3.6 讀取的次要資料庫
3.7 監視AlwaysOn 可用性群組的執行狀態
3.8 小結
Chapter 04 資料庫連接元件程式設計機制
4.1 資料庫應用程式設計方法概述和元件架構
4.1.1 WDAC 程式設計
4.1.2 SNAC 程式設計
4.1.3 ADO.NET 程式設計
4.2 連接字串
4.3 連接池
4.4 Connection Timeout 和Command Timeout
4.5 使用BID Tracing 來追蹤檢查應用程式的執行
4.6 小結
第二部份 SQL Server 日常管理
Chapter 05 啟動SQL Server 服務和資料庫
5.1 SQL Server 服務啟動步驟
5.1.1 從登錄檔讀取SQL Server 啟動資訊
5.1.2 檢測硬體,設定記憶體與CPU
5.1.3 資料庫啟動
5.1.4 準備網路連接
5.2 資料庫狀態切換
5.3 資料庫長時間處於RECOVERING 狀態
5.4 資料庫不能啟動的常見原因和解決辦法
5.4.1 master 資料庫不能啟動
5.4.2 資來源資料庫
5.4.3 model 資料庫
5.4.4 tempdb 資料庫
5.4.5 使用者資料庫
5.5 叢集環境下,資料庫資源不能ONLINE 的常見原因
5.5.1 由於單機原因導致資料庫服務無法啟動
5.5.2 由於SQL Server 所依賴的資源失敗所導致
5.5.3 由於叢集服務無法連接導致資料庫資源失敗
5.6 小結
Chapter 06 連接的建立和問題排除
6.1 協定的選擇與別名
6.1.1 伺服器網路設定
6.1.2 SQL Server Browser 的作用
6.1.3 用戶端網路設定
6.1.4 用戶端網路連接選擇機制
6.2 連接失敗檢測步驟 —— 具名管線
6.2.1 SQL Server 具名管線工作原理
6.2.2 用戶端的具名管線設定
6.2.3 具名管線連接問題的解決步驟
6.2.4 一些常見的連接問題
6.3 連接失敗檢測步驟 —— TCP/IP
6.3.1 SQL Server 監聽的TCP/IP 通訊埠號
6.3.2 用戶端的TCP/IP 協定設定
6.3.3 TCP/IP 連接的keepalive 機制
6.3.4 設定SQL Server 的keepalive 設定
6.3.5 設定用戶端的keepalive 設定
6.3.6 TCP/IP 連接問題的解決步驟
6.4 一般性網路錯誤
6.5 利用Ring Buffer 排除連接問題
6.6 小結
Chapter 07 身份認證與連接加密
7.1 SQL Server 的認證方式
7.1.1 SQL Server 認證模式和密碼管理
7.1.2 Windows 認證模式
7.1.3 常見認證問題
7.1.4 Delegation 的設定要求
7.2 包含資料庫認證
7.2.1 建立包含資料庫
7.2.2 使用包含資料庫認證
7.2.3 包含資料庫認證的安全須知
7.3 連接加密和憑證
7.3.1 SQL Server 的連接加密
7.3.2 使用憑證來加密SQL Server 連接
7.4 小結
Chapter 08 資料庫空間管理
8.1 資料檔案的空間使用和管理
8.1.1 資料檔案儲存結構
8.1.2 表儲存結構
8.1.3 比較儲存結構對空間使用的影響
8.2 記錄檔的空間使用和管理
8.3 空間使用計算方法
8.4 tempdb 的空間使用
8.5 資料檔案的收縮
8.6 記錄檔不停地增長
8.7 檔案自動增長和自動收縮
8.8 小結
Chapter 09 資料庫備份與恢復
9.1 備份概述
9.2 選擇備份策略和復原模式
9.2.1 簡單復原模式下的備份
9.2.2 完整復原模式下的備份
9.2.3 檔案或檔案群組備份
9.3 選擇資料庫還原方案
9.3.1 資料庫完整還原
9.3.2 檔案還原
9.3.3 分頁還原
9.3.4 段落還原
9.3.5 還原方案小結
9.3.6 孤立使用者故障排除
9.4 系統資料庫備份與恢復
9.4.1 master 資料庫
9.4.2 model 資料庫
9.4.3 msdb 資料庫
9.4.4 tempdb 和資來源資料庫
9.5 帶有FILESTREAM 功能的資料庫備份和恢復
9.6 應對由於備份損壞導致的還原錯誤
9.7 實例:將資料庫系統在一台新伺服器上恢復
9.8 小結
Chapter 10 資料庫損壞修復
10.1 常見錯誤解讀
10.1.1 823
10.1.2 824
10.1.3 605
10.1.4 其他
10.2 DBCC CHECKDB
10.2.1 DBCC CHECKDB 在做什麼
10.2.2 DBCC CHECKDB 提供的修復方法
10.2.3 如何在超巨量資料庫上執行DBCC CHECKDB
10.3 不同部位損壞的應對
10.3.1 備份檔案損壞
10.3.2 記錄檔損壞
10.3.3 使用者資料檔案損壞
10.3.4 系統資料庫損壞
10.4 如何從損壞的資料庫匯出資料
10.5 如何使用TableDiff 工具發現哪些資料有遺失或改變
10.6 資料庫反覆損壞問題應對
10.6.1 SQL I/O 管理操作方法
10.6.2 確保系統I/O 正常
10.6.3 SQL 層面能夠做的設定
10.7 Database Mirroring 和AlwaysOn 的頁面自動修復功能
10.8 小結
第三部份 SQL Server 資源分派與效能最佳化
Chapter 11 SQL Server 記憶體分配理念和常見記憶體問題
11.1 從作業系統層面看SQL Server 記憶體分配
11.1.1 Windows 的一些記憶體術語
11.1.2 32 位元下Windows 的位址空間及AWE
11.1.3 Windows 層面上的記憶體使用檢查
11.1.4 記憶體使用和其他系統資源的關係
11.1.5 SQL 記憶體使用和Windows 之間的關係
11.1.6 SQL 記憶體使用量陡然下降現象
11.1.7 案例分析
11.1.8 如何「合理」設定SQL Server 記憶體
11.2 SQL Server 內部獨特的記憶體管理模式
11.2.1 記憶體使用分類
11.2.2 32 位元下各部分記憶體的分佈和大小限制
11.2.3 SQL Server 在不同伺服器設定下各部分記憶體的最高使用上限制
11.2.4 一些記憶體使用錯誤了解
11.3 SQL Server 記憶體使用狀況分析方法
11.3.1 SQL 效能計數器
11.3.2 記憶體動態管理視圖(DMV)
11.4 資料頁緩衝區壓力分析
11.4.1 表現特徵
11.4.2 確定壓力來源和解決辦法
11.4.3 如何發現記憶體使用比較多的敘述
11.5 Stolen Memory 快取壓力分析
11.5.1 Stolen 快取區與資料頁快取區的相互關係
11.5.2 內部壓力與外部壓力
11.5.3 表現特徵與解決辦法
11.6 Multi-page 快取區壓力分析
11.7 常見記憶體錯誤與解決辦法
11.7.1 錯誤701
11.7.2 錯誤8645
11.7.3 SQL Server 無法建立新的執行緒
11.8 SQL Server 2012 記憶體管理的新變化
11.8.1 整體變化
11.8.2 AWE 和LockedPages 的變化
11.8.3 記憶體相關的診斷工具的變化
11.8.4 SQL Server 2012 記憶體相關設定的變化
11.8.5 其他改變
11.9 小結
Chapter 12 SQL Server I/O 問題
12.1 SQL Server 的I/O 操作
12.2 系統級I/O 問題判斷
12.3 資料庫引擎錯誤833
12.4 I/O 問題的SQL Server 內部分析
12.5 硬碟壓力測試
12.6 聖劍 — Windows 提供的新的底層監測功能
12.7 小結
Chapter 13 工作排程與CPU 問題
13.1 SQL Server 獨特的工作排程演算法
13.1.1 SQLOS 的工作排程演算法
13.1.2 工作排程健康監測及常見問題
13.1.3 一個記憶體傾印檔案的分析偵錯過程
13.1.4 案例分析
13.2 SQL Server CPU 100%問題
13.3 OLTP 和Data Warehouse 系統差別及常用效能設定值
13.3.1 OLTP 系統
13.3.2 Data Warehouse 系統
13.4 小結
Chapter 14 阻塞與鎖死 —— 知識準備
14.1 鎖產生的背景
14.2 鎖資源模式和相容性
14.3 交易隔離等級與鎖的申請和釋放
14.4 如何監視鎖的申請、持有和釋放
14.4.1 檢查一個連接目前鎖持有的鎖
14.4.2 監視敘述執行過程中SQL 對鎖的申請和釋放行為
14.5 鎖的數量和資料庫最佳化的關係
14.5.1 一個常見的SELECT 動作要申請的鎖
14.5.2 一個常見的UPDATE 動作要申請的鎖
14.5.3 一個常見的DELETE 動作要申請的鎖
14.5.4 一個常見的INSERT 動作要申請的鎖
14.6 小結
Chapter 15 阻塞與鎖死 —— 問題定位與解決
15.1 阻塞問題定位方法及實例示範
15.2 如何捕捉不定時出現的阻塞資訊
15.3 常見阻塞原因與解決方法
15.4 案例分析:連接池與阻塞
15.4.1 連接池與SQL Server
15.4.2 正常情況下連接池在SQL Server 端的處理方式
15.4.3 程式端意外情況下SQL Server 端可能導致的問題-- 應用端逾時
15.4.4 程式端意外情況下SQL Server 端可能導致的問題-- 應用層事物
未傳送
15.5 鎖死問題定位及解決方法
15.5.1 鎖死所在的資源和檢測
15.5.2 問題定位
15.5.3 解決辦法
15.5.4 動手實驗
15.6 小結
Chapter 16 從等候狀態判斷系統資源瓶頸
16.1 LCK_xx 類型
16.2 PAGEIOLATCH_x 與WRITELOG
16.3 PAGELATCH_x
16.4 tempdb 上的PAGELATCH
16.5 其他資源等待
16.6 最後一道瓶頸:許多工作處於RUNNABLE 狀態
16.7 小結
Chapter 17 敘述最佳化 — 知識準備
17.1 索引與統計資訊
17.1.1 索引上的資料檢索方法
17.1.2 統計資訊的含義與作用
17.1.3 統計資訊的維護和更新
17.2 編譯與重編譯
17.3 讀懂執行計畫
17.3.1 連接
17.3.2 其他常見的運算操作
17.4 讀懂敘述執行統計資訊
17.4.1 Set statistics time on
17.4.2 Set statistics io on
17.4.3 Set statistics profile on
17.5 小結
Chapter 18 敘述最佳化 — 問題定位與解決方法
18.1 是否是因為做了實體I/O 而導致的效能不佳
18.2 是否是因為編譯時間長而導致效能不佳
18.3 判斷執行計畫是否合適
18.3.1 預估cost 的準確性
18.3.2 是Index Seek 還是Table Scan
18.3.3 是Nested Loops 還是Hash (Merge) Join
18.3.4 filter 運算的位置
18.3.5 確認問題產生的原因
18.4 Parameter Sniffing
18.4.1 什麼是"Parameter Sniffing"
18.4.2 本機變數的影響
18.4.3 Parameter Sniffing 的解決方案
18.5 調整資料庫設計來最佳化敘述效能
18.5.1 調整索引
18.5.2 計畫指南
18.6 調整敘述設計提高性能
18.6.1 篩選條件與計算欄位
18.6.2 會在執行前改變值的變數
18.6.3 臨時表和表變數
18.6.4 盡可能限定敘述的複雜度
18.7 小結
第四部份 SQL Server 常用記錄檔資訊與推薦搜集方法
Chapter 19 SQL Server 常用記錄檔資訊與推薦搜集方法
19.1 Windows 事件記錄檔
19.2 SQL Server errorlog 檔案
19.3 效能監視器
19.4 SQL Trace 檔案
19.4.1 SQL Trace 檔案的收集方法
19.4.2 SQL Trace 檔案的分析方法
19.4.3 自動化分析SQL Trace
19.5 系統管理視圖追蹤
19.6 SQLDIAG 工具
19.7 強烈推薦:PSSDIAG 工具
19.7.1 使用PSSDIAG 收集資訊
19.7.2 自動化分析PSSDIAG 收集的資訊
19.8 系統自動監視工具 —— Performance Dashboard
19.9 小結
第一部份 資料庫系統的選型和部署資料庫系統的選型和部署
Chapter 01 SQL Server 的安裝和升級
1.1 資料庫安裝過程介紹
1.1.1 setup.exe 執行過程
1.1.2 重要的資料庫的安裝記錄檔
1.2 單機版本的資料庫安裝和系統更新
1.2.1 安裝注意事項
1.2.2 用SlipStream 方式進行安裝
1.2.3 用Product Update 方式進行安裝
1.2.4 常見安裝問題
1.3 特殊版本的資料庫安裝
1.4 叢集環境下資料庫的安裝和升級
1.5 資料庫的升級
1.6 小結
Chapter 02 選擇必要的高可用性和災難恢復技術
2.1 什麼是SQL Server 的「高可用...