调试SQLSERVER生成dump文件的方法.docx

上传人:b****8 文档编号:9524960 上传时间:2023-02-05 格式:DOCX 页数:16 大小:2.69MB
下载 相关 举报
调试SQLSERVER生成dump文件的方法.docx_第1页
第1页 / 共16页
调试SQLSERVER生成dump文件的方法.docx_第2页
第2页 / 共16页
调试SQLSERVER生成dump文件的方法.docx_第3页
第3页 / 共16页
调试SQLSERVER生成dump文件的方法.docx_第4页
第4页 / 共16页
调试SQLSERVER生成dump文件的方法.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

调试SQLSERVER生成dump文件的方法.docx

《调试SQLSERVER生成dump文件的方法.docx》由会员分享,可在线阅读,更多相关《调试SQLSERVER生成dump文件的方法.docx(16页珍藏版)》请在冰豆网上搜索。

调试SQLSERVER生成dump文件的方法.docx

调试SQLSERVER生成dump文件的方法

调试SQLSERVER生成dump文件的方法

 

我们知道调试程序主要有两种方法

一种是:

livedebugging(附加进程使进程hang住)生产环境最好不要livedebugging 

一种是:

post-mortemdebuggingorreadingdumpfiles(生成dump文件然后进行分析)

 

现在介绍一下如何生成dump文件,以及各种方法的差异

第一步:

确定SQLSERVER的进程ID

由于我的机器安装了四个SQLSERVER实例,所以看到会有四个进程

方法1:

在cmd窗口输入下面命令

tasklist|find/i"sqlservr"

 

方法2:

打开任务管理进行查看

 

方法3:

在SSMS里执行下面sql语句

SELECTSERVERPROPERTY('PROCESSID')ASsqlpid

 

方法4:

从SQLerrorlog里获取进程ID

EXEC[sys].[sp_readerrorlog]

第二步:

生成DUMP文件

方法1:

使用SqlDumper

最一般的方法就是使用SQLSERVER内部的SqlDumper程序,如果使用默认安装路径defaultinstallationpath会是

C:

\ProgramFiles\MicrosoftSQLServer\100\Shared

 

 

语法如下:

SqlDumper

MinidumpFlags>

如果对语法不太熟悉,可以使用/?

查看帮助

一般我们会使用到的flag如下:

0x0120–Minidump(只会dump出栈和所加载的模块,是最小的dump类型,并且这是sqlserver正常情况下自动生成的dump类型)

0x01100–FullDump(这种dump类型包含整个进程空间,如果是64位系统并且SQLSERVER占用大量内存那么dump出来的文件将会非常大)

0x8100–FilteredDump(FilteredDump会dump出 StolenMemory和bufferpool部分)

 

SqlDumper这个工具不但只可以dump出sqlserver,也可以dump出其他软件,进而生成dump文件

 

示例:

Minidump:

sqldumper311600x01200C:

\Temp

FullDump:

sqldumper311600x011000C:

\Temp

FilteredDump:

sqldumper311600x81000C:

\Temp

 

SQL进程里当前有45个线程

生成的minidump文件

dump文件的命名规则一般是:

SQLDmpr####.mdmp

 

 

方法2:

使用debuggertools

例如使用WINDBG或其他debugger工具,将debugger附加到进程(使用PID)里面

WINDBG的下载地址:

下载下来进行安装,当然这时候可以同时下载公有符号包

下载地址:

安装好之后,就可以开始菜单看到WINDBG程序,点击他启动

选择AttachtoaProcess。

 我们附加到进程ID为2168的这个sqlserver进程

一旦连接上,我们只需要使用.dump命令就能生成dump文件,语法如下:

Optionsare:

/a-Createdumpsforallprocesses(requires-u)创建所有进程的dump文件需要-u选项

/b[a]-PackagedumpinaCABanddeletedump包装dump文件为CAB格式然后删除dump文件

/c-Addacomment(notsupportedinallformats)添加注释,不支持所有格式

/j-ProvideaJIT_DEBUG_INFOaddress提供一个JIT_DEBUG_INFO地址

/f-Createalegacystylefulldump创建一个历史fulldump

/m[acdfFhiprRtuw]-Createaminidump(default)创建一个minidump文件(默认选项)

/o-Overwriteanyexistingfile覆盖任何已经存在的文件

/u-Appenduniqueidentifiertodumpname追加唯一标识符到dump文件名

“.dump/ma”命令对于创建一个完整的用户态内存dump文件是合适的

使用下面命令创建SQLSERVER的minidump文件放在C:

\Temp路径下

.dump/maC:

\Temp\sqlexpress_pid2168_dump.dmp

 

 

方法3:

使用SQLSERVER内置的命令

在SQLSERVER里面,你可以使用两种方法创建dump文件,第一,使用下面的undocumented命令手工(手工触发)创建

DBCCSTACKDUMP

这个命令会在SQLSERVER实例安装路径下的LOG文件夹生成dump文件,要生成fulldump,minidump,full-filtereddump需要配合不同的traceflag

要生成fulldump使用下面命令

--fulldump

DBCCtraceon(2544,-1)

go

dbcctraceon(2546,-1)

go

dbccstackdump

go

dbccTRACEOFF(2544,2546,-1)

go

生成minidump使用下面命令

--minidump

dbcctraceon(2546,-1)

go

dbccstackdump

GO

dbccTRACEOFF(2544,2546,-1)

GO

生成full-filtereddump使用下面命令

--full-filtereddump

dbcctraceon(2551,-1)

go

dbccstackdump

GO

dbccTRACEOFF(2544,2546,2551,-1)

go

 

首先看一下你的SQL实例是安装在哪里,打开服务器属性,看到根目录那一栏

然后执行上面的命令

fulldump

minidump

 

full-filtereddump

 

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

 

 

另一种方法是使用下面的另一个undocumented命令(SQLSERVER自动触发)创建DUMP文件

DBCCDUMPTRIGGE

DBCCDUMPTRIGGER命令会在当有错误发生的时候触发dump的产生,当然你可以指定当发生某种特定错误的时候才触发

可以使用下面的命令当发生701错误的时候触发 

--turnonTFsforfulldump

DBCCTRACEON(2544,-1)

GO

DBCCTRACEON(2546,-1)

GO

--setDUMPTRIGGERforexception701

DBCCdumptrigger('set',701)

GO

--exception701occur

BACKUPDATABASE[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'

WITHBUFFERCOUNT=999999999,FORMAT

--消息3013,级别16,状态1,第2行

--BACKUPDATABASE正在异常终止。

--消息701,级别17,状态17,第2行

--资源池'default'没有足够的系统内存来运行此查询。

 

--viewexceptionssetforDUMPTRIGGER

DBCCTRACEON(3604,-1)

GO

DBCCdumptrigger('display')

GO

DBCCTRACEOFF(3604,-1)

GO

--Turnoffdumptriggerforexception701

DBCCdumptrigger('clear',701)

GO

这时候在LOG文件夹下就会看到生成的dump文件

 

 

方法4:

添加SQLSERVER的启动参数

–y:

启动参数在SQL启动的时候能完成DBCCDUMPTRIGGER命令类似的功能

Formoreinformationreferto:

 

方法5:

在任务管理器里按右键->创建转储文件 

这个方法不是太推荐,不是太可控

当点击按钮“创建转储文件”的时候,Windows会创建一个full dump文件

这个功能只能在Windows2008、Windows2008R2、Vista、Windows7上使用

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1