SQL Server 急救包(First Responder Kit)入门教程
如果你的SQL Server數(shù)據(jù)庫(kù)運(yùn)行起來(lái)十分緩慢甚至逐漸停止了,恰巧又趕上了你的數(shù)據(jù)庫(kù)管理員在休假,你又不知道該如何是好,那么這篇文章會(huì)幫助你從學(xué)習(xí)使用SQL Server急救包(SQL Server First Responder Kit)開(kāi)始解決問(wèn)題。這個(gè)開(kāi)源項(xiàng)目包含了一系列能夠幫助數(shù)據(jù)管理員或者臨時(shí)數(shù)據(jù)管理員的腳本,能夠修復(fù)和調(diào)整SQL Server實(shí)例至正常狀態(tài)。
這些腳本以存儲(chǔ)過(guò)程(stored procedures)的形式安裝在你的服務(wù)器的“主”(master)數(shù)據(jù)庫(kù)中。它們都以 “sp_” 為前綴,這能夠保證它們?cè)谀闼芸吹饺魏我粋€(gè)數(shù)據(jù)庫(kù)中都能被調(diào)用。
注意:SQL Server總是首先搜索主數(shù)據(jù)庫(kù)中以 “sp_” 開(kāi)頭的存儲(chǔ)過(guò)程,因此如果標(biāo)準(zhǔn)的存儲(chǔ)過(guò)程,即特定數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程使用那個(gè)前綴的話,會(huì)略微影響服務(wù)器的速度,因?yàn)樗环旁诹隋e(cuò)誤的位置。
sp_BlitzWho: 是誰(shuí)引起了當(dāng)前的問(wèn)題?
當(dāng)數(shù)據(jù)庫(kù)出錯(cuò)的時(shí)候你首先應(yīng)該使用這個(gè)工具。它會(huì)告訴你誰(shuí)被連接了,它們正在執(zhí)行什么,并且會(huì)告訴你它們拖慢數(shù)據(jù)庫(kù)的程度。
如果你發(fā)現(xiàn)了一個(gè)需要被關(guān)閉的無(wú)響應(yīng)的程序,你可以使用 “kill” 命令加上相關(guān)的會(huì)話 id 來(lái)殺掉它。
如果問(wèn)題還沒(méi)有解決,那么你可以試試sp_BlitzFirst。
sp_BlitzFirst: 你在等待什么?
sp_BlitzFirst工具能幫助你發(fā)現(xiàn)你的數(shù)據(jù)庫(kù)在等待什么。在下面的例子中你能看到 #1 問(wèn)題除了SQL Server消耗了太多的 CPU 時(shí)間之外,還有其他的許多問(wèn)題。
除非你在一個(gè)開(kāi)發(fā)者的機(jī)器上來(lái)測(cè)試腳本,否則這些診斷信息真的很不常見(jiàn)。常見(jiàn)的是你會(huì)發(fā)現(xiàn)一個(gè)或更多的 “等待狀態(tài)(wait stats)” 問(wèn)題。
在SQL Server中,所有可能減慢一條查詢的速度的都被追蹤為“等待狀態(tài)(wait stats)”。它包括硬盤等待、網(wǎng)絡(luò)I/O等待和列粒度上或表粒度上的鎖等待以及等待CPU或者內(nèi)存資源等等。輸出列表中的鏈接會(huì)幫助你處理常見(jiàn)的等待類型,但是它能追蹤上百種不同的等待類型,其中的一些影響系統(tǒng)性能的特定等待狀態(tài)就不那么容易能找到相關(guān)信息了。
sp_Blitz: 這個(gè)數(shù)據(jù)庫(kù)配置正確了嗎?
當(dāng)你第一次接管了一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器時(shí),你應(yīng)該用到的工具就是sp_Blitz。這個(gè)工具能夠以配置數(shù)據(jù)庫(kù)的方式識(shí)別出一些常見(jiàn)的問(wèn)題。每一個(gè)檢查到的問(wèn)題都包括如何解決這個(gè)問(wèn)題的信息和一個(gè)優(yōu)先級(jí),這個(gè)優(yōu)先級(jí)指明了該以怎樣的順序解決這個(gè)問(wèn)題。
從上邊的圖片你能看到,有許多數(shù)據(jù)庫(kù)長(zhǎng)時(shí)間沒(méi)有備份或者長(zhǎng)時(shí)間沒(méi)有進(jìn)行崩潰檢查。
它能檢測(cè)到的問(wèn)題還包括:
不良配置,尤其是“由默認(rèn)引起的錯(cuò)誤(wrong by default)”,例如并行查詢閥值(cost threshold for parallelism)的默認(rèn)配置錯(cuò)誤。
危險(xiǎn)文件位置,例如在系統(tǒng)盤上存儲(chǔ)事務(wù)日志。
非生產(chǎn)許可證(Non-production licenses)的使用。
對(duì)數(shù)據(jù)庫(kù)崩潰、內(nèi)存不足等警告的忽略。
通用安全設(shè)置錯(cuò)誤,例如錯(cuò)誤的數(shù)據(jù)庫(kù)所有者權(quán)限。
sp_BlitzCache: 哪些條查詢需要進(jìn)行調(diào)整?
如果當(dāng)前的問(wèn)題都已經(jīng)解決了,你就可以開(kāi)始探索一些主動(dòng)提高性能的方法了。一個(gè)叫做sp_BlitzCache的工具就是用于此的。這個(gè)工具用于監(jiān)控SQL Server的查詢計(jì)劃緩存(query plan cache),它能監(jiān)測(cè)哪些查詢對(duì)數(shù)據(jù)庫(kù)超時(shí)有最大的影響。它也能警告你一些查詢中的常見(jiàn)問(wèn)題,例如通過(guò)標(biāo)量運(yùn)算和隱式類型轉(zhuǎn)換來(lái)進(jìn)行列計(jì)算。
sp_BlitzFirst和sp_BlitzCache最主要的區(qū)別就是sp_BlitzFirst監(jiān)測(cè)的是實(shí)時(shí)發(fā)生的事件。相反的是,sp_BlitzCache監(jiān)測(cè)的是歷史數(shù)據(jù),它能幫你識(shí)別出一個(gè)趨勢(shì),因此它不需要你當(dāng)場(chǎng)找出存在問(wèn)題的查詢操作。
sp_BlitzIndex: 我的索引都是怎么工作的?
如果性能問(wèn)題看起來(lái)是系統(tǒng)性的,而不是針對(duì)特定的查詢,你需要檢查的下一個(gè)地方就是索引了。索引丟失會(huì)造成嚴(yán)重的性能問(wèn)題是眾所周知的,它會(huì)造成查詢時(shí)間呈十倍、百倍甚至千倍的增長(zhǎng)。
一個(gè)同樣重要的問(wèn)題是過(guò)多的索引。除了告訴你丟失的索引外,sp_BlitzIndex也會(huì)告訴你有可能在維護(hù)一個(gè)索引上花費(fèi)的時(shí)間比使用它花費(fèi)的時(shí)間還要長(zhǎng)。不必要的索引維護(hù)不僅會(huì)減慢寫(xiě)入速度,還會(huì)產(chǎn)生除緩存以外的更多的數(shù)據(jù),這些都會(huì)大大減慢不相關(guān)查詢的速度。
SQL Server急救包最早由Brent Ozar Unlimited開(kāi)發(fā),現(xiàn)在它已經(jīng)是通過(guò)MIT協(xié)議的一個(gè)開(kāi)源項(xiàng)目了。
總結(jié)
以上是生活随笔為你收集整理的SQL Server 急救包(First Responder Kit)入门教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Visual Studio 2017将于
- 下一篇: Xamarin的坑 - 绑定(一) -