国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > 綜合 > 正文

調(diào)試SQLSERVER (一)生成dump文件的方法

2024-07-21 02:48:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
調(diào)試SQLSERVER (一)生成dump文件的方法調(diào)試SQLSERVER (一)生成dump文件的方法

調(diào)試SQLSERVER (二)使用Windbg調(diào)試SQLSERVER的環(huán)境設(shè)置調(diào)試SQLSERVER (三)使用Windbg調(diào)試SQLSERVER的一些命令

我們知道調(diào)試程序主要有兩種方法

一種是:live debugging (附加進(jìn)程 使進(jìn)程hang住) 生產(chǎn)環(huán)境最好不要live debugging

一種是:post-mortem debugging or reading dump files (生成dump文件然后進(jìn)行分析)

現(xiàn)在介紹一下如何生成dump文件,以及各種方法的差異


第一步:確定SQLSERVER的進(jìn)程ID

由于我的機(jī)器安裝了四個(gè)SQLSERVER實(shí)例,所以看到會(huì)有四個(gè)進(jìn)程

方法1:在cmd窗口輸入下面命令

tasklist | find /i "sqlservr"

方法2:打開(kāi)任務(wù)管理進(jìn)行查看

方法3:在SSMS里執(zhí)行下面sql語(yǔ)句

SELECT SERVERPROPERTY('PROCESSID') AS sqlpid

方法4:從SQL errorlog里獲取進(jìn)程ID

EXEC [sys].[sp_readerrorlog] 


第二步:生成DUMP文件

方法1:使用SqlDumper

最一般的方法就是使用SQLSERVER內(nèi)部的SqlDumper程序,如果使用默認(rèn)安裝路徑default installation path 會(huì)是

C:/Program Files/Microsoft SQL Server/100/Shared

語(yǔ)法如下:

SqlDumper <process id (PID)> <thread id (TID)> <Flags:Minidump Flags> <SQLInfoPtr> <Dump Directory>

如果對(duì)語(yǔ)法不太熟悉,可以使用/? 查看幫助

一般我們會(huì)使用到的flag如下:

0x0120 – Minidump(只會(huì)dump出棧和所加載的模塊,是最小的dump類(lèi)型 ,并且這是sqlserver正常情況下自動(dòng)生成的dump類(lèi)型)

0x01100 – Full Dump(這種dump類(lèi)型包含整個(gè)進(jìn)程空間,如果是64位系統(tǒng)并且SQLSERVER占用大量?jī)?nèi)存那么dump出來(lái)的文件將會(huì)非常大)

0x8100 – Filtered Dump(Filtered Dump 會(huì)dump出Stolen Memory和buffer pool部分)

SqlDumper這個(gè)工具不但只可以dump出sqlserver,也可以dump出其他軟件,進(jìn)而生成dump文件

示例:

Minidump: sqldumper 3116 0 0x0120 0 C:/TempFull Dump: sqldumper 3116 0 0x01100 0 C:/TempFiltered Dump: sqldumper 3116 0 0x8100 0 C:/Temp

SQL進(jìn)程里當(dāng)前有45個(gè)線(xiàn)程

生成的minidump文件

dump文件的命名規(guī)則一般是:SQLDmpr####.mdmp

方法2:使用debugger tools

例如使用WINDBG或其他debugger工具,將debugger附加到進(jìn)程(使用PID)里面

WINDBG的下載地址:http://msdn.microsoft.com/en-us/windows/hardware/hh852365

下載下來(lái)進(jìn)行安裝,當(dāng)然這時(shí)候可以同時(shí)下載公有符號(hào)包

下載地址:http://msdn.microsoft.com/zh-cn/windows/hardware/gg463028#Download_windows

安裝好之后,就可以開(kāi)始菜單看到WINDBG程序,點(diǎn)擊他啟動(dòng)

選擇Attach to a Process。。。

我們附加到進(jìn)程ID為2168的這個(gè)sqlserver進(jìn)程

一旦連接上,我們只需要使用.dump命令就能生成dump文件,語(yǔ)法如下:

Options are: /a - Create dumps for all processes (requires -u)  創(chuàng)建所有進(jìn)程的dump文件 需要-u 選項(xiàng)/b[a] - Package dump in a CAB and delete dump  包裝dump文件為CAB格式然后刪除dump文件/c <comment> - Add a comment (not supported in all formats)  添加注釋 ,不支持所有格式/j <addr> - Provide a JIT_DEBUG_INFO address  提供一個(gè)JIT_DEBUG_INFO地址/f - Create a legacy style full dump  創(chuàng)建一個(gè)歷史full dump/m[acdfFhiprRtuw] - Create a minidump (default)  創(chuàng)建一個(gè)mini dump文件(默認(rèn)選項(xiàng))/o - Overwrite any existing file  覆蓋任何已經(jīng)存在的文件/u - Append unique identifier to dump name  追加唯一標(biāo)識(shí)符到dump文件名

“.dump /ma” 命令對(duì)于創(chuàng)建一個(gè)完整的用戶(hù)態(tài)內(nèi)存dump文件是合適的

使用下面命令創(chuàng)建SQLSERVER的mini dump文件放在C:/Temp路徑下

.dump /ma C:/Temp/sqlexpress_pid2168_dump.dmp

方法3:使用SQLSERVER內(nèi)置的命令

在SQLSERVER里面,你可以使用兩種方法創(chuàng)建dump文件,第一,使用下面的undocumented命令手工(手工觸發(fā))創(chuàng)建

DBCC STACKDUMP

這個(gè)命令會(huì)在SQLSERVER實(shí)例安裝路徑下的LOG文件夾生成dump文件,要生成full dump,mini dump,full-filtered dump需要配合不同的trace flag

要生成full dump使用下面命令

--full dumpDBCC traceon(2544, -1) godbcc traceon(2546, -1) godbcc stackdumpgodbcc TRACEOFF(2544,2546, -1) go

生成mini dump 使用下面命令

--mini dump dbcc traceon(2546, -1) godbcc stackdumpGOdbcc TRACEOFF(2544,2546, -1) GO

生成full-filtered dump 使用下面命令

--full-filtered dump dbcc traceon(2551, -1) godbcc stackdumpGOdbcc TRACEOFF(2544,2546,2551, -1) go

首先看一下你的SQL實(shí)例是安裝在哪里,打開(kāi)服務(wù)器屬性,看到根目錄那一欄

然后執(zhí)行上面的命令

full dump

mini dump

full-filtered dump

可以看到dump文件的大小都不一樣

另一種方法是使用下面的另一個(gè)undocumented命令(SQLSERVER自動(dòng)觸發(fā))創(chuàng)建DUMP文件

DBCC DUMPTRIGGE

DBCC DUMPTRIGGER命令會(huì)在當(dāng)有錯(cuò)誤發(fā)生的時(shí)候觸發(fā)dump的產(chǎn)生,當(dāng)然你可以指定當(dāng)發(fā)生某種特定錯(cuò)誤的時(shí)候才觸發(fā)

可以使用下面的命令當(dāng)發(fā)生701錯(cuò)誤的時(shí)候觸發(fā)

-- turn on TFs for full dump DBCC TRACEON(2544, -1) GO DBCC TRACEON(2546, -1) GO-- set DUMP TRIGGER for exception 701 DBCC dumptrigger('set', 701) GO--exception 701  occurBACKUP DATABASE [Temp2] TO DISK ='E:/Temp21FULLBACKUP.BAK' ,DISK = 'E:/Temp22FULLBACKUP.bak',DISK = 'E:/Temp23FULLBACKUP.bak',DISK = 'E:/Temp24FULLBACKUP.bak',DISK = 'E:/Temp25FULLBACKUP.bak',DISK = 'E:/Temp26FULLBACKUP.bak'WITH BUFFERCOUNT=999999999,FORMAT--消息 3013,級(jí)別 16,狀態(tài) 1,第 2 行--BACKUP DATABASE 正在異常終止。--消息 701,級(jí)別 17,狀態(tài) 17,第 2 行--資源池 'default' 沒(méi)有足夠的系統(tǒng)內(nèi)存來(lái)運(yùn)行此查詢(xún)。-- view exceptions set for DUMP TRIGGER DBCC TRACEON(3604, -1) GO DBCC dumptrigger('display') GO DBCC TRACEOFF(3604, -1) GO-- Turn off dumptrigger for exception 701 DBCC dumptrigger('clear', 701) GO

這時(shí)候在LOG文件夾下就會(huì)看到生成的dump文件

方法4:添加SQLSERVER的啟動(dòng)參數(shù)

–y:?jiǎn)?dòng)參數(shù)在SQL啟動(dòng)的時(shí)候能完成DBCC DUMPTRIGGER命令類(lèi)似的功能

For more information refer to:

http://blogs.msdn.com/psssql/archive/2008/01/10/how-it-works-sql-server-engine-error-messages.aspx

方法5:在任務(wù)管理器里按右鍵->創(chuàng)建轉(zhuǎn)儲(chǔ)文件

這個(gè)方法不是太推薦,不是太可控

當(dāng)點(diǎn)擊按鈕“創(chuàng)建轉(zhuǎn)儲(chǔ)文件”的時(shí)候,Windows會(huì)創(chuàng)建一個(gè)fulldump文件

這個(gè)功能只能在Windows 2008 、Windows 2008 R2 、Vista 、 Windows 7上使用

下篇講解使用Windbg調(diào)試SQLSERVER的環(huán)境設(shè)置

參考文章

http://blogs.msdn.com/b/askjay/archive/2010/02/05/how-can-i-create-a-dump-of-sql-server.aspx

歡迎大家拍磚o(∩_∩)o


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 怀柔区| 喀喇沁旗| 泗阳县| 扶绥县| 运城市| 麦盖提县| 连城县| 临泽县| 大田县| 图片| 京山县| 正阳县| 葫芦岛市| 锦州市| 汝南县| 象州县| 奉节县| 晋江市| 孟津县| 鹤山市| 武定县| 雷波县| 茶陵县| 余江县| 余姚市| 洱源县| 如皋市| 库伦旗| 武威市| 潜江市| 西宁市| 光山县| 裕民县| 封丘县| 赫章县| 攀枝花市| 田阳县| 乡城县| 云阳县| 商水县| 邯郸县|