診斷SQLSERVER問題常用的日志
這里主要有兩個:
(1)Windows事件日志
(2)SQLSERVER ErrorLog
1、Windows事件日志 Event Log
作為一個Windows開啟和管理的服務(wù)程序,Windows會在自己的系統(tǒng)日志system log里記錄SQLSERVER這個服務(wù)的啟動、正常關(guān)閉、異常關(guān)閉等信息。
SQLSERVER也會把自己的一些概要信息同時記錄在Windows的應(yīng)用程序日志里Application Log而Windows日志本身又能夠反映操作系統(tǒng)的健康情況,是否有任何軟件或硬件的異常。
如果Windows本身不能正常工作,SQLSERVER的運(yùn)行一定會受到影響。
當(dāng)遇到一些問題需要微軟的售后工程師解決的時候,Windows事件日志是一個很好的界定問題性質(zhì)的工具。
在Windows里,點(diǎn)擊“開始”-》運(yùn)行 -》輸入:eventvwr 點(diǎn)確定 就可以打開事件查看器Event Viewer
在Windows7、Windows2008和Windows2008R2里面,界面會有所不同,但是主要內(nèi)容還是類似的
Windows主要有三種日志:應(yīng)用程序,安全,系統(tǒng) (我的系統(tǒng)是Windows7)
對于SQLSERVER會主要關(guān)心應(yīng)用程序日志和系統(tǒng)日志。當(dāng)處理一些連接認(rèn)證問題時,可能會偶爾用上安全日志。
日志里的每一條記錄,都屬于信息、警告、錯誤中的一類。
每條記錄都會標(biāo)明日期、時間、來源、事件ID。
如果在應(yīng)用日志里,從SQLSERVER產(chǎn)生的記錄其來源名稱都會是MSSQLSERVER
雙擊某一條記錄,Windows會彈出一個對話框,顯示記錄的具體內(nèi)容
在這里說一下我遇到的機(jī)器內(nèi)存不足,導(dǎo)致SQLSERVER需要把內(nèi)存換出去硬盤的情況,導(dǎo)致經(jīng)常SQLSERVER反應(yīng)緩慢
事件查看器顯示的信息就是上面那個截圖,一句話概括就是:系統(tǒng)內(nèi)存不足
我的機(jī)器情況:
8GB內(nèi)存沒有用盡,因?yàn)?2位操作系統(tǒng)的關(guān)系,遲一點(diǎn)打算更換為64位Windows7
所以平時多看一下事件查看器或者遇到問題的時候就先看事件查看器,一定能找到一些問題的蛛絲馬跡
另外一個,在事件查看器里,還能把日志另存為*.evt文件或*.txt文件,以供DBA帶到其他機(jī)器上打開分析。
打開一個*.evt文件的方法是:是右鍵點(diǎn)擊“事件查看器(本地)”樹型結(jié)構(gòu)---》打開保存的日志
用這種方法,DBA就能像看本機(jī)上的日志記錄一樣,分析從其他機(jī)器保存下來的日志文件了
保存的時候可以保存單個事件或者整個類別的事件
最后,用事件日志查看器打開的日志,其時間會和時區(qū)有關(guān)系的,
不同時區(qū)設(shè)置的機(jī)器打開一個*.evt文件,其顯示的時間會不一樣。
例如,如果某個錯誤信息發(fā)生在美國的白天,那么用在中國的機(jī)器打開,其時間會顯示在晚上
如果你按美國時間找,就會找不到了。但是保存成 *.txt格式 文本文件格式就不會有這種問題
2、SQLSERVER ErrorLog文件
檢查完Windows的基本狀況后,就可以開始檢查SQLSERVER的健康狀況。
不管你是遇到什么問題,建議第一個要檢查的是SQLSERVER的ErrorLog文件
當(dāng)SQLSERVER啟動的時候,會在某個固定的路徑下生成一個“errorlog”的文件
SQLSERVER默認(rèn)會保留7份errorlog文件,按照時間順序,依次用文件擴(kuò)名.1,.2,.3,...,.6表示。
每重啟一次服務(wù),文件擴(kuò)展名都會加一,最早的那份會被刪除。
日志文件的默認(rèn)路徑是安裝路徑下的C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\LOG子目錄。
C:\Program Files是我的機(jī)器的安裝路徑,這個路徑是你安裝SQLSERVER的時候選擇的
當(dāng)然DBA也能夠修改其設(shè)置(在配置管理器里,雙擊sql服務(wù)-》高級-》轉(zhuǎn)儲目錄)
發(fā)覺Windows對錯誤日志或者目錄都叫轉(zhuǎn)儲的,像某些軟件,例如QQ,有道詞典好像也是用dmp格式的轉(zhuǎn)儲文件
說回正題o(∩_∩)o
如果你要分析的是一臺陌生的服務(wù)器,可以用很多種方法找到errorlog路徑。
一種比較簡單的方法是在SQLSERVER 配置管理器里選擇SQL服務(wù),在其屬性-》高級里找到一個“啟動參數(shù)”的高級屬性
在屬性字符串里,會有一個“-e”的參數(shù)。他的后面就是跟errorlog文件的位置
或者干脆在上面說的轉(zhuǎn)儲目錄就可以看到了
errorlog文件以文本方式記錄,用任何文件編輯器,包括記事本,SSMS都能打開
一般來講,errorlog文件的大小不會很大。用這些工具完全能夠滿足需求
但是,errorlog本身非常重要,他記錄了SQL的整個開啟、運(yùn)行、終止過程。
如果SQLSERVER遇到了比較嚴(yán)重的問題,在errorlog里都會有所顯示
ErrorLog顯示包括以下內(nèi)容:
(1)SQL的版本,以及Windows和Processor基本信息
(2)SQL的啟動參數(shù),以及認(rèn)證模式,內(nèi)存分配模式
(3)每個數(shù)據(jù)庫是否能夠被正常打開。如果不能,原因是什么
(4)數(shù)據(jù)庫損壞相關(guān)的錯誤
(5)數(shù)據(jù)庫備份與恢復(fù)動作記錄
(6)DBCC CHECKDB記錄
(7)內(nèi)存相關(guān)的錯誤和警告
(8)SQL調(diào)度出現(xiàn)異常時的警告。一般SERVER HANG 服務(wù)器死機(jī)會伴隨著有這些警告
(9)SQL I/O操作遇到長時間延遲的警告
(10)SQL在運(yùn)行過程中遇到的其他級別比較高的錯誤
(11)SQL內(nèi)部的訪問越界錯誤(Access Violation)
(12)SQL服務(wù)關(guān)閉時間
在檢查SQLSERVER相關(guān)問題的時候,總是從errorlog著手,先確認(rèn)errorlog里是干凈的。
如果errorlog里有一些錯誤或警告,就要確認(rèn)這些錯誤和警告發(fā)生的時間,是不是前端感覺到問題的時間。
如果時間能對得上,那就要著重分析一下
如果開啟一些設(shè)置,在errorlog里還能看到的有用信息有:
(1)所有用戶成功或失敗的登入
(2)死鎖以及其參與者的信息:需要打開跟蹤標(biāo)志1222 或1204
復(fù)制代碼 代碼如下:
DBCC TRACEON(1222)
DBCC TRACEON(1204)
有時候errorlog也不是萬能的哦?他不能反映的問題有:
(1)阻塞問題。只要阻塞還沒有嚴(yán)重影響SQLSERVER的線程調(diào)度,errorlog里是不會有體現(xiàn)
(2)普通性能問題,超時問題。如果性能問題不是由于內(nèi)存使用異常、線程調(diào)度異常,或者是I/O子系統(tǒng)反應(yīng)非常緩慢,
而是由于表格或語句設(shè)計導(dǎo)致,errorlog里也不會有所反映
(3)Windows層面異常。如果Windows層面出現(xiàn)工作不正常,或者服務(wù)器不響應(yīng),SQLSERVER很難自我判斷的
上面這三個問題,errorlog里一般不會有所體現(xiàn)。這也是我們?yōu)槭颤N要第一步就要檢查Event Log的原因
下面給出一個errorlog的內(nèi)容出來講解
您可能感興趣的文章:- sqlserver 實(shí)現(xiàn)收縮數(shù)據(jù)庫日志操作
- SqlServer修改數(shù)據(jù)庫文件及日志文件存放位置
- 刪除sqlserver數(shù)據(jù)庫日志和沒有日志的數(shù)據(jù)庫恢復(fù)辦法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sqlserver 2000/2005/2008 的收縮日志方法和清理日志方法
- SQLServer清理日志文件方法案例詳解