診斷SQLSERVER問(wèn)題常用的日志
這里主要有兩個(gè):
(1)Windows事件日志
(2)SQLSERVER ErrorLog
1、Windows事件日志 Event Log
作為一個(gè)Windows開(kāi)啟和管理的服務(wù)程序,Windows會(huì)在自己的系統(tǒng)日志system log里記錄SQLSERVER這個(gè)服務(wù)的啟動(dòng)、正常關(guān)閉、異常關(guān)閉等信息。
SQLSERVER也會(huì)把自己的一些概要信息同時(shí)記錄在Windows的應(yīng)用程序日志里Application Log而Windows日志本身又能夠反映操作系統(tǒng)的健康情況,是否有任何軟件或硬件的異常。
如果Windows本身不能正常工作,SQLSERVER的運(yùn)行一定會(huì)受到影響。
當(dāng)遇到一些問(wèn)題需要微軟的售后工程師解決的時(shí)候,Windows事件日志是一個(gè)很好的界定問(wèn)題性質(zhì)的工具。
在Windows里,點(diǎn)擊“開(kāi)始”-》運(yùn)行 -》輸入:eventvwr 點(diǎn)確定 就可以打開(kāi)事件查看器Event Viewer
在Windows7、Windows2008和Windows2008R2里面,界面會(huì)有所不同,但是主要內(nèi)容還是類(lèi)似的

Windows主要有三種日志:應(yīng)用程序,安全,系統(tǒng) (我的系統(tǒng)是Windows7)

對(duì)于SQLSERVER會(huì)主要關(guān)心應(yīng)用程序日志和系統(tǒng)日志。當(dāng)處理一些連接認(rèn)證問(wèn)題時(shí),可能會(huì)偶爾用上安全日志。
日志里的每一條記錄,都屬于信息、警告、錯(cuò)誤中的一類(lèi)。
每條記錄都會(huì)標(biāo)明日期、時(shí)間、來(lái)源、事件ID。
如果在應(yīng)用日志里,從SQLSERVER產(chǎn)生的記錄其來(lái)源名稱(chēng)都會(huì)是MSSQLSERVER
雙擊某一條記錄,Windows會(huì)彈出一個(gè)對(duì)話框,顯示記錄的具體內(nèi)容

在這里說(shuō)一下我遇到的機(jī)器內(nèi)存不足,導(dǎo)致SQLSERVER需要把內(nèi)存換出去硬盤(pán)的情況,導(dǎo)致經(jīng)常SQLSERVER反應(yīng)緩慢
事件查看器顯示的信息就是上面那個(gè)截圖,一句話概括就是:系統(tǒng)內(nèi)存不足
我的機(jī)器情況:

8GB內(nèi)存沒(méi)有用盡,因?yàn)?2位操作系統(tǒng)的關(guān)系,遲一點(diǎn)打算更換為64位Windows7
所以平時(shí)多看一下事件查看器或者遇到問(wèn)題的時(shí)候就先看事件查看器,一定能找到一些問(wèn)題的蛛絲馬跡
另外一個(gè),在事件查看器里,還能把日志另存為*.evt文件或*.txt文件,以供DBA帶到其他機(jī)器上打開(kāi)分析。
打開(kāi)一個(gè)*.evt文件的方法是:是右鍵點(diǎn)擊“事件查看器(本地)”樹(shù)型結(jié)構(gòu)---》打開(kāi)保存的日志


用這種方法,DBA就能像看本機(jī)上的日志記錄一樣,分析從其他機(jī)器保存下來(lái)的日志文件了
保存的時(shí)候可以保存單個(gè)事件或者整個(gè)類(lèi)別的事件


最后,用事件日志查看器打開(kāi)的日志,其時(shí)間會(huì)和時(shí)區(qū)有關(guān)系的,
不同時(shí)區(qū)設(shè)置的機(jī)器打開(kāi)一個(gè)*.evt文件,其顯示的時(shí)間會(huì)不一樣。
例如,如果某個(gè)錯(cuò)誤信息發(fā)生在美國(guó)的白天,那么用在中國(guó)的機(jī)器打開(kāi),其時(shí)間會(huì)顯示在晚上
如果你按美國(guó)時(shí)間找,就會(huì)找不到了。但是保存成 *.txt格式 文本文件格式就不會(huì)有這種問(wèn)題
2、SQLSERVER ErrorLog文件
檢查完Windows的基本狀況后,就可以開(kāi)始檢查SQLSERVER的健康狀況。
不管你是遇到什么問(wèn)題,建議第一個(gè)要檢查的是SQLSERVER的ErrorLog文件
當(dāng)SQLSERVER啟動(dòng)的時(shí)候,會(huì)在某個(gè)固定的路徑下生成一個(gè)“errorlog”的文件
SQLSERVER默認(rèn)會(huì)保留7份errorlog文件,按照時(shí)間順序,依次用文件擴(kuò)名.1,.2,.3,...,.6表示。
每重啟一次服務(wù),文件擴(kuò)展名都會(huì)加一,最早的那份會(huì)被刪除。
日志文件的默認(rèn)路徑是安裝路徑下的C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\LOG子目錄。
C:\Program Files是我的機(jī)器的安裝路徑,這個(gè)路徑是你安裝SQLSERVER的時(shí)候選擇的
當(dāng)然DBA也能夠修改其設(shè)置(在配置管理器里,雙擊sql服務(wù)-》高級(jí)-》轉(zhuǎn)儲(chǔ)目錄)

發(fā)覺(jué)Windows對(duì)錯(cuò)誤日志或者目錄都叫轉(zhuǎn)儲(chǔ)的,像某些軟件,例如QQ,有道詞典好像也是用dmp格式的轉(zhuǎn)儲(chǔ)文件

說(shuō)回正題o(∩_∩)o
如果你要分析的是一臺(tái)陌生的服務(wù)器,可以用很多種方法找到errorlog路徑。
一種比較簡(jiǎn)單的方法是在SQLSERVER 配置管理器里選擇SQL服務(wù),在其屬性-》高級(jí)里找到一個(gè)“啟動(dòng)參數(shù)”的高級(jí)屬性
在屬性字符串里,會(huì)有一個(gè)“-e”的參數(shù)。他的后面就是跟errorlog文件的位置

或者干脆在上面說(shuō)的轉(zhuǎn)儲(chǔ)目錄就可以看到了
errorlog文件以文本方式記錄,用任何文件編輯器,包括記事本,SSMS都能打開(kāi)
一般來(lái)講,errorlog文件的大小不會(huì)很大。用這些工具完全能夠滿足需求
但是,errorlog本身非常重要,他記錄了SQL的整個(gè)開(kāi)啟、運(yùn)行、終止過(guò)程。
如果SQLSERVER遇到了比較嚴(yán)重的問(wèn)題,在errorlog里都會(huì)有所顯示
ErrorLog顯示包括以下內(nèi)容:
(1)SQL的版本,以及Windows和Processor基本信息
(2)SQL的啟動(dòng)參數(shù),以及認(rèn)證模式,內(nèi)存分配模式
(3)每個(gè)數(shù)據(jù)庫(kù)是否能夠被正常打開(kāi)。如果不能,原因是什么
(4)數(shù)據(jù)庫(kù)損壞相關(guān)的錯(cuò)誤
(5)數(shù)據(jù)庫(kù)備份與恢復(fù)動(dòng)作記錄
(6)DBCC CHECKDB記錄
(7)內(nèi)存相關(guān)的錯(cuò)誤和警告
(8)SQL調(diào)度出現(xiàn)異常時(shí)的警告。一般SERVER HANG 服務(wù)器死機(jī)會(huì)伴隨著有這些警告
(9)SQL I/O操作遇到長(zhǎng)時(shí)間延遲的警告
(10)SQL在運(yùn)行過(guò)程中遇到的其他級(jí)別比較高的錯(cuò)誤
(11)SQL內(nèi)部的訪問(wèn)越界錯(cuò)誤(Access Violation)
(12)SQL服務(wù)關(guān)閉時(shí)間
在檢查SQLSERVER相關(guān)問(wèn)題的時(shí)候,總是從errorlog著手,先確認(rèn)errorlog里是干凈的。
如果errorlog里有一些錯(cuò)誤或警告,就要確認(rèn)這些錯(cuò)誤和警告發(fā)生的時(shí)間,是不是前端感覺(jué)到問(wèn)題的時(shí)間。
如果時(shí)間能對(duì)得上,那就要著重分析一下
如果開(kāi)啟一些設(shè)置,在errorlog里還能看到的有用信息有:
(1)所有用戶成功或失敗的登入
(2)死鎖以及其參與者的信息:需要打開(kāi)跟蹤標(biāo)志1222 或1204
復(fù)制代碼 代碼如下:
DBCC TRACEON(1222)
DBCC TRACEON(1204)
有時(shí)候errorlog也不是萬(wàn)能的哦?他不能反映的問(wèn)題有:
(1)阻塞問(wèn)題。只要阻塞還沒(méi)有嚴(yán)重影響SQLSERVER的線程調(diào)度,errorlog里是不會(huì)有體現(xiàn)
(2)普通性能問(wèn)題,超時(shí)問(wèn)題。如果性能問(wèn)題不是由于內(nèi)存使用異常、線程調(diào)度異常,或者是I/O子系統(tǒng)反應(yīng)非常緩慢,
而是由于表格或語(yǔ)句設(shè)計(jì)導(dǎo)致,errorlog里也不會(huì)有所反映
(3)Windows層面異常。如果Windows層面出現(xiàn)工作不正常,或者服務(wù)器不響應(yīng),SQLSERVER很難自我判斷的
上面這三個(gè)問(wèn)題,errorlog里一般不會(huì)有所體現(xiàn)。這也是我們?yōu)槭颤N要第一步就要檢查Event Log的原因
下面給出一個(gè)errorlog的內(nèi)容出來(lái)講解
您可能感興趣的文章:- sqlserver 實(shí)現(xiàn)收縮數(shù)據(jù)庫(kù)日志操作
- SqlServer修改數(shù)據(jù)庫(kù)文件及日志文件存放位置
- 刪除sqlserver數(shù)據(jù)庫(kù)日志和沒(méi)有日志的數(shù)據(jù)庫(kù)恢復(fù)辦法
- SQLServer日志清空語(yǔ)句(sql2000,sql2005,sql2008)
- Sqlserver 2000/2005/2008 的收縮日志方法和清理日志方法
- SQLServer清理日志文件方法案例詳解