Rico Chen https://medium.com/ricos-note 版權所有,請勿非法複製、散佈
關於作者
連續 8 年當選微軟最有價值專家,業界實務經歷超過 10 年,撰寫技術部落格超
過 14 年,至今依然協助企業帶領技術研發團隊並將商業價值完美落地。
擅長使用.NET/NetCore 技術開發 Web/OLTP 系統,並熟悉分散式架構設計
實作、程式碼重構和效能調校,也熟悉 SQL Server 應用開發、架構設計、效能
調校和管理,幫助許多企業從無到有規劃設計並開發核心系統、核心系統架構
改造升級、核心系統效能調校,並針對企業開發人員或 DBA 進行教育訓練,也
擁有多年大型資料庫效能調校教學經驗。
曾任企業資深架構師、RD 經理、技術經理、資深研發工程師、專案經理、資深
技術顧問、資深 DBA,微軟 SQL Server 研討會講師、Udemy 線上講師、SQL
Pass 社群講師、RunPC(CIO 前身)技術專欄作家。
可以透過下列管道得知作者最新動態
個人部落格 : https://medium.com/ricos-note
個人所有線上課程 : https://www.udemy.com/user/ricochen-2/
個人所有線上電子書 : https://www.pubu.com.tw/store/riconote
RiCo 技術農場 FB 專頁 : https://www.facebook.com/2hsinglan
Rico Chen https://medium.com/ricos-note 版權所有,請勿非法複製、散佈
RiCo 技術農場 YT 專頁 :
https://www.youtube.com/channel/UC75zzlrlmDPESe9G-WxfK0A
書寫慣例
由於 SQL Server 是國外軟體,所以有些術語第一次我將中英文並呈,後續再碰
到一樣術語時,大部分會直接使用英文,主要是要提高閱讀順暢度,例如
Context Switch 翻成工作內容/上下文切換或 Session 翻成會話都有點卡卡,有
些讀者甚至會停下思考並反覆閱讀前後內容才能明白了解,另外,我建議讀者
也都使用英文版 SQL Server 及相關管理工具(SSMS),避免中文翻譯造成更大
困惑。
本書內容也會補充一些相關資料,有些是簡單用(sidebar)圈住,有些則會用不
同圖案標記,下面是幾個常用圖案:
 這是筆者個人見解或額外補充說明
 這是補充相關資訊或參考連結
對本書有任何建議、回饋或錯誤,請來信 iamrico1@gmail.com
Rico Chen https://medium.com/ricos-note 版權所有,請勿非法複製、散佈
序 1
謝謝老婆全力照顧女兒和打理整個家庭,也謝謝姊姊大力幫忙照料媽媽,每個
禮拜陪同媽媽回診台大醫院追蹤病情,讓我減輕不少壓力且無後顧之憂,我才
可利用下班之餘進行寫書,讓本書能夠完成,我深深致上十二萬分謝意。
序 2
無論地端或雲端,效能好壞簡單定義就是"快",但對企業來說不只快還要穩,
穩定是指效能不會因為使用者人數突然暴增,而出現回應時間大幅降低甚至逾
時錯誤。
我工作上接觸 SQL Server 已超過 10 年,不管是我擔任架構師、技術經理、研
發工程師、DBA 或技術顧問期間,累積了不少 SQL Server 效能調校實戰經
驗,也讓我對探索效能問題產生興趣。
SQL Server 發展超過 30 年,想要真正了解每個模組簡直難如登天,至今依然
是微軟關聯式資料庫市場主力,並且持續進化而非像老兵慢慢凋零被現實所淘
汰,這也是我仍然喜愛 SQL Server 主因,並且持續閱讀大量技術文件,也透過
工作實戰中驗證理論和知識,而非紙上談兵,此外,雖然我們都沒有原始碼,
但我們依然可以利用 SQL Server 完成各種工作目標,並且達到企業等級的效能
水準。
Rico Chen https://medium.com/ricos-note 版權所有,請勿非法複製、散佈
內容簡介
本書不適合沒有接觸過 SQL Server 和一定系統、網路、儲存(Storage)及編程
基礎的開發人員或資料庫管理人員,本書討論的主題不是普遍的手把手安裝教
學、證照考試或一般功能介紹,所以書中不會提及如何安裝 SQL Server、
Docker、怎麼解考題或任何工具使用..等,而是面向實戰案例和解決方法、個
人思路,協助開發人員或資料庫管理人員使用 SQL Server 過程中遇到的效能問
題,無論什麼版本的 SQL Server,幾乎都會遇到本書所提到效能問題,如高
CPU、查詢緩慢、封鎖(Blocking)、死結(DeadLock)…等。
每個主題我都會說明相關知識理論和背後運作行為,期望讓讀者更了解 SQL
Server 這龐大的應用程式,同時透過實戰案例說明我的解決方法和思路,期望
本書猶如一盞明燈,可指引讀者在處理棘手效能問題前往正確方向,避免被網
路海量參差不齊資訊掩沒,浪費寶貴時間,也可把這本書當作工具書,遇到效
能問題時參考我的解決思路。
本書將使用 SQL Server docker 映像檔
mcr.microsoft.com/mssql/server:2019-CU9-ubuntu-16.04 進行示範,你可以
透過 Docker Hub 取得,範例資料庫可從 SQL Server Github-repo 取得。
未經本人同意,不得以任何方式複製或抄襲本書之部分或全部內容。
Rico Chen https://medium.com/ricos-note 版權所有,請勿非法複製、散佈
版權所有,請勿非法複製、散佈,侵權必究。
本書適用版本
本書所討論問題和相關解法及思路,可用於 SQL Server2005 以後的版本,但
每個版本之間可能有細節上差異,例如新動態管理函數(DMF)
sys.dm_db_page_info 只存在 SQL Server2019,以前版本就只能使用 DBCC
Page 查看 Page 詳細資訊,DMV 也會有一樣的情形..等其他功能,所以本書涉
及某些 Script 在其他版本可能需要改寫。本書將會特別說明關於 SQL
Server2019 相關改善。
前言
SQL Server 因功能豐富、易於管理、工具操作較人性化、高穩定性和輕鬆方便
整合雲端,而受到眾多企業喜愛,現在的 SQL Server 已經是企業等級的商用資
料庫首選,可處理更多並發使用者情求、乘載巨大資料表和資料庫。在我曾經
手優化某企業正式環境線上交易系統,核心資料表超過 10 億筆,核心資料庫超
過 4TB, SQL Server 都能輕鬆處理交易系統請求,並即時回應給交易系統。
SQL Server 團隊也持續優化底層設計、架構並主動擁抱開源軟體,終於在
SQL Server2017 真正無縫接軌 Linux,也因成功跨平台讓 SQL Server 更輕鬆上
雲端,可見未來發展會越來越好,不會像老兵一樣慢慢凋零掙扎並被時代趨勢
Rico Chen https://medium.com/ricos-note 版權所有,請勿非法複製、散佈
所遺棄,非常值得我們花時間投入研究它。
我在企業中遇到各式各樣的效能問題,但美妙又讓我驚喜的效能問題少之又
少,無論地端或雲端,大多數效能問題對我來說像是二輪電影一次次循環上
演,每當我解決問題後,夥伴或客戶會詢問該如何快速找出主因及怎麼解決,
我意識到大多數人不知道從那裏開始切入,而這也是我寫這本書最主要原因。
這本書範圍包含資料庫和系統組態設定、處理器(CPU)使用率、記憶體
(Memory)壓力、不良 SQL Code、缺陷索引設計、EF Core 燒機開發....等常見
效能問題和個人解決方法及思路,但我還是要強調一點,切勿盲目跟隨我的解
法,因環境不同、SQL Server 版本或硬體資源差異,都可能導致讀者的真實結
果和本書有所差異,我建議處理任何正式環境 SQL Server 效能問題,可參考本
書內容並大膽假設(有時也需要一點想像力),但永遠要提醒自己小心求證,而
非盲人摸象靠運氣。
第一章說明我個人在面對效能問題的心法供本書讀者參考,不見得完全正確或
放諸四海皆準。本書內容我將盡量使用淺顯易懂文字並搭配實戰案例進行分析
說明,用客觀數據為前提,驗證效能調校前後的改善,幫讀者更加強自身技術
實力,且更了解 SQL Server 背後行為。
Rico Chen https://medium.com/ricos-note 版權所有,請勿非法複製、散佈
Rico Chen https://medium.com/ricos-note 版權所有,請勿非法複製、散佈
第一章 需要效能調校嗎
1.1 效能調校理由
 增加效率 : 系統效能良好,對客戶來說也相對提高工作效率。
 增加營收 : 系統效能良好,才能吸引更多客戶。
 節省成本 : 系統效能良好,原本要投入的硬體(CPU、Memory、Storage)可
暫緩。
 降低挫折感 : 客戶抱怨系統效能低落,無疑是對研發團隊(自己)專業上的打
擊。
上面我列出四大理由,可以看到系統效能良好幫公司和團隊帶來不小效益。真
實世界我相信大家一定都有遇過,使用者或開發人員反應資料庫變慢了,但當
我們更進一步詢問慢是多慢時,往往得到的答案非常模糊,且還有很大成分是
靠個人感覺,但每個人感覺都很主觀,所以我們在處理效能問題時,一定要有
明確定義,不然可能會浪費很多寶貴時間,甚至主因並非 SQL Server 引起,也
經常在對方反應問題幾秒後,效能緩慢問題自動消失。
我對效能緩慢的定義是 : 在合理請求前提下,現有資源尚未利用最大化,但
SQL Server 無法如預期滿足各種請求。
什麼叫合理的請求,假設現有 SQL Server 平均每秒能處理 1000 個請求,在我
Rico Chen https://medium.com/ricos-note 版權所有,請勿非法複製、散佈
們都沒做任何硬體資源調整、程式優化..等措施前,絕不可能期望 SQL Server
下一次能自動提高吞吐量,每秒處理請求由 1000 提升為 10000,所以滿足合理
的情求是必須的。
那資源尚未利用最大化又是指什麼?假設現有 CPU 使用率約 10%,記憶體也相
當足夠,Disk 也沒有任何佇列(Queue)和等待情況,但 SQL Server 卻無法如預
期滿足各種情求,甚至造成交易系統發生逾時錯誤…等。
1.2 常見效能殺手
造成 SQL Server 效能緩慢的原因很多,但幾乎都非 SQL Server 本身設計不良
或記憶體洩漏之類的臭蟲(Bug)所造成,絕大部分是使用者誤用或誤解所導致,
下面列出我在企業中常見的十大殺手。
 沒有索引或索引設計不良 : 表示系統的某些查詢,可能都執行資料表掃描
(Table Scan)操作,所以將耗用大量 CPU 和 Memory 資源。
 Memory 不足 : 萬丈高樓平地起的道理,而硬體就是 SQL Server 的地基,
CPU、Memory 和 Storage 三者對 SQL Server 來說缺一不可,其中又以
Memory 最為重要,當 SQL Server 發生 Memory 不足情況,系統將可能連帶
引發高 CPU 情況,因可能是頻繁的進行上下文交換(Context Switching),硬體
資源不足或不正當的使用,都會影響 SQL Server 效能。
 查詢過多不必要資料 : 一般來說,開發人員只需返回業務所需資料數量和

SQL Server全集中實戰效能調校指引-第一章部分試讀

  • 1.
    Rico Chen https://medium.com/ricos-note版權所有,請勿非法複製、散佈 關於作者 連續 8 年當選微軟最有價值專家,業界實務經歷超過 10 年,撰寫技術部落格超 過 14 年,至今依然協助企業帶領技術研發團隊並將商業價值完美落地。 擅長使用.NET/NetCore 技術開發 Web/OLTP 系統,並熟悉分散式架構設計 實作、程式碼重構和效能調校,也熟悉 SQL Server 應用開發、架構設計、效能 調校和管理,幫助許多企業從無到有規劃設計並開發核心系統、核心系統架構 改造升級、核心系統效能調校,並針對企業開發人員或 DBA 進行教育訓練,也 擁有多年大型資料庫效能調校教學經驗。 曾任企業資深架構師、RD 經理、技術經理、資深研發工程師、專案經理、資深 技術顧問、資深 DBA,微軟 SQL Server 研討會講師、Udemy 線上講師、SQL Pass 社群講師、RunPC(CIO 前身)技術專欄作家。 可以透過下列管道得知作者最新動態 個人部落格 : https://medium.com/ricos-note 個人所有線上課程 : https://www.udemy.com/user/ricochen-2/ 個人所有線上電子書 : https://www.pubu.com.tw/store/riconote RiCo 技術農場 FB 專頁 : https://www.facebook.com/2hsinglan
  • 2.
    Rico Chen https://medium.com/ricos-note版權所有,請勿非法複製、散佈 RiCo 技術農場 YT 專頁 : https://www.youtube.com/channel/UC75zzlrlmDPESe9G-WxfK0A 書寫慣例 由於 SQL Server 是國外軟體,所以有些術語第一次我將中英文並呈,後續再碰 到一樣術語時,大部分會直接使用英文,主要是要提高閱讀順暢度,例如 Context Switch 翻成工作內容/上下文切換或 Session 翻成會話都有點卡卡,有 些讀者甚至會停下思考並反覆閱讀前後內容才能明白了解,另外,我建議讀者 也都使用英文版 SQL Server 及相關管理工具(SSMS),避免中文翻譯造成更大 困惑。 本書內容也會補充一些相關資料,有些是簡單用(sidebar)圈住,有些則會用不 同圖案標記,下面是幾個常用圖案:  這是筆者個人見解或額外補充說明  這是補充相關資訊或參考連結 對本書有任何建議、回饋或錯誤,請來信 iamrico1@gmail.com
  • 3.
    Rico Chen https://medium.com/ricos-note版權所有,請勿非法複製、散佈 序 1 謝謝老婆全力照顧女兒和打理整個家庭,也謝謝姊姊大力幫忙照料媽媽,每個 禮拜陪同媽媽回診台大醫院追蹤病情,讓我減輕不少壓力且無後顧之憂,我才 可利用下班之餘進行寫書,讓本書能夠完成,我深深致上十二萬分謝意。 序 2 無論地端或雲端,效能好壞簡單定義就是"快",但對企業來說不只快還要穩, 穩定是指效能不會因為使用者人數突然暴增,而出現回應時間大幅降低甚至逾 時錯誤。 我工作上接觸 SQL Server 已超過 10 年,不管是我擔任架構師、技術經理、研 發工程師、DBA 或技術顧問期間,累積了不少 SQL Server 效能調校實戰經 驗,也讓我對探索效能問題產生興趣。 SQL Server 發展超過 30 年,想要真正了解每個模組簡直難如登天,至今依然 是微軟關聯式資料庫市場主力,並且持續進化而非像老兵慢慢凋零被現實所淘 汰,這也是我仍然喜愛 SQL Server 主因,並且持續閱讀大量技術文件,也透過 工作實戰中驗證理論和知識,而非紙上談兵,此外,雖然我們都沒有原始碼, 但我們依然可以利用 SQL Server 完成各種工作目標,並且達到企業等級的效能 水準。
  • 4.
    Rico Chen https://medium.com/ricos-note版權所有,請勿非法複製、散佈 內容簡介 本書不適合沒有接觸過 SQL Server 和一定系統、網路、儲存(Storage)及編程 基礎的開發人員或資料庫管理人員,本書討論的主題不是普遍的手把手安裝教 學、證照考試或一般功能介紹,所以書中不會提及如何安裝 SQL Server、 Docker、怎麼解考題或任何工具使用..等,而是面向實戰案例和解決方法、個 人思路,協助開發人員或資料庫管理人員使用 SQL Server 過程中遇到的效能問 題,無論什麼版本的 SQL Server,幾乎都會遇到本書所提到效能問題,如高 CPU、查詢緩慢、封鎖(Blocking)、死結(DeadLock)…等。 每個主題我都會說明相關知識理論和背後運作行為,期望讓讀者更了解 SQL Server 這龐大的應用程式,同時透過實戰案例說明我的解決方法和思路,期望 本書猶如一盞明燈,可指引讀者在處理棘手效能問題前往正確方向,避免被網 路海量參差不齊資訊掩沒,浪費寶貴時間,也可把這本書當作工具書,遇到效 能問題時參考我的解決思路。 本書將使用 SQL Server docker 映像檔 mcr.microsoft.com/mssql/server:2019-CU9-ubuntu-16.04 進行示範,你可以 透過 Docker Hub 取得,範例資料庫可從 SQL Server Github-repo 取得。 未經本人同意,不得以任何方式複製或抄襲本書之部分或全部內容。
  • 5.
    Rico Chen https://medium.com/ricos-note版權所有,請勿非法複製、散佈 版權所有,請勿非法複製、散佈,侵權必究。 本書適用版本 本書所討論問題和相關解法及思路,可用於 SQL Server2005 以後的版本,但 每個版本之間可能有細節上差異,例如新動態管理函數(DMF) sys.dm_db_page_info 只存在 SQL Server2019,以前版本就只能使用 DBCC Page 查看 Page 詳細資訊,DMV 也會有一樣的情形..等其他功能,所以本書涉 及某些 Script 在其他版本可能需要改寫。本書將會特別說明關於 SQL Server2019 相關改善。 前言 SQL Server 因功能豐富、易於管理、工具操作較人性化、高穩定性和輕鬆方便 整合雲端,而受到眾多企業喜愛,現在的 SQL Server 已經是企業等級的商用資 料庫首選,可處理更多並發使用者情求、乘載巨大資料表和資料庫。在我曾經 手優化某企業正式環境線上交易系統,核心資料表超過 10 億筆,核心資料庫超 過 4TB, SQL Server 都能輕鬆處理交易系統請求,並即時回應給交易系統。 SQL Server 團隊也持續優化底層設計、架構並主動擁抱開源軟體,終於在 SQL Server2017 真正無縫接軌 Linux,也因成功跨平台讓 SQL Server 更輕鬆上 雲端,可見未來發展會越來越好,不會像老兵一樣慢慢凋零掙扎並被時代趨勢
  • 6.
    Rico Chen https://medium.com/ricos-note版權所有,請勿非法複製、散佈 所遺棄,非常值得我們花時間投入研究它。 我在企業中遇到各式各樣的效能問題,但美妙又讓我驚喜的效能問題少之又 少,無論地端或雲端,大多數效能問題對我來說像是二輪電影一次次循環上 演,每當我解決問題後,夥伴或客戶會詢問該如何快速找出主因及怎麼解決, 我意識到大多數人不知道從那裏開始切入,而這也是我寫這本書最主要原因。 這本書範圍包含資料庫和系統組態設定、處理器(CPU)使用率、記憶體 (Memory)壓力、不良 SQL Code、缺陷索引設計、EF Core 燒機開發....等常見 效能問題和個人解決方法及思路,但我還是要強調一點,切勿盲目跟隨我的解 法,因環境不同、SQL Server 版本或硬體資源差異,都可能導致讀者的真實結 果和本書有所差異,我建議處理任何正式環境 SQL Server 效能問題,可參考本 書內容並大膽假設(有時也需要一點想像力),但永遠要提醒自己小心求證,而 非盲人摸象靠運氣。 第一章說明我個人在面對效能問題的心法供本書讀者參考,不見得完全正確或 放諸四海皆準。本書內容我將盡量使用淺顯易懂文字並搭配實戰案例進行分析 說明,用客觀數據為前提,驗證效能調校前後的改善,幫讀者更加強自身技術 實力,且更了解 SQL Server 背後行為。
  • 7.
    Rico Chen https://medium.com/ricos-note版權所有,請勿非法複製、散佈
  • 8.
    Rico Chen https://medium.com/ricos-note版權所有,請勿非法複製、散佈 第一章 需要效能調校嗎 1.1 效能調校理由  增加效率 : 系統效能良好,對客戶來說也相對提高工作效率。  增加營收 : 系統效能良好,才能吸引更多客戶。  節省成本 : 系統效能良好,原本要投入的硬體(CPU、Memory、Storage)可 暫緩。  降低挫折感 : 客戶抱怨系統效能低落,無疑是對研發團隊(自己)專業上的打 擊。 上面我列出四大理由,可以看到系統效能良好幫公司和團隊帶來不小效益。真 實世界我相信大家一定都有遇過,使用者或開發人員反應資料庫變慢了,但當 我們更進一步詢問慢是多慢時,往往得到的答案非常模糊,且還有很大成分是 靠個人感覺,但每個人感覺都很主觀,所以我們在處理效能問題時,一定要有 明確定義,不然可能會浪費很多寶貴時間,甚至主因並非 SQL Server 引起,也 經常在對方反應問題幾秒後,效能緩慢問題自動消失。 我對效能緩慢的定義是 : 在合理請求前提下,現有資源尚未利用最大化,但 SQL Server 無法如預期滿足各種請求。 什麼叫合理的請求,假設現有 SQL Server 平均每秒能處理 1000 個請求,在我
  • 9.
    Rico Chen https://medium.com/ricos-note版權所有,請勿非法複製、散佈 們都沒做任何硬體資源調整、程式優化..等措施前,絕不可能期望 SQL Server 下一次能自動提高吞吐量,每秒處理請求由 1000 提升為 10000,所以滿足合理 的情求是必須的。 那資源尚未利用最大化又是指什麼?假設現有 CPU 使用率約 10%,記憶體也相 當足夠,Disk 也沒有任何佇列(Queue)和等待情況,但 SQL Server 卻無法如預 期滿足各種情求,甚至造成交易系統發生逾時錯誤…等。 1.2 常見效能殺手 造成 SQL Server 效能緩慢的原因很多,但幾乎都非 SQL Server 本身設計不良 或記憶體洩漏之類的臭蟲(Bug)所造成,絕大部分是使用者誤用或誤解所導致, 下面列出我在企業中常見的十大殺手。  沒有索引或索引設計不良 : 表示系統的某些查詢,可能都執行資料表掃描 (Table Scan)操作,所以將耗用大量 CPU 和 Memory 資源。  Memory 不足 : 萬丈高樓平地起的道理,而硬體就是 SQL Server 的地基, CPU、Memory 和 Storage 三者對 SQL Server 來說缺一不可,其中又以 Memory 最為重要,當 SQL Server 發生 Memory 不足情況,系統將可能連帶 引發高 CPU 情況,因可能是頻繁的進行上下文交換(Context Switching),硬體 資源不足或不正當的使用,都會影響 SQL Server 效能。  查詢過多不必要資料 : 一般來說,開發人員只需返回業務所需資料數量和